Skip to Content

Развертывание кластера RabbitMQ на CentOS 8.5

Дополнительная информация по работе с кластерами (на английском языке): Clustering Guide и Queue Mirroring.

  1. На каждом узле кластера развертываем RabbitMQ в соответствии со статьей Установка RabbitMQ под CentOS 8.

  2. На каждом узле кластера открываем дополнительные порты, необходимые для работы кластера:

# firewall-cmd --zone=public --add-port=4369/tcp --permanent # firewall-cmd --reload
  1. Каждый узел кластера должен иметь уникальное имя хоста. Имя хоста можно задать командой (требуется перезагрузка):
# sudo vim /etc/hostname # sudo reboot

Например, для кластера из 2-х узлов с именами хостов node01 и node02 и IP 192.168.1.160 и 192.168.161:

alt

По умолчанию RabbitMQ будет идентифицировать узел как rabbit@hostname.

  1. На каждом узле одинаково настраиваем файл /etc/hosts:
# sudo vim /etc/hosts

alt

alt

  1. Настраиваем идентификацию кластера: открываем файл /var/lib/rabbitmq/.erlang.cookie на узле node01:
# vim /var/lib/rabbitmq/.erlang.cookie

и копируем его содержимое в этот же файл на узле node02. Кластер будет образован узлом node01.

  1. Останавливаем RabbitMQ на узле node02:
# sudo rabbitmqctl stop_app
  1. Включаем узел node02 в кластер, выполнив на нем команду:
# sudo rabbitmqctl join_cluster rabbit@node01
  1. Запускаем RabbitMQ на узле node02:
# sudo rabbitmqctl start_app
  1. Проверяем состояние кластера на обоих узлах node01 и node02:
# sudo rabbitmqctl cluster_status

alt

  1. Создаем пользователя RabbitMQ для кластера, назначаем ему права. На узле node01 выполняем команды:
# sudo rabbitmqctl add_user 'admin' 'Qwe123!@#' # sudo rabbitmqctl set_user_tags admin administrator # sudo rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
  1. Создаем политику с именем ha-all для репликации типа «реплицируются все очереди на всех узлах». На узле node01 выполняем команду:
# sudo rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
  1. Настраиваем конфиг WebApi appsettings.ProdWin.json на работу с кластером – комментируем секцию Host (или устанавливаем значение null), добавляем IP узлов кластера (или доменные имена, если используются) в секцию Hosts (первым идет IP узла node01):

alt

Типовые проблемы можно диагностировать, проверив статус кластера:

# sudo rabbitmqctl cluster_status

Решение проблемы «Network Partitions» (для rabbit@node02):

alt

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