Узлы очередей не соединяются: не совпадает файл общего секрета
Узлы среды исполнения проверяют друг друга по общему секрету из файла. Его несовпадение даёт отказ соединения, а неверные права на файл делают недоступными даже локальные команды управления — что выглядит как полностью неработающая служба.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Секрет различается на узлах
Без совпадающего секрета узлы не устанавливают соединение и не образуют кластер.
-
Права на файл секрета неверны
Среда исполнения требует узких прав. При широких правах она отказывается работать с файлом.
-
Команды управления запускаются от другого пользователя
Команда ищет секрет в домашнем каталоге запускающего пользователя. От root это другой файл.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Состояние кластера или сообщение об отказе соединения.
sudo rabbitmqctl cluster_status 2>&1 | head -15Права и владелец файла секрета.
sudo ls -l /var/lib/rabbitmq/.erlang.cookieСообщения службы при запуске и соединении узлов.
journalctl -u rabbitmq-server -n 30 --no-pagerРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Без совпадающего секрета узлы не устанавливают соединение и не образуют кластер.
- Как проверить
-
Сравните секреты по контрольной сумме, не раскрывая их.
sudo md5sum /var/lib/rabbitmq/.erlang.cookie 2>/dev/null sudo rabbitmqctl cluster_status 2>&1 | head -10
- Как исправить
- Приведите файл секрета к одинаковому содержимому на всех узлах и перезапустите их. Сравнивать содержимое стоит по контрольной сумме.
- Почему происходит
- Среда исполнения требует узких прав. При широких правах она отказывается работать с файлом.
- Как проверить
-
Посмотрите права и владельца.
sudo ls -l /var/lib/rabbitmq/.erlang.cookie 2>/dev/null
- Как исправить
-
Установите права только для владельца и сделайте владельцем пользователя службы. Это требование среды исполнения, а не рекомендация.
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie && sudo chown rabbitmq: /var/lib/rabbitmq/.erlang.cookie
- Почему происходит
- Команда ищет секрет в домашнем каталоге запускающего пользователя. От root это другой файл.
- Как проверить
-
Посмотрите, какой файл видит команда.
sudo ls -l /root/.erlang.cookie 2>/dev/null; sudo ls -l /var/lib/rabbitmq/.erlang.cookie 2>/dev/null
- Как исправить
- Запускайте команды управления от пользователя службы. Копия секрета в чужом домашнем каталоге — источник путаницы.
Пример вывода
Секрет на узлах различается. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
rabbitmqctl[12100]: Error: unable to perform an operation on node 'rabbit@node2'
rabbitmqctl[12100]: * Authentication failed (rejected by the remote node), please check the Erlang cookie
rabbitmq[12110]: ** Connection attempt from node 'rabbitmqcli-1@node1' rejected. Invalid challenge reply. **
Связанные ошибки
- RabbitMQ: узел не находит свои данные после смены имени машины Имя узла RabbitMQ включает имя хоста. После его смены брокер не видит прежние очереди.
- Смена имени машины ломает работу служб После переименования часть служб отказывает: имя запомнено в настройках, сертификатах и кластерах.
- Permission denied в журнале службы Отказ в доступе у службы systemd: права на файл, каталоги по пути, пользователь службы, параметры изоляции, SELinux и AppArmor.
- AppArmor: apparmor="DENIED" в журнале ядра Профиль AppArmor запретил операцию: как прочитать запись, найти профиль и поправить его правильно.
- Caddy не занимает порты 80 и 443 без прав Служба падает при открытии слушателя: нет возможности занимать привилегированные порты.
- Celery: обработчик работает, но задачи не берутся Служба обработчика активна, очередь растёт: не та очередь, недоступный брокер, префикс имён.
- Configuration file is marked executable Предупреждение о правах: unit-файл помечен исполняемым. Откуда берётся и почему это стоит исправить.
- Configuration file is marked world-inaccessible Предупреждение о правах на unit-файл: служба работает, но файл недоступен для чтения другим.
Где встречается чаще всего
Источники
- Документация RabbitMQ: узлы и общий секрет
-
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Воспроизведено разными файлами секрета на двух узлах.