ELMA365 On-Premises > Подготовка инфраструктуры > Базы данных > Отказоустойчивая инфраструктура / Кластер RabbitMQ

Кластер RabbitMQ

Для работы приложения ELMA365 необходимо установить RabbitMQ версии 3.9.15 или выше. В статье описана установка RabbitMQ 3.12.0 и Erlang 25.3.2.2-1 для ОС Ubuntu Linux 20.04 и 22.04. Вы можете ознакомиться с руководством в официальной документации RabbitMQ.

Установка состоит из шести этапов:

  1. Подготовка нод (серверов).
  2. Установка RabbitMQ.
  3. Подготовка кластера RabbitMQ.
  4. Настройка RabbitMQ.
  5. Конфигурация HAproxy (блок rabbitmq).
  6. Подключение к RabbitMQ.

Шаг 1: Подготовка нод (серверов)

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

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

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

  1. Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
  • rabbitmq-server1.your_domain;
  • rabbitmq-server2.your_domain;
  • rabbitmq-server3.your_domain.
  1. Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в /etc/hosts.

Шаг 2: Установка 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://ppa1.novemberain.com/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
curl -1sLf https://ppa1.novemberain.com/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null

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

sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $(lsb_release -cs) main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $(lsb_release -cs) main
 
deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main
deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main
EOF

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

sudo apt-get update -y

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

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

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

sudo apt-get install rabbitmq-server=3.12.0-1 -y --fix-missing

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

sudo systemctl enable --now rabbitmq-server

Шаг 3: Подготовка кластера RabbitMQ

  1. На каждой ноде rabbitmq создайте файл /etc/rabbitmq/rabbitmq-env.conf и добавьте переменные окружения RABBITMQ_NODENAME и RABBITMQ_USE_LONGNAME.

Пример заполнения для rabbitmq-server1.your_domain:

RABBITMQ_NODENAME=rabbit@rabbitmq-server1.your_domain
RABBITMQ_USE_LONGNAME=true

Пример заполнения для rabbitmq-server2.your_domain:

RABBITMQ_NODENAME=rabbit@rabbitmq-server2.your_domain
RABBITMQ_USE_LONGNAME=true

Пример заполнения для rabbitmq-server3.your_domain:

RABBITMQ_NODENAME=rabbit@rabbitmq-server3.your_domain
RABBITMQ_USE_LONGNAME=true

  1. Скопируйте Cookie /var/lib/rabbitmq/.erlang.cookie с первого узла rabbitmq-server1.your_domain на все остальные узлы в кластере.

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

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

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

  1. Перезапустите сервис RabbitMQ на каждой ноде:

sudo systemctl restart rabbitmq-server

  1. Остановите приложение на узлах rabbitmq-server2.your_domain и rabbitmq-server3.your_domain для последующего присоединения к кластеру:

sudo rabbitmqctl stop_app

  1. Сбросьте rabbitmq на узлах rabbitmq-server2.your_domain и rabbitmq-server3.your_domain:

sudo rabbitmqctl reset

  1. Присоедините узлы rabbitmq-server2.your_domain и rabbitmq-server3.your_domain к кластеру:

sudo rabbitmqctl join_cluster rabbit@rabbitmq-server1.your_domain

  1. Запустите приложение на узлах rabbitmq-server2.your_domain и rabbitmq-server3.your_domain:

sudo rabbitmqctl start_app

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

sudo rabbitmqctl cluster_status

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

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

Для пароля разрешается применять следующие символы:

  • Заглавные латинские буквы: от A до Z;
  • Строчные латинские буквы: от a до z;
  • Цифры от 0 до 9;
  • Символы:  -_.

Зарезервированные (недопустимые) символы:

! * ' ( ) ; : @ & = + $ , / ? % # [ ]

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

  1. На каждом узле включите необходимые плагины:

sudo rabbitmq-plugins enable \
rabbitmq_management

  1. Cоздайте vhost и дайте пользователю доступ к нему, выполнив команды на первом узле rabbitmq-server1.your_domain:

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. Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере, выполнив команду на первом узле rabbitmq-server1.your_domain:

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

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

sudo rabbitmqctl list_policies --vhost elma365vhost

Настройка включения TLS/SSL в RabbitMQ

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

Балансировку нагрузки между нодами кластера RabbitMQ осуществим с помощью HAProxy, произведем настройку по статье «Конфигурация HAProxy для RabbitMQ».

Шаг 6: Подключение к RabbitMQ

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

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

Строка для подключения к кластеру RabbitMQ c TLS/SSL (через HAProxy c TLS/SSL):

amqps://elma365user:SecretPassword@haproxy-server.your_domain:5671/elma365vhost