Кластер RabbitMQ
Для работы приложения необходимо установить RabbitMQ версии 3.12.
В статье описана установка RabbitMQ и 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
-
Установите необходимые пакеты:
-
Импортируйте все необходимые ключи:
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 -
Обновите кеш пакетов:
-
Установите пакеты 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 и его зависимости:
-
Запустите rabbitmq-server:
Шаг 3. Подготовка кластера RabbitMQ
-
На каждой ноде rabbitmq создайте файл
/etc/rabbitmq/rabbitmq-env.confи добавьте переменные окруженияRABBITMQ_NODENAMEиRABBITMQ_USE_LONGNAMEПример заполнения для
rabbitmq-server1.your_domain:Пример заполнения для
rabbitmq-server2.your_domain:Пример заполнения для
rabbitmq-server3.your_domain: -
Скопируйте Cookie
/var/lib/rabbitmq/.erlang.cookieс первого узлаrabbitmq-server1.your_domainна все остальные узлы в кластере.Для работы кластера RabbitMQ у всех узлов, участвующих в кластере, должно совпадать содержимое файла
/var/lib/rabbitmq/.erlang.cookie. -
Перезапустите сервис RabbitMQ на каждой ноде:
-
Остановите приложение на узлах
rabbitmq-server2.your_domainиrabbitmq-server3.your_domainдля последующего присоединения к кластеру: -
Сбросьте rabbitmq на узлах
rabbitmq-server2.your_domainиrabbitmq-server3.your_domain: -
Присоедините узлы
rabbitmq-server2.your_domainиrabbitmq-server3.your_domainк кластеру: -
Запустите приложение на узлах
rabbitmq-server2.your_domainиrabbitmq-server3.your_domain: -
Проверьте статус кластера:
Шаг 4. Настройка RabbitMQ
Для пароля разрешается применять следующие символы:
- заглавные латинские буквы: от A до Z
- строчные латинские буквы: от a до z
- цифры от 0 до 9
- символы: -_.
Зарезервированные (недопустимые) символы: ! * ' ( ) ; : @ & = + $ , / ? % # [ ]
-
На каждом узле включите необходимые плагины:
-
Cоздайте vhost и дайте пользователю доступ к нему, выполнив команды на первом узле
rabbitmq-server1.your_domain: -
Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере, выполнив команду на первом узле
rabbitmq-server1.your_domain:
Если отсутствует поддержка политики High Availability Mode, используйте политику Quorum:
rabbitmqctl set_policy –p 'teamstormvhost' QuorumDefault “^.*” ‘{“queue-type”:“quorum”}’ --priority 0 --apply-to queues
Чтобы посмотреть настроенные политики, используйте команду:
Шаг 5. Конфигурация HAProxy (блок RabbitMQ)
Балансировку нагрузки между нодами кластера RabbitMQ осуществим с помощью HAProxy.
Шаг 6. Подключение к RabbitMQ
Строка для подключения к кластеру RabbitMQ (через HAProxy):
Строка для подключения к кластеру RabbitMQ c TLS/SSL (через HAProxy c TLS/SSL):