Развертывание кластера RabbitMQ на CentOS 8.5
Дополнительная информация по работе с кластерами (на английском языке): Clustering Guide и Queue Mirroring .
-
На каждом узле кластера развертываем RabbitMQ в соответствии со статьей Установка RabbitMQ под CentOS 8.
-
На каждом узле кластера открываем дополнительные порты, необходимые для работы кластера:
# firewall-cmd --zone=public --add-port=4369/tcp --permanent
# firewall-cmd --reload- Каждый узел кластера должен иметь уникальное имя хоста. Имя хоста можно задать командой (требуется перезагрузка):
# sudo vim /etc/hostname
# sudo rebootНапример, для кластера из 2-х узлов с именами хостов node01 и node02 и IP 192.168.1.160 и 192.168.161:

По умолчанию RabbitMQ будет идентифицировать узел как rabbit@hostname.
- На каждом узле одинаково настраиваем файл /etc/hosts:
# sudo vim /etc/hosts

- Настраиваем идентификацию кластера: открываем файл
/var/lib/rabbitmq/.erlang.cookieна узле node01:
# vim /var/lib/rabbitmq/.erlang.cookieи копируем его содержимое в этот же файл на узле node02. Кластер будет образован узлом node01.
- Останавливаем RabbitMQ на узле node02:
# sudo rabbitmqctl stop_app- Включаем узел node02 в кластер, выполнив на нем команду:
# sudo rabbitmqctl join_cluster rabbit@node01- Запускаем RabbitMQ на узле node02:
# sudo rabbitmqctl start_app- Проверяем состояние кластера на обоих узлах node01 и node02:
# sudo rabbitmqctl cluster_status
- Создаем пользователя RabbitMQ для кластера, назначаем ему права. На узле node01 выполняем команды:
# sudo rabbitmqctl add_user 'admin' 'Qwe123!@#'
# sudo rabbitmqctl set_user_tags admin administrator
# sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'- Создаем политику с именем ha-all для репликации типа «реплицируются все очереди на всех узлах». На узле node01 выполняем команду:
# sudo rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'- Настраиваем конфиг WebApi appsettings.ProdWin.json на работу с кластером – комментируем секцию Host (или устанавливаем значение null), добавляем IP узлов кластера (или доменные имена, если используются) в секцию Hosts (первым идет IP узла node01):

Типовые проблемы можно диагностировать, проверив статус кластера:
# sudo rabbitmqctl cluster_statusРешение проблемы «Network Partitions» (для rabbit@node02):

# sudo rabbitmqctl stop_app
# sudo rabbitmqctl reset
# sudo rabbitmqctl join_cluster rabbit@node02
# sudo rabbitmqctl start_app