Для работы приложения ELMA365 необходимо установить RabbitMQ версии 3.9.15 или выше. В статье описана установка RabbitMQ 3.12.0 и Erlang 25.3.2.2-1 для ОС Ubuntu Linux 20.04 и 22.04. Вы можете ознакомиться с руководством в официальной документации RabbitMQ.
Установка состоит из шести этапов:
- Подготовка нод (серверов).
- Установка RabbitMQ.
- Подготовка кластера RabbitMQ.
- Настройка RabbitMQ.
- Конфигурация HAproxy (блок rabbitmq).
- Подключение к RabbitMQ.
Шаг 1: Подготовка нод (серверов)
начало внимание
Минимальное количество серверов для организации кластера — три.
конец внимание
- Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
- rabbitmq-server1.your_domain;
- rabbitmq-server2.your_domain;
- rabbitmq-server3.your_domain.
- Создайте необходимые сопоставления имён хостов в DNS. Если такой возможности нет, внесите нужные записи в /etc/hosts.
Шаг 2: Установка RabbitMQ
- Установите необходимые пакеты:
sudo apt-get install curl gnupg apt-transport-https -y
- Импортируйте все необходимые ключи:
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
- Добавьте репозитории 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
- Обновите кэш пакетов:
sudo apt-get update -y
- Установите пакеты 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
- Установите rabbitmq-server и его зависимости:
sudo apt-get install rabbitmq-server=3.12.0-1 -y --fix-missing
- Запустите rabbitmq-server:
sudo systemctl enable --now rabbitmq-server
Шаг 3: Подготовка кластера RabbitMQ
- На каждой ноде 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
- Скопируйте Cookie /var/lib/rabbitmq/.erlang.cookie с первого узла rabbitmq-server1.your_domain на все остальные узлы в кластере.
Начало внимание
Для работы кластера RabbitMQ у всех узлов, участвующих в кластере, должно совпадать содержимое файла /var/lib/rabbitmq/.erlang.cookie.
Конец внимание
- Перезапустите сервис RabbitMQ на каждой ноде:
sudo systemctl restart rabbitmq-server
- Остановите приложение на узлах rabbitmq-server2.your_domain и rabbitmq-server3.your_domain для последующего присоединения к кластеру:
sudo rabbitmqctl stop_app
- Сбросьте rabbitmq на узлах rabbitmq-server2.your_domain и rabbitmq-server3.your_domain:
sudo rabbitmqctl reset
- Присоедините узлы rabbitmq-server2.your_domain и rabbitmq-server3.your_domain к кластеру:
sudo rabbitmqctl join_cluster rabbit@rabbitmq-server1.your_domain
- Запустите приложение на узлах rabbitmq-server2.your_domain и rabbitmq-server3.your_domain:
sudo rabbitmqctl start_app
- Проверьте статус кластера:
sudo rabbitmqctl cluster_status
Шаг 4: Настройка RabbitMQ
начало внимание
Для пароля разрешается применять следующие символы:
- Заглавные латинские буквы: от A до Z;
- Строчные латинские буквы: от a до z;
- Цифры от 0 до 9;
- Символы: -_.
Зарезервированные (недопустимые) символы:
! * ' ( ) ; : @ & = + $ , / ? % # [ ]
конец внимание
- На каждом узле включите необходимые плагины:
sudo rabbitmq-plugins enable \
rabbitmq_management
- 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
- Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере, выполнив команду на первом узле rabbitmq-server1.your_domain:
sudo rabbitmqctl set_policy -p 'elma365vhost' MirrorAllQueues ".*" '{"ha-mode":"all"}'
Чтобы посмотреть настроенные политики, используйте команду:
sudo rabbitmqctl list_policies --vhost elma365vhost
Настройка включения TLS/SSL в RabbitMQ
Для включения поддержки TLS/SSL в RabbitMQ необходимо в файл конфигурации /etc/rabbitmq/rabbitmq.conf:
listeners.tcp = none
sudo systemctl restart rabbitmq-server Подробнее о настройке TLS/SSL в RabbitMQ читайте в официальной документации RabbitMQ.
cat server_certificate.pem server_key.pem > combined_keys.pem
erl -noinput -eval 'io:format("ERL_SSL_PATH=~s~n", [filename:dirname(code:which(inet_tls_dist))])' -s init stop > /tmp/ssl-path.txt
SERVER_ADDITIONAL_ERL_ARGS="-pa $ERL_SSL_PATH \
sudo systemctl restart rabbitmq-server Подробнее о настройке TLS/SSL между нодами RabbitMQ читайте в официальной документации 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