Гид по технологиям

Установка RabbitMQ кластера на Ubuntu 18.04

• 7 min read • DevOps • Обновлено 21 Nov 2025
Установка RabbitMQ кластера на Ubuntu 18.04
Установка RabbitMQ кластера на Ubuntu 18.04

В этой статье показано, как развернуть трехузловой RabbitMQ кластер на Ubuntu 18.04: настроить hosts, установить сервер, включить веб-менеджмент, открыть порты UFW, синхронизировать .erlang.cookie, объединить узлы в кластер, создать администратора, настроить политики зеркалирования очередей и проверить работу через веб-интерфейс и командную строку.

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

Что такое RabbitMQ

RabbitMQ — это брокер сообщений с открытым исходным кодом. Он реализует протоколы очередей сообщений, включая AMQP. Кратко: брокер получает, хранит и доставляет сообщения между приложениями. Erlang — язык реализации RabbitMQ. Клиентские библиотеки доступны для Python, Java, Node.js, PHP и других.

Определение: брокер сообщений — сервис, который гарантирует доставку сообщений между распределёнными компонентами системы.

Цели и охват этого руководства

В руководстве используются три сервера Ubuntu 18.04 (примерные IP и имена):

  • 10.0.15.21 hakase-ubuntu01
  • 10.0.15.22 hakase-ubuntu02
  • 10.0.15.23 hakase-ubuntu03

Мы выполним шаги:

  1. Настроим /etc/hosts
  2. Установим RabbitMQ
  3. Включим Management плагин
  4. Настроим UFW
  5. Объединим узлы в кластер
  6. Создадим администратора
  7. Настроим зеркалирование очередей (HA политики)
  8. Проверим работу и выполним тесты

Важные предпосылки

  • root или sudo доступ на всех узлах
  • сетевое соединение между узлами (порты открыты)
  • одинаковые версии Erlang и RabbitMQ на всех узлах

Шаг 1 — Настройка /etc/hosts

Отредактируйте файл /etc/hosts на всех серверах и добавьте соответствия IP ↔ hostname. Это упрощает обращение по именам узлов при создании кластера.

Команда:

sudo vim /etc/hosts

Добавьте строки:

10.0.15.21 hakase-ubuntu01
10.0.15.22 hakase-ubuntu02
10.0.15.23 hakase-ubuntu03

Сохраните и выйдите.

Важно: имена узлов, которые использует RabbitMQ, должны совпадать с именами хостов в кластере (rabbit@hostname).

Шаг 2 — Установка RabbitMQ сервера

Обновите репозитории и установите пакет:

sudo apt update
sudo apt upgrade -y
sudo apt install rabbitmq-server -y

Запустите сервис и включите автозапуск:

sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-server

Если пакет из репозитория устарел для ваших целей, рассмотрите установку официальных пакетов RabbitMQ/Erlang с сайта проекта.

Установка RabbitMQ Server

Альтернатива: установка в Docker или Kubernetes. Для production обычно предпочитают управляемые кластеры или StatefulSet в k8s с PersistentVolumes.

Шаг 3 — Включение RabbitMQ Management плагина

Веб-интерфейс менеджмента полезен для мониторинга и управления. Он работает по умолчанию на TCP 15672.

Включите плагин:

sudo rabbitmq-plugins enable rabbitmq_management

Перезапустите сервис:

sudo systemctl restart rabbitmq-server

Плагин включён и доступен по адресу http://:15672 после создания пользователя.

Включение RabbitMQ Management

Замечание: в production откройте порт 15672 только для доверенных сетей и используйте TLS/HTTPS через обратный прокси.

Шаг 4 — Настройка UFW (фаервол на Ubuntu)

Разрешите SSH и включите UFW, затем откройте порты, используемые RabbitMQ:

  • 5672 — AMQP (основной порт для клиентов)
  • 15672 — Management HTTP API
  • 4369 — epmd (Erlang Port Mapper Daemon)
  • 25672 — межузловое соединение Erlang distribution

Команды:

sudo ufw allow ssh
sudo ufw enable
sudo ufw allow 5672,15672,4369,25672/tcp
sudo ufw status

Настройка UFW

Совет: в продакшене лучше открыть порты только для IP-адресов ваших узлов и администраторов.

Шаг 5 — Объединение узлов в кластер

Кластер RabbitMQ требует единого файла .erlang.cookie на всех узлах. Этот файл хранит ключ, используемый Erlang для аутентификации между узлами.

На основном узле (hakase-ubuntu01) выполните копирование файла на остальные узлы:

scp /var/lib/rabbitmq/.erlang.cookie root@hakase-ubuntu02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@hakase-ubuntu03:/var/lib/rabbitmq/

После копирования на целевых узлах убедитесь в корректных правах и владельце:

sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie

Затем на hakase-ubuntu02 и hakase-ubuntu03 перезапустите RabbitMQ и подготовьтесь к присоединению:

sudo systemctl restart rabbitmq-server
sudo rabbitmqctl stop_app

Присоедините узлы к кластеру на основе hakase-ubuntu01:

sudo rabbitmqctl join_cluster rabbit@hakase-ubuntu01
sudo rabbitmqctl start_app

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

sudo rabbitmqctl cluster_status

Ожидаемый результат — список членов кластера. Пример вывода смотрите в оригинальном руководстве.

Старт RabbitMQ

Проверки и подстраховки:

  • Убедитесь, что hostname на сервере совпадает с тем, что использует rabbit (rabbit@hostname).
  • Если join_cluster даёт ошибку, проверьте логи /var/log/rabbitmq/*.log и файл .erlang.cookie.

Шаг 6 — Создание нового администратора

Создадим пользователя hakase и назначим ему теги администратора. Удалим дефолтного guest.

sudo rabbitmqctl add_user hakase aqwe123@
sudo rabbitmqctl set_user_tags hakase administrator
sudo rabbitmqctl set_permissions -p / hakase ".*" ".*" ".*"
sudo rabbitmqctl delete_user guest
sudo rabbitmqctl list_users

Пользователь, созданный на одном узле, реплицируется на все узлы кластера.

Добавление администратора

Безопасность: задавайте сложные пароли и используйте внешнюю аутентификацию (LDAP, OAuth) в production.

Шаг 7 — Настройка зеркалирования очередей (HA политики)

По умолчанию очередь размещается на узле, где она создана. При необходимости устойчивости к отказам нужно настроить политики HA.

Примеры политик:

  • Политика ha-all — зеркалирует все очереди на все узлы:
sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
  • Политика ha-two — зеркалирует очереди с префиксом two. на двух узлах:
sudo rabbitmqctl set_policy ha-two "^two\." \
  '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'
  • Политика ha-nodes — зеркалирует очереди с префиксом nodes. на конкретных узлах:
sudo rabbitmqctl set_policy ha-nodes "^nodes\." \
  '{"ha-mode":"nodes","ha-params":["rabbit@hakase-ubuntu02","rabbit@hakase-ubuntu03"]}'

Просмотреть политики:

sudo rabbitmqctl list_policies

Удалить политику:

sudo rabbitmqctl clear_policy ha-two

Замечания по выбору:

  • Зеркалирование всех очередей (ha-mode: all) удобно, но увеличивает нагрузку и трафик.
  • Для больших нагрузок рассмотрите Quorum Queues (современная альтернатива mirrored queues) — они обеспечивают более предсказуемую отказоустойчивость и согласованность.

Настройка репликации

Шаг 8 — Тестирование и проверка

Откройте браузер и зайдите в менеджмент:

http://10.0.15.21:15672/

Войдите под hakase / aqwe123@.

Вход в RabbitMQ

Проверьте дашборд и состояние узлов:

Дашборд RabbitMQ

Проверьте список пользователей и политик:

Список пользователей

Политики

Дополнительные тесты из командной строки:

  • Список очередей и сообщений:
sudo rabbitmqctl list_queues name messages consumers
  • Создать тестовую очередь, опубликовать несколько сообщений (используйте rabbitmqadmin или клиентскую библиотеку) и проверить, что зеркала синхронизировались на других узлах.

Пример использования rabbitmqadmin (может потребоваться установка):

sudo apt install python3-pip -y
sudo pip3 install rabbitmqadmin
rabbitmqadmin -u hakase -p aqwe123@ -H 10.0.15.21 -P 15672 declare queue name=test-queue durable=true
rabbitmqadmin -u hakase -p aqwe123@ -H 10.0.15.21 -P 15672 publish exchange=amq.default routing_key=test-queue payload='hello'

Проверьте зеркалирование: в Management UI выберите очередь и посмотрите раздел Mirrors/Replicas.

Восстановление и инцидентный план

Сценарий: один из рабочих узлов упал.

  1. Убедитесь, что остальные узлы работают.
  2. На упавшем узле исправьте причину (устраните аппаратную проблему, диск, сеть).
  3. Перезапустите rabbitmq-server:
sudo systemctl start rabbitmq-server
  1. Если узел потерял состояние и требуется повторная синхронизация очередей, выполните stop_app/forget/join по потребности. Восстановление может потребовать очистки состояния на проблемном узле.

Пример восстановления с повторным присоединением:

sudo rabbitmqctl stop_app
sudo rabbitmqctl reset
sudo rabbitmqctl join_cluster rabbit@hakase-ubuntu01
sudo rabbitmqctl start_app

Внимание: reset удаляет локальные данные очередей на узле. Применяйте с осторожностью.

Рекомендации по безопасности

  • Уберите открытый доступ к порту 15672 из интернета. Разрешайте только нужные сети.
  • Используйте TLS для AMQP (5671) и HTTPS для менеджмента.
  • Подключите внешнюю систему аутентификации для пользователей (LDAP, OAuth).
  • Ограничьте права пользователя согласно принципу наименьших привилегий.

Альтернативные подходы и когда они лучше

  • Docker / Kubernetes: если у вас CI/CD и вы уже используете контейнеры, развёртывание RabbitMQ в k8s с StatefulSet упрощает масштабирование и восстановление. Контейнеры дают изоляцию, но требуют правильной настройки персистентного хранилища.
  • Cloud-managed RabbitMQ (например CloudAMQP или облачные сервисы): если вы не хотите поддерживать кластер самостоятельно — используйте управляемый сервис.
  • Quorum Queues: для новых проектов рассмотрите очередь типа quorum вместо classic mirrored queues — они лучше масштабируются и устойчивы к разбиению сети.

Когда зеркалирование может не помочь

  • Если сеть между узлами часто рвётся, зеркалирование классических очередей приведёт к конфликтам и длительной синхронизации.
  • Если узлы используют разные версии Erlang/RabbitMQ, присоединение может закончиться ошибкой.
  • Неправильные права на .erlang.cookie приведут к отказу в аутентификации между узлами.

Роль‑ориентированные чек‑листы

Системный администратор:

  • Обновил OS и установил rabbitmq-server
  • Проверил версии Erlang/RabbitMQ на всех узлах
  • Настроил /etc/hosts
  • Проверил права .erlang.cookie
  • Настроил UFW и открыл нужные порты
  • Настроил мониторинг и логи

Разработчик приложения:

  • Настроил клиентскую библиотеку для подключения по AMQP
  • Тестировал публикацию/подписку на тестовой очереди
  • Учитывает поведение при повторных доставках

Специалист по безопасности:

  • Закрыл публичный доступ к менеджменту
  • Внёс TLS и проверил сертификаты
  • Настроил сложные пароли и аудит

Критерии приёмки

  • Все три узла в статусе running в Management UI
  • Политики HA применены и отображаются в списке политик
  • При остановке узла сообщения в зеркалируемой очереди доступны на другом узле
  • Доступ в Management через hakase и корректный уровень прав

Небольшая методология развертывания (шаги для copy/paste)

  1. Настроить /etc/hosts на всех узлах.
  2. Установить RabbitMQ и включить менеджмент.
  3. Синхронизировать .erlang.cookie и выставить chown/chmod.
  4. Перезапустить службы и последовательно присоединить узлы к кластеру.
  5. Создать администратора и задать политики HA.
  6. Протестировать через rabbitmqadmin и Management UI.

Краткий глоссарий

  • AMQP — протокол очередей сообщений.
  • .erlang.cookie — файл для аутентификации Erlang между узлами.
  • HA policy — политика высокодоступной очереди (зеркалирование).
  • Quorum Queue — современный тип очереди с репликацией на базе Raft.

Частые проблемы и их решения

  • Ошибка join_cluster: проверьте .erlang.cookie, права и владельца.
  • Узлы не видят друг друга: проверьте UFW, сетевые ACL и порт 25672.
  • Длинная синхронизация: убедитесь, что у вас достаточная пропускная способность и не зеркалируйте всё, если нагрузка высока.

Заключение

Вы развернули трёхузловой RabbitMQ кластер на Ubuntu 18.04, включили веб‑менеджмент, настроили фаервол, синхронизировали .erlang.cookie, объединили узлы, создали администратора и установили HA‑политики. Для production‑окружения дополнительно настройте TLS, мониторинг и бэкапы.

Ссылки для дальнейшего чтения:

Схема кластера RabbitMQ

ALT: Схематичное изображение трёхузлового кластера RabbitMQ с зеркалированными очередями и веб‑интерфейсом.

Important: перед массовым переводом очередей в продакшене протестируйте политику в staging и убедитесь в производительности при реальной нагрузке.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро