techquisitor (
techquisitor) wrote2015-08-03 05:03 pm
Хозяйке на заметку: Восстанавливаем RabbitMQ после некорректного выключения
Дано: нода с RabbitMQ, которую крайне неаккуратно потушили. Нода не стартует, на любые попытки стартовать выдаёт нечто невразумительное вроде:
И тому подобное. В логах в лучшем случае будет что-то типа:
При этом никакой rabbitmqctl force_boot и тому подобное не поможет. Делаем следующее. Идём в /var/lib/rabbitmq/mnesia и копируем базу оттуда в сухое, тёплое место. Старую базу в mnesia/ удаляем. Далее, выполняем: service rabbitmq-server restart. Именно перезапуск, а не старт и не останов. Иначе не поднимается демон. Далее, проверяем ps-ом, что кролик стартанул. После чего делаем: systemctl rabbitmq-server stop. Далее, возвращаем базу на место, удалив то, что RabbitMQ сгенерил в каталоге mnesia/ при повторном перезапуске. Далее, как обычно: service rabbitmq-server start. Если всё сделано верно, то нода в рабочем состоянии появится в management-консоли.
[root@rabbitmq4 ~]# rabbitmqctl status
Status of node rabbit@rabbitmq4 ...
Error: unable to connect to node rabbit@rabbitmq4: nodedown
DIAGNOSTICS
===========
attempted to contact: [rabbit@rabbitmq4]
rabbit@rabbitmq4:
* connected to epmd (port 4369) on rabbitmq4
* epmd reports: node 'rabbit' not running at all
no other nodes on rabbitmq4
* suggestion: start the node
И тому подобное. В логах в лучшем случае будет что-то типа:
Crash dump was written to: erl_crash.dump init terminating in do_boot (timeout_waiting_for_tables)
При этом никакой rabbitmqctl force_boot и тому подобное не поможет. Делаем следующее. Идём в /var/lib/rabbitmq/mnesia и копируем базу оттуда в сухое, тёплое место. Старую базу в mnesia/ удаляем. Далее, выполняем: service rabbitmq-server restart. Именно перезапуск, а не старт и не останов. Иначе не поднимается демон. Далее, проверяем ps-ом, что кролик стартанул. После чего делаем: systemctl rabbitmq-server stop. Далее, возвращаем базу на место, удалив то, что RabbitMQ сгенерил в каталоге mnesia/ при повторном перезапуске. Далее, как обычно: service rabbitmq-server start. Если всё сделано верно, то нода в рабочем состоянии появится в management-консоли.
