RabbitMQ 4.x не принимает политику зеркалирования очередей
«[{<<"ha-mode">>,<<"all">>}] are not recognised policy settings» при rabbitmqctl set_policy: в RabbitMQ 4.0 убрали зеркалирование классических очередей, и политика ha-all из инструкции по кластеру больше не принимается. Что проверить и какие есть варианты.
Что это значит
Команда rabbitmqctl set_policy ... '{"ha-mode":"all"}' отклонена: брокер не знает параметров ha-mode, ha-sync-mode и других ключей с ha-. Это зеркалирование классических очередей, которое в RabbitMQ 4.0 удалено совсем (в примечаниях к выпуску 4.0: «classic queue mirroring was completely removed»). На версиях 3.13.x та же команда проходит с предупреждением об устаревшей функции, на 4.x уже нет. Проверено на RabbitMQ 4.4.0 в контейнере.
Так бывает, когда инструкцию по кластеру писали под 3.13, а брокер поставили или обновили до 4.x. В справке Directum RX 25.2 статья о кластере RabbitMQ для Linux (admin_cluster_rmq.htm) ставит 3.13.7 и задаёт политику ha-all с ha-mode: all, а в других статьях той же справки поставляется RabbitMQ 4.0. Подробный разбор в статье «Политика ha-all из справки RX не ставится на RabbitMQ 4».
Как проверить
rabbitmqctl version
rabbitmqctl list_policies -p <vhost>
rabbitmqctl list_queues -p <vhost> name type | awk '{print $2}' | sort | uniq -c
Первая команда покажет версию брокера, вторая уже заданные политики, третья типы очередей в виртуальном хосте. На 3.13 перед обновлением дополнительно:
rabbitmq-diagnostics check_if_cluster_has_classic_queue_mirroring_policy
rabbitmqctl list_feature_flags name state
Что сделать
- Не пытаться подобрать другое написание политики: на 4.x зеркалирования классических очередей нет ни в каком виде.
- Если нужен кластер именно по инструкции с
ha-all, оставить брокер на 3.13.x и сверить версию с типовыми требованиями к ПО для вашей версии RX. - Если нужна отказоустойчивость на 4.x, это кворумные очереди. Справка RX 25.2 не говорит, работает ли с ними RX и какой тип очереди объявляют сервисы, поэтому вариант сначала проверяют на тестовом стенде и уточняют у вендора.
- При обновлении 3.13 → 4.x заранее удалить политики с ключами
ha-и включить все стабильные флаги функций. Без политики классические очереди остаются, но живут на одном узле.
Ошибка повторяется?
Запустите Диагностика: за полминуты он покажет состояние базы, брокера, поиска и сервера. С отчётом разберём причину за 30 минут бесплатного созвона.
Написать