【问题标题】:Celery workers stalled on boot芹菜工人在启动时停滞不前
【发布时间】:2023-05-22 10:35:01
【问题描述】:

我们晚上在 AWS 中启动一个包含 250 个工作节点的集群,以处理一些长时间运行的分布式任务。

工作节点正在使用以下命令运行 celery:

celery -A celery_worker worker --concurrency=1 -l info -n background_cluster.i-1b1a0dbb --without-heartbeat --without-gossip --without-mingle -- celeryd.prefetch_multiplier=1

我们使用rabbitmq作为我们的broker,并且只有1个rabbitmq节点。

我们大约 60% 的节点声称正在侦听,但不会接听任何任务。

他们的日志如下所示:

 -------------- celery@background_cluster.i-1b1a0dbb v3.1.18 (Cipater)
---- **** -----
--- * ***  * -- Linux-3.2.0-25-virtual-x86_64-with-Ubuntu-14.04-trusty
-- * - **** ---
- ** ---------- [config]
- ** ---------- .> app:         celery_worker:0x7f10c2235cd0
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled
- *** --- * --- .> concurrency: 1 (prefork)
-- ******* ----
--- ***** ----- [queues]
 -------------- .> background_cluster exchange=root(direct) key=background_cluster


[tasks]
  . more.celery_worker.background_cluster

[2015-10-10 00:20:17,110: WARNING/MainProcess] celery@background_cluster.i-1b1a0dbb
[2015-10-10 00:20:17,110: WARNING/MainProcess] consuming from
[2015-10-10 00:20:17,110: WARNING/MainProcess] {'background_cluster': <unbound Queue background_cluster -> <unbound Exchange root(direct)> -> background_cluster>}
[2015-10-10 00:20:17,123: INFO/MainProcess] Connected to amqp://our_server:**@10.0.11.136:5672/our_server
[2015-10-10 00:20:17,144: WARNING/MainProcess] celery@background_cluster.i-1b1a0dbb ready.

但是rabbitmq显示队列中有消息在等待。

如果我登录到任何工作节点并发出以下命令:

celery -A celery_worker inspect active

...然后每个(之前停滞的)工作节点立即抓取一个任务并开始启动。

关于为什么的任何想法?

可能和这些开关有关?

--without-heartbeat --without-gossip --without-mingle

【问题讨论】:

    标签: rabbitmq celery


    【解决方案1】:

    事实证明,这是 celery 中的一个错误,使用 --without-gossip 可以防止事件耗尽。 Celery 对 gossip 的实现是相当新的,它显然隐含地处理了耗尽事件,但是当你关闭它时,事情变得有点不稳定。

    此 github 问题概述了该问题的详细信息:https://github.com/celery/celery/issues/1847

    Master 目前在此 PR 中有修复:https://github.com/celery/celery/pull/2823

    所以你可以通过以下三种方式之一来解决这个问题:

    【讨论】: