Установка 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
Мы выполним шаги:
- Настроим /etc/hosts
- Установим RabbitMQ
- Включим Management плагин
- Настроим UFW
- Объединим узлы в кластер
- Создадим администратора
- Настроим зеркалирование очередей (HA политики)
- Проверим работу и выполним тесты
Важные предпосылки
- 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 с сайта проекта.

Альтернатива: установка в Docker или Kubernetes. Для production обычно предпочитают управляемые кластеры или StatefulSet в k8s с PersistentVolumes.
Шаг 3 — Включение RabbitMQ Management плагина
Веб-интерфейс менеджмента полезен для мониторинга и управления. Он работает по умолчанию на TCP 15672.
Включите плагин:
sudo rabbitmq-plugins enable rabbitmq_managementПерезапустите сервис:
sudo systemctl restart rabbitmq-serverПлагин включён и доступен по адресу http://

Замечание: в 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
Совет: в продакшене лучше открыть порты только для 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Ожидаемый результат — список членов кластера. Пример вывода смотрите в оригинальном руководстве.

Проверки и подстраховки:
- Убедитесь, что 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 — Тестирование и проверка
Откройте браузер и зайдите в менеджмент:
Войдите под hakase / aqwe123@.

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

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


Дополнительные тесты из командной строки:
- Список очередей и сообщений:
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.
Восстановление и инцидентный план
Сценарий: один из рабочих узлов упал.
- Убедитесь, что остальные узлы работают.
- На упавшем узле исправьте причину (устраните аппаратную проблему, диск, сеть).
- Перезапустите rabbitmq-server:
sudo systemctl start rabbitmq-server- Если узел потерял состояние и требуется повторная синхронизация очередей, выполните 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)
- Настроить /etc/hosts на всех узлах.
- Установить RabbitMQ и включить менеджмент.
- Синхронизировать .erlang.cookie и выставить chown/chmod.
- Перезапустить службы и последовательно присоединить узлы к кластеру.
- Создать администратора и задать политики HA.
- Протестировать через 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, мониторинг и бэкапы.
Ссылки для дальнейшего чтения:

ALT: Схематичное изображение трёхузлового кластера RabbitMQ с зеркалированными очередями и веб‑интерфейсом.
Important: перед массовым переводом очередей в продакшене протестируйте политику в staging и убедитесь в производительности при реальной нагрузке.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента