2015-10-10 4 views
0

Мы загружаем кластер из 250 рабочих узлов в AWS ночью, чтобы обрабатывать некоторые длительные распределенные задачи.Работники сельдерея остановились на ботинке

Узлы рабочие работают сельдерей с помощью следующей команды:

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 в качестве нашего брокера, и есть только один RabbitMQ узел.

Около 60% наших узлов утверждают, что слушают, но не будут выполнять какие-либо задачи.

Их журналы выглядеть следующим образом:

-------------- [email protected]_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] [email protected]_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] [email protected]_cluster.i-1b1a0dbb ready. 

Однако RabbitMQ показывает, что есть сообщения, ожидающие в очереди.

Если я войти в любой из рабочих узлов и выдает команду:

celery -A celery_worker inspect active 

... то каждый (ранее приостанавливаться) рабочий узел сразу хватается задачу и начинает сгибать.

Любые идеи относительно того, почему?

Возможно, это связано с этими переключателями?

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

ответ

2

Оказывается, что это была ошибка в сельдерее, где использование --without-gossip хранятся события из слив. Реализация сплетен сельдереем довольно новая, и она, по-видимому, неявно берет на себя ответственность за дренирование событий, но когда вы выключаете ее, все становится немного странным.

Подробности по этому вопросу изложены в этой GitHub вопрос: https://github.com/celery/celery/issues/1847

Master в настоящее время имеет исправление в этом PR: https://github.com/celery/celery/pull/2823

Таким образом, вы можете решить эту проблему один из трех способов:

  • Использовать сплетни (удалить - без сплетен)
  • Исправить вашу версию сельдерея с помощью https://github.com/celery/celery/pull/2823.patch
  • Используйте задание cron для регулярного запуска celery inspect active
Смежные вопросы