Восстановление работоспособности Rabbit

  1. Окружение.

    Создано 3 виртуальные машины и кластер. Проверить построение кластера. Главный узел yzm1(128), подчиненный узел yzm2(129), подчиненный узел yzm3(130).

  2. Главный узел работает нормально, но подчиненный узел не работает.

    Проверьте состояние кластера, все 3 виртуальные машины работают нормально:

    ../../_images/cluster_status.png

    Проверка состояния кластера

    Выключите yzm2, завершите работу виртуальной машины, соответствующей yzm2:

    ../../_images/yzm2.png

    Выключение yzm2

    Удалите узел yzm2:

    ../../_images/removing_yzm2.png

    Удаление yzm2

    Перезапустите службу RabbitMQ yzm2:

    ../../_images/restarting_rabbit.png

    Перезапуск службы RabbitMQ

    Сообщение об ошибке: по данным узла Rabbit@yzm2 он кластеризован с узлом Rabbit@yzm3, но данные Rabbit@yzm3 не совпадают с этими данными.

    Это означает, что простой yzm2 не является нормальным выходом из кластера, и информация о конфигурации узла кластера по-прежнему сохраняется, но узел yzm2 исключен из кластера.

    Решением является очистка информации о конфигурации зарезервированного узла:

    rm -rf /var/lib/rabbitmq/mnesia/*.
    
    ../../_images/solution.png

    Очистка информации о конфигурации

    После удаления файлов в каталоге mnesia они через некоторое время будут восстановлены.

    ../../_images/regeneration.png

    Восстановление данных

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

    Команда:

    chown Rabbitmq:rabbitmq /var/lib/rabbitmq/
    

    yzm2 снова присоединяется к кластеру:

    ../../_images/rejoins.png

    Присоединение yzm2 к кластеру

  3. Главный узел не работает, а подчиненный узел работает нормально.

    Закрыть yzm3, yzm2

    ../../_images/close_yzm.png

    Закрытие yzm3, yzm2

    yzm1 не работает, выключите виртуальную машину.

    В это время yzm1 является последним узлом, и последний узел также считается главным узлом.

    Запустите yzm2, он будет ждать запуска yzm1 и не сможет запуститься по истечении времени ожидания:

    ../../_images/starting_yzm.png

    Запуск yzm2

    Используйте yzm3, чтобы вывести yzm1:

    ../../_images/eliminate_yzm1.png

    Вывод 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 для присоединения к кластеру. Сначала необходимо удалить информацию о конфигурации узла, статус кластера:

    ../../_images/deleting_configuration.png

    Удаление конфигурации

  4. Обновление узла перед запуском узла.

    Текущий кластер имеет узлы yzm2 и yzm3.

    ../../_images/nodes_2.png

    Узлы yzm2 и yzm3

    Выключение узла yzm2:

    ../../_images/shutdown_yzm2.png

    Выключение узла yzm2

    В то же время запустите yzm1, чтобы снова присоединиться к кластеру (перед запуском службы RabbitMQ необходимо очистить информацию о конфигурации узла):

    ../../_images/starting_yzm1.png

    Запуск yzm1

    Закройте узел yzm3 и запустите узел yzm2:

    ../../_images/closing_yzm3.png

    Закрытие yzm3

    ../../_images/starting_yzm2.png

    Запуск yzm2

    yzm2 будет ждать, пока истечет время ожидания, и сообщит об ошибке.

    Перед запуском необходимо проверить yzm1, который нормально работает в кластере:

    rabbitmqctl update_cluster_nodes rabbit@yzm1
    
    ../../_images/consulting_yzm1.png

    Проверка yzm1