ELMA365 On-premises > ELMA365 Enterprise > Высокодоступный кластер ELMA365 / Установка RabbitMQ

Установка RabbitMQ

Несколько серверов соединяются в кластер и распределяют между собой работу по обработке и доставке сообщений. Более подробно смотрите в официальной документации https://www.rabbitmq.com/clustering.html.

Инструкция по установке и настройке RabbitMQ на официальном сайте: https://www.rabbitmq.com/install-debian.html.

Требования к версии RabbitMQ Erlang: https://www.rabbitmq.com/which-erlang.html#compatibility-matrix.

Исходные данные

начало внимание

Минимальное количество серверов для организации кластера 3.

конец внимание

В этом примере используется 3 узла со следующими hostname и IP-адресами:

  • rabbitmq-server1, 192.168.1.31
  • rabbitmq-server2, 192.168.1.32
  • rabbitmq-server3, 192.168.1.33

Шаг 1: Установка RabbitMQ

  1. Установите необходимые пакеты:

sudo apt-get install curl gnupg apt-transport-https -y

  1. Импортируйте все необходимые ключи:

curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
curl -1sLf "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xf77f1eda57ebb1cc" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg > /dev/null
curl -1sLf "https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/io.packagecloud.rabbitmq.gpg > /dev/null

  1. Добавьте репозитории RabbitMQ:

sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
deb-src [signed-by=/usr/share/keyrings/net.launchpad.ppa.rabbitmq.erlang.gpg] http://ppa.launchpad.net/rabbitmq/rabbitmq-erlang/ubuntu bionic main
 
deb [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
deb-src [signed-by=/usr/share/keyrings/io.packagecloud.rabbitmq.gpg] https://packagecloud.io/rabbitmq/rabbitmq-server/ubuntu/ bionic main
EOF

  1. Обновите кэш пакетов:

sudo apt-get update -y

  1. Установите пакеты Erlang:

sudo apt-get install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl

  1. Установите rabbitmq-server и его зависимости:

sudo apt-get install rabbitmq-server -y --fix-missing

  1. Запустите rabbitmq-server:

sudo systemctl enable --now rabbitmq-server

Шаг 2: Присоедините к кластеру RabbitMQ

начало внимание

Для работы кластера RabbitMQ у всех узлов, участвующих в кластере, должно совпадать содержимое файла /var/lib/rabbitmq/.erlang.cookie.

конец внимание

  1. Скопируйте Cookie с первого узла на все остальные узлы в кластере.
  1. Переконфигурируйте RabbitMQ на каждом узле и присоедините их к кластеру. Сперва перезапустите сервис RabbitMQ:

sudo systemctl restart rabbitmq-server

  1. Остановите приложение на каждом узле который хотите присоединить к кластеру:

sudo rabbitmqctl stop_app

  1. Сбросьте rabbitmq:

sudo rabbitmqctl reset

  1. Присоедините узел к кластеру:

sudo rabbitmqctl join_cluster rabbit@rabbitmq-server1.your_domain

  1. Запустите процесс подачи приложения:

sudo rabbitmqctl start_app

  1. Проверьте статус кластера:

sudo rabbitmqctl cluster_status

Шаг 3: Настройка RabbitMQ

  1. Для управления на каждом узле включаем плагин:

sudo rabbitmq-plugins enable rabbitmq_management

  1. Обязательно нужно добавить vhost и дать пользователю доступ к нему, например:

sudo rabbitmqctl add_vhost elma365vhost
sudo rabbitmqctl add_user elma365user SecretPassword
sudo rabbitmqctl set_permissions -p elma365vhost elma365user ".*" ".*" ".*"
sudo rabbitmqctl set_user_tags elma365user administrator

  1. Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере:

sudo rabbitmqctl set_policy -p 'elma365vhost' MirrorAllQueues ".*" '{"ha-mode":"all"}'

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

sudo rabbitmqctl list_policies --vhost elma365vhost

Шаг 4: Конфигурация HAproxy (блок rabbitmq)

Пример конфигурации для настройки балансировки нагрузки с помощью HAproxy:

listen rabbitmq
    bind haproxy-server.your_domain:5672
    mode tcp
    balance roundrobin
    server rabbitmq-server1 rabbitmq-server1.your_domain:5672  check inter 2s rise 2 fall 3
    server rabbitmq-server2 rabbitmq-server2.your_domain:5672  check inter 2s rise 2 fall 3
    server rabbitmq-server3 rabbitmq-server3.your_domain:5672  check inter 2s rise 2 fall 3
    
listen rabbitmq_management
    bind haproxy.your_domain:15672
    balance source
    server rabbitmq-server1 rabbitmq-server1.your_domain:15672 check check inter 2s
    server rabbitmq-server2 rabbitmq-server2.your_domain:15672 check check inter 2s
    server rabbitmq-server3 rabbitmq-server3.your_domain:15672 check check inter 2s

Шаг 5. Подключение к ELMA365

Строка для подключения к кластеру RabbitMQ:

amqp://elma365user:SecretPassword@haproxy-server.your_domain:5672/elma365vhost

Нашли опечатку? Выделите текст, нажмите ctrl + enter и оповестите нас