Для работы приложения необходимо установить RabbitMQ версии 3.12.
В статье описана установка RabbitMQ и Erlang 25.3.2.2-1 для ОС Ubuntu Linux 20.04 и 22.04. Вы можете ознакомиться с руководством в официальной документации RabbitMQ.
Установка состоит из шести этапов:
- Подготовка нод (серверов)
- Установка RabbitMQ
- Подготовка кластера RabbitMQ
- Настройка RabbitMQ
- Конфигурация HAproxy (блок rabbitmq).
- Подключение к RabbitMQ
Минимальное количество серверов для организации кластера — три.
-
Создайте три ноды (сервера) с последовательно пронумерованными именами хостов:
- rabbitmq-server1.your_domain
- rabbitmq-server2.your_domain
- rabbitmq-server3.your_domain
-
Создайте необходимые сопоставления имен хостов в DNS. Если такой возможности нет, внесите нужные записи в
/etc/hosts.
-
Установите необходимые пакеты:
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/nullcurl -1sLf https://ppa1.novemberain.com/gpg.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/nullcurl -1sLf https://ppa1.novemberain.com/gpg.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/nullАктуальные ключи для разных версий RabbitMQ перечислены в официальной документации RabbitMQ.
-
Добавьте репозитории RabbitMQ:
sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOFdeb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $(lsb_release -cs) maindeb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu $(lsb_release -cs) maindeb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) maindeb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) mainEOF -
Обновите кеш пакетов:
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
-
На каждой ноде rabbitmq создайте файл
/etc/rabbitmq/rabbitmq-env.confи добавьте переменные окруженияRABBITMQ_NODENAMEиRABBITMQ_USE_LONGNAMEПример заполнения для
rabbitmq-server1.your_domain:RABBITMQ_NODENAME=rabbit@rabbitmq-server1.your_domainRABBITMQ_USE_LONGNAME=trueПример заполнения для
rabbitmq-server2.your_domain:RABBITMQ_NODENAME=rabbit@rabbitmq-server2.your_domainRABBITMQ_USE_LONGNAME=trueПример заполнения для
rabbitmq-server3.your_domain:RABBITMQ_NODENAME=rabbit@rabbitmq-server3.your_domainRABBITMQ_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
Для пароля разрешается применять следующие символы:
- заглавные латинские буквы: от A до Z
- строчные латинские буквы: от a до z
- цифры от 0 до 9
- символы: -_.
Зарезервированные (недопустимые) символы: ! * ' ( ) ; : @ & = + $ , / ? % # [ ]
-
На каждом узле включите необходимые плагины:
sudo rabbitmq-plugins enable \rabbitmq_management -
Создайте vhost и дайте пользователю доступ к нему, выполнив команды на первом узле
rabbitmq-server1.your_domain:sudo rabbitmqctl add_vhost vkvhostsudo rabbitmqctl add_user vkuser SecretPasswordsudo rabbitmqctl set_permissions -p vkvhost vkuser ".*" ".*" ".*"sudo rabbitmqctl set_user_tags vkuser administrator -
Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере, выполнив команду на первом узле
rabbitmq-server1.your_domain:sudo rabbitmqctl set_policy -p 'vkhost' MirrorAllQueues ".*" '{"ha-mode":"all"}'
Если отсутствует поддержка политики High Availability Mode, используйте политику Quorum:
rabbitmqctl set_policy –p 'vkvhost' QuorumDefault “^.*” ‘{“queue-type”:“quorum”}’ --priority 0 --apply-to queues
Чтобы посмотреть настроенные политики, используйте команду:
sudo rabbitmqctl list_policies --vhost vkvhost
Балансировку нагрузки между нодами кластера RabbitMQ осуществим с помощью HAProxy.
Строка для подключения к кластеру RabbitMQ (через HAProxy):
amqp://vkuser:SecretPassword@haproxy-server.your_domain:5672/vkvhost
Строка для подключения к кластеру RabbitMQ c TLS/SSL (через HAProxy c TLS/SSL):
amqps://vkuser:SecretPassword@haproxy-server.your_domain:5671/vkvhost
Технический писатель: Белова Ирина