Лопата 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. Запуск кластера из 2 узлов (в ближайшее время он станет кластером из 3 узлов из-за очевидной проблемы, с которой мы можем столкнуться в случае сетевого раздела).

Лопата RabbitMQ застряла в состоянии

1 ответ

Решение

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

Мы используем 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 в надежде, что это решит проблему... но это не так. Возможно, очереди кворума - более надежное решение? Если бы у меня было больше времени на исследования / эксперименты, я бы сделал это, но я по уши занят более высокими приоритетами.

Другие вопросы по тегам