SystemdDoctor
служба не работает rabbitmq данные

RabbitMQ: узел не находит свои данные после смены имени машины

Имя узла RabbitMQ складывается из имени приложения и имени машины. Каталог данных называется по имени узла, поэтому смена имени хоста приводит к тому, что брокер стартует «с чистого листа» или не стартует вовсе.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Имя машины изменилось

    После переноса виртуальной машины или правки имени хоста прежний каталог данных перестаёт соответствовать новому имени узла.

  2. Короткое и полное имя машины не совпадают

    RabbitMQ по умолчанию использует короткое имя. Если в системе настроено полное имя, узел может искать другой каталог.

  3. Права на файл cookie сбиты

    Файл, по которому узлы опознают друг друга, должен принадлежать пользователю службы с правами 0600. Запуск команд под root пересоздаёт его неверно.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Имена каталогов данных — по ним видно прежние имена узлов.

sudo ls -1 /var/lib/rabbitmq/mnesia/

Имя машины и состояние узла.

hostname -s && sudo rabbitmq-diagnostics status 2>&1 | head -12

Сообщения брокера при запуске.

journalctl -u rabbitmq-server -n 40 --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Имя машины изменилось
Почему происходит
После переноса виртуальной машины или правки имени хоста прежний каталог данных перестаёт соответствовать новому имени узла.
Как проверить
Сравните имя машины и имена каталогов данных.
hostname -s
sudo ls -1 /var/lib/rabbitmq/mnesia/
Как исправить
Либо верните прежнее имя машины, либо задайте имя узла явно через переменную окружения в переопределении unit-файла — тогда оно не будет зависеть от имени хоста.
sudo systemctl edit rabbitmq-server   # [Service]\nEnvironment=RABBITMQ_NODENAME=rabbit@stable-name
2. Короткое и полное имя машины не совпадают
Почему происходит
RabbitMQ по умолчанию использует короткое имя. Если в системе настроено полное имя, узел может искать другой каталог.
Как проверить
Посмотрите оба имени.
hostname -s; hostname -f
sudo rabbitmqctl eval "node()." 2>/dev/null
Как исправить
Приведите настройку в соответствие: либо короткое имя везде, либо полное с параметром использования полных имён.
3. Права на файл cookie сбиты
Почему происходит
Файл, по которому узлы опознают друг друга, должен принадлежать пользователю службы с правами 0600. Запуск команд под root пересоздаёт его неверно.
Как проверить
Посмотрите права на файл.
sudo ls -l /var/lib/rabbitmq/.erlang.cookie
Как исправить
Верните владельца и права 0600: файл cookie читают только процессы брокера, и посторонний доступ к нему недопустим.
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie && sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie

Пример вывода

Каталог данных от прежнего имени машины. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

$ sudo ls -1 /var/lib/rabbitmq/mnesia/
rabbit@old-hostname
rabbit@old-hostname-plugins-expand

$ hostname -s
new-hostname

rabbitmq[4900]: Starting RabbitMQ on node rabbit@new-hostname
rabbitmq[4900]: Database directory at /var/lib/rabbitmq/mnesia/rabbit@new-hostname is empty. Initialising from scratch...

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация RabbitMQ: имена узлов документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено сменой имени машины на тестовом узле.
    собственная проверка, systemd 255
    сверено 15 сентября 2026