关于在多个负载均衡的Django应用服务器上使用Celery的问题

时间:2012-04-11 00:20:38

标签: celery django-celery celeryd

我有兴趣将Celery用于我正在开发的应用程序。这一切看起来都非常简单,但如果我有多个负载均衡的应用服务器,我对我需要做的事情有点困惑。所有文档都假定代理与应用程序位于同一服务器上。目前,我的所有应用程序服务器都位于Amazon ELB后面,任务需要能够来自其中任何一个。

这是我认为我需要做的事情:

  • 在单独的实例上运行代理服务器
  • 配置每个应用程序实例以连接到该代理服务器
  • 每个应用程序实例也将是一个芹菜工作(运行 celeryd)?

我唯一的关注点是:如果我的经纪人实例死亡会怎样?我可以运行2个代理实例吗?如果一个人进入,我会安全吗?

任何有关如何在我的设置中做什么的提示或信息将不胜感激。我确定我错过了什么或者没有理解。

3 个答案:

答案 0 :(得分:2)

供将来参考,对于那些喜欢坚持使用RabbitMQ的人......

您可以从2个或更多实例创建RabbitMQ群集。将这些实例添加到您的ELB并将您的芹菜工人指向ELB。只要确保连接正确的端口,就应该全部设置好。不要忘记允许RabbitMQ计算机相互通信以运行集群。这在我的制作中非常适合我。

此处有一个例外:如果您需要安排任务,则需要celerybeat流程。出于某种原因,我无法将celerybeat连接到ELB,并且必须直接将其连接到其中一个实例。我打开了一个关于它的问题,它应该被解决(还没有测试它)。请记住,芹菜本身只能存在一次,所以这已经是一个单一的失败点。

答案 1 :(得分:1)

你的所有观点都是正确的。

如何制作可靠的代理:进行集群式rabbitmq安装,如下所述:    http://www.rabbitmq.com/clustering.html

答案 2 :(得分:0)

如果你在每个工作节点上运行它,那么芹菜击败也不一定是单点故障:

https://github.com/ybrs/single-beat