如何在多台服务器之间平衡 celery 任务?

ala*_*ani 6 python rabbitmq celery

我在多台服务器上运行 celery,每台服务器都有 2 个或更多并发,我想对 celery 任务进行负载平衡,以便 CPU 使用率最低的服务器可以处理我的 celery 任务。

例如,假设我有 2 个服务器(A 和 B),每个服务器的并发为 2,如果队列中有 2 个任务,我希望 A 处理一个任务,B 处理另一个。但是目前有可能 A 上的第一个进程将执行一个任务,而 A 上的第二个进程将在 B 空闲时执行第二个任务。

有没有一种简单的方法,通过 celery 扩展或配置,我可以将任务路由到 CPU 使用率最低的服务器?

eal*_*eon 2

尝试:

http://docs.celeryproject.org/en/latest/userguide/optimizing.html#guide-optimizing
您可以通过启用 -Ofair 工作选项来禁用此预取行为:

$ celery -A proj worker -l info -Ofair"

  • -O fair 并没有做太多具体的服务器之间的平衡,它只是关于同一节点上的进程之间的平衡。如果每个节点有 4 个工作线程,那么很容易出现这样的情况:一个节点正在运行 4 个作业,而其他节点完全空闲。 (2认同)