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