Восстановление работоспособности Rabbit¶
Окружение.
Создано 3 виртуальные машины и кластер. Проверить построение кластера. Главный узел yzm1(128), подчиненный узел yzm2(129), подчиненный узел yzm3(130).
Главный узел работает нормально, но подчиненный узел не работает.
Проверьте состояние кластера, все 3 виртуальные машины работают нормально:
Выключите yzm2, завершите работу виртуальной машины, соответствующей yzm2:
Удалите узел yzm2:
Перезапустите службу RabbitMQ yzm2:
Сообщение об ошибке: по данным узла
Rabbit@yzm2
он кластеризован с узломRabbit@yzm3
, но данныеRabbit@yzm3
не совпадают с этими данными.Это означает, что простой yzm2 не является нормальным выходом из кластера, и информация о конфигурации узла кластера по-прежнему сохраняется, но узел yzm2 исключен из кластера.
Решением является очистка информации о конфигурации зарезервированного узла:
rm -rf /var/lib/rabbitmq/mnesia/*.
После удаления файлов в каталоге mnesia они через некоторое время будут восстановлены.
Если вы случайно удалили каталог mnesia, создайте его заново, но вы должны убедиться, что пользователь и группа каталога — RabbitMQ.
Команда:
chown Rabbitmq:rabbitmq /var/lib/rabbitmq/
yzm2 снова присоединяется к кластеру:
Главный узел не работает, а подчиненный узел работает нормально.
Закрыть yzm3, yzm2
yzm1 не работает, выключите виртуальную машину.
В это время yzm1 является последним узлом, и последний узел также считается главным узлом.
Запустите yzm2, он будет ждать запуска yzm1 и не сможет запуститься по истечении времени ожидания:
Используйте yzm3, чтобы вывести yzm1:
Основная команда:
rabbitmqctl force_boot rabbitmqctl start_app rabbitmqctl forget_cluster_node rabbit@yzm1
Также может использоваться параметр –offline, но по неизвестной причине его использование не было успешным.
Например, такое использование:
rabbitmqctl forget_cluster_node --offline rabbit@yzm1 rabbitmqctl -n rabbit@yzm3 forget_cluster_node --offline rabbit@yzm1
На конечном этапе перезапустите yzm1 и присоединитесь к кластеру.
Этот шаг аналогичен приведенному выше перезапуску yzm2 для присоединения к кластеру. Сначала необходимо удалить информацию о конфигурации узла, статус кластера:
Обновление узла перед запуском узла.
Текущий кластер имеет узлы yzm2 и yzm3.
Выключение узла yzm2:
В то же время запустите yzm1, чтобы снова присоединиться к кластеру (перед запуском службы RabbitMQ необходимо очистить информацию о конфигурации узла):
Закройте узел yzm3 и запустите узел yzm2:
yzm2 будет ждать, пока истечет время ожидания, и сообщит об ошибке.
Перед запуском необходимо проверить yzm1, который нормально работает в кластере:
rabbitmqctl update_cluster_nodes rabbit@yzm1