Лопата RabbitMQ застряла в статусе «Прервано»

У нас возникает проблема, когда время от времени динамическая лопата (созданная с помощью HTTP API: /api/parameters/shovel/) с src-delete-after, установленным на queue-length, завершает работу, а затем вместо удаления застревает в статусе завершено.

Последующие попытки удалить лопату любым из следующих способов безуспешны:

  1. Отправка DELETE в /api/parameters/shovel/
  2. rabbitmqctl delete_shovel
  3. rabbitmqctl clear_parameter -p <vhost> shovel <shovel_name>

Лопата даже не отображается в разделе «Управление лопатой» административного интерфейса RabbitMQ.

Единственный способ избавиться от застрявшей лопаты - это перезапустить RabbitMQ.

Есть ли у кого-нибудь еще эта проблема? Если да, то как очистить лопату без перезапуска кластера? Кроме того, можно ли предотвратить это с помощью конфигурации?

Спасибо!

PS:

  1. Версия RabbitMQ: 3.4.4
  2. Запуск двухузлового кластера (в ближайшее время он станет трехузловым из-за очевидной проблемы, с которой мы можем столкнуться в случае сетевого раздела).

Лопата RabbitMQ застряла в статусе


person nemo    schedule 27.06.2018    source источник
comment
В настоящее время у меня такая же проблема, и я использую RMQ 3.7.13 и Erlang 21.3.1. Все 3 команды у меня не работают. API возвращает 405 недопустимый метод. Интерфейс командной строки возвращает "Параметр не существует". И пользовательский интерфейс, и / api / shovels показывают 2 лопаты зомби, но я не могу их удалить.   -  person Lee Grissom    schedule 07.07.2020


Ответы (2)


Вы используете очень-очень старую версию RabbitMQ. Обновите до последней версии (3.7.6) и обязательно используйте Erlang 20.3.X (не 21). Если вы все еще можете воспроизвести эту проблему, сообщите об этом на странице rabbitmq-users список рассылки.

person Luke Bakken    schedule 29.06.2018

Мы используем RMQ 3.7.13, Erlang 21.3.1.

Один возможный способ возникновения проблемы:

  • 3-узловой кластер высокой доступности
  • перезапустите один из узлов (/etc/init.d/rabbitmq-server restart)
  • старые лопаты и старые очереди как-то воскреснут

Лопаты нельзя удалить ни одним из способов, упомянутых в вопросе. Единственный способ удалить лопаты - это отключить плагин лопаты на всех 3 узлах кластера, а затем снова включить каждый плагин на каждом узле следующим образом:

rabbitmq-plugins disable rabbit_shovel
rabbitmq-plugins enable rabbit_shovel
rabbitmq-plugins enable rabbit_shovel_management

Что касается воскрешения старых очередей (происходит случайным образом, ничего не касаясь ... Я называю их очередями зомби), эта проблема возникает примерно раз в месяц, поэтому я создал сценарии PostMan для удаления воскрешенных очередей. Это было проблемой в течение многих лет. Мы обновили RMQ в надежде, что это решит проблему ... но это не так. Возможно, очереди кворума - более надежное решение? Если бы у меня было больше времени на исследования / эксперименты, я бы сделал это, но я по уши занят более высокими приоритетами.

person Lee Grissom    schedule 07.07.2020