2

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

这是我认为我需要做的:

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

我唯一对此感到不满的是:如果我的代理实例死了会发生什么?我可以以某种方式运行 2 个代理实例,这样如果一个发生故障我是安全的吗?

任何关于在像我这样的设置中做什么的提示或信息将不胜感激。我确定我错过了一些东西或不理解一些东西。

4

3 回答 3

3

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

您可以从 2 个或更多实例创建 RabbitMQ 集群。将这些实例添加到您的 ELB 并将您的 celeryd 工作人员指向 ELB。只要确保您连接了正确的端口,您就应该准备就绪。不要忘记让您的 RabbitMQ 机器相互交谈以运行集群。这对我在生产中非常有效。

这里有一个例外:如果你需要安排任务,你需要一个 celerybeat 进程。出于某种原因,我无法将 celerybeat 连接到 ELB,而不得不将其直接连接到其中一个实例。我打开了一个关于它的问题,它应该得到解决(尚未测试)。请记住,celerybeat 本身只能存在一次,因此这已经是单点故障。

于 2012-05-01T12:50:49.673 回答
1

你在所有方面都是正确的。

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

于 2012-04-11T06:15:06.880 回答
0

如果您在每个工作节点上运行 Celery beat,也不必是单点故障:

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

于 2015-06-16T19:51:58.357 回答