【问题标题】:How to load balance celery tasks across several servers?如何跨多台服务器负载均衡 celery 任务?
【发布时间】:2015-09-28 20:18:57
【问题描述】:

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

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

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

【问题讨论】:

  • 你找到解决办法了吗..

标签: python rabbitmq celery


【解决方案1】:

最好的选择是使用生产服务器中的celery.send_task,然后将工作人员部署到n 实例上。然后可以使用celery -A proj worker -l info -Ofair 像@ealeon 提到的那样运行工人。
这样,负载将分布在所有服务器上,而无需在消费服务器上存在代码库。

【讨论】:

    【解决方案2】:

    试试:

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

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

    【讨论】:

    • -O fair 对跨服务器的平衡没有太大作用,它只是在同一节点上的进程间平衡。如果每个节点有 4 个工作人员,您很容易会遇到一个节点运行 4 个作业而其他节点完全空闲的情况。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-26
    • 1970-01-01
    • 2018-12-17
    • 2017-06-12
    • 2019-01-05
    相关资源
    最近更新 更多