Настройка RabbitMQ кластера на CentOS 7 — пошаговое руководство

Кратко: покажу пошагово, как установить RabbitMQ на три сервера CentOS 7, включить веб‑управление, настроить межузловой обмен и политику HA для зеркалирования очередей. Включены команды, проверки, рекомендации по безопасности и сценарии отладки.
Важно: все команды выполняйте от имени пользователя с root‑правами или через sudo.
О чем эта статья
Цель: собрать отказоустойчивый RabbitMQ кластер из трёх узлов (node01, node02, node03) на CentOS 7, включить плагин управления, открыть необходимые порты и настроить политику зеркалирования очередей (HA). Подойдёт для тестовой и первой боевой среды.
Кому полезно: DevOps, админы Linux, инженеры по интеграции.
Основные варианты применения: очереди задач, обмен сообщениями между микросервисами, брокер событий.
Основные термины
- RabbitMQ: брокер сообщений, реализующий AMQP.
- Узел/нода: отдельный экземпляр RabbitMQ на сервере.
- HA policy: политика зеркалирования очередей между узлами кластера.
- .erlang.cookie: файл, используемый Erlang для аутентификации узлов между собой.
Первоначальные требования
- Минимум 3 сервера с CentOS 7 (в примере IP):
- 10.0.15.21 node01
- 10.0.15.22 node02
- 10.0.15.23 node03
- root‑доступ или sudo на всех узлах
- Доступ по SSH между узлами (для scp/ssh)
Важно: в боевой среде используйте VPN или защищённые сети для соединения узлов и не передавайте пароль в явном виде в общедоступных настройках.
Содержание (быстрый план)
- Настроить /etc/hosts
- Установить RabbitMQ (и зависимости из EPEL)
- Включить Management GUI
- Открыть порты в firewalld
- Скопировать .erlang.cookie и объединить узлы в кластер
- Создать администратора и удалить guest
- Настроить политики зеркалирования (HA)
- Проверить работу через веб‑интерфейс
Шаг 1 — Настройка файла hosts
На всех трёх серверах добавьте соответствующие записи в /etc/hosts. Это позволяет обращаться по именам node01/node02/node03 при выполнении команд и при формировании имён узлов RabbitMQ.
Откройте файл:
sudo vim /etc/hostsДобавьте строки:
10.0.15.21 node01
10.0.15.22 node02
10.0.15.23 node03Сохраните и закройте файл.
Проверка:
ping -c 1 node02Если ответов нет, проверьте правильность сетевых настроек и доступа по ICMP/SSH.
Шаг 2 — Установка RabbitMQ Server
RabbitMQ написан на Erlang, поэтому устанавливается через пакет rabbitmq-server из репозитория EPEL.
Добавьте EPEL и установите RabbitMQ на всех узлах:
sudo yum -y install epel-release
sudo yum -y install rabbitmq-serverЗапустите сервис и включите автозапуск:
sudo systemctl start rabbitmq-server
sudo systemctl enable rabbitmq-serverПроверка статуса:
sudo systemctl status rabbitmq-serverЕсли служба не запускается, просмотрите журналы:
sudo journalctl -u rabbitmq-server -b --no-pagerПримечание: в некоторых окружениях требуется установка специфичной версии Erlang — используйте официальную документацию RabbitMQ при появлении ошибок совместимости.
Шаг 3 — Включение плагина Management
Плагин rabbitmq_management даёт веб‑интерфейс на порту 15672 для мониторинга и управления.
Включите плагин и перезапустите сервис:
sudo rabbitmq-plugins enable rabbitmq_management
sudo systemctl restart rabbitmq-serverПроверка: в браузере откройте http://10.0.15.21:15672/ (порт 15672 должен быть открыт).

Важно: если веб‑интерфейс недоступен, проверьте firewalld и SELinux (см. раздел «Безопасность и отладка»).
Шаг 4 — Конфигурация firewalld на CentOS
Откройте порты, используемые RabbitMQ:
- 5672/tcp — основной порт AMQP
- 15672/tcp — веб‑интерфейс Management
- 4369/tcp — epmd (Erlang Port Mapper Daemon)
- 25672/tcp — межузловая связь RabbitMQ (Erlang distribution)
Выполните на всех узлах:
sudo firewall-cmd --add-port=15672/tcp --permanent
sudo firewall-cmd --add-port=5672/tcp --permanent
sudo firewall-cmd --add-port={4369/tcp,25672/tcp} --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
Примечание: если вы используете iptables или внешние ACL, откройте те же порты там.
Шаг 5 — Создание кластера RabbitMQ
Кластеризация RabbitMQ требует, чтобы файл /var/lib/rabbitmq/.erlang.cookie был одинаковым на всех узлах и имел корректные права.
На node01 скопируйте cookie на другие узлы:
scp /var/lib/rabbitmq/.erlang.cookie root@node02:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@node03:/var/lib/rabbitmq/Убедитесь, что права 400 (только владелец):
sudo chmod 400 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookieЗатем на node02 и node03 выполните (все команды запускаются на node02 и node03):
sudo systemctl restart rabbitmq-server
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster rabbit@node01
sudo rabbitmqctl start_app
sudo rabbitmqctl cluster_statusОжидаемый вывод: в списке членов кластера должны быть rabbit@node01, rabbit@node02, rabbit@node03.

Отладка:
- Ошибка «unable to connect»: проверьте доступ по сети и соответствие .erlang.cookie.
- Если имя узла отличается, проверьте output команды
sudo rabbitmqctl -q statusи /etc/hosts.
Шаг 6 — Создание администратора и безопасность учётных записей
Создадим пользователя hakase и сделаем его администратором. В примере пароль — aqwe123@ (в продакшне используйте безопасную генерацию паролей и хранилище секретов).
На node01 выполните:
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
Замечание: удаление гостевого пользователя рекомендуется для безопасности, поскольку он по умолчанию имеет доступ только с localhost.
Шаг 7 — Настройка зеркалирования очередей (HA policy)
Чтобы очереди были доступны при падении узла, создайте политики HA.
Примеры политик:
- Все очереди зеркалируются на все узлы:
sudo rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'- Очереди, начинающиеся с two., зеркалируются на ровно 2 узла и синхронизируются автоматически:
sudo rabbitmqctl set_policy ha-two "^two\." \
'{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'- Очереди nodes.* будут находиться только на node02 и node03:
sudo rabbitmqctl set_policy ha-nodes "^nodes\." \
'{"ha-mode":"nodes","ha-params":["rabbit@node02","rabbit@node03"]}'Проверить политики:
sudo rabbitmqctl list_policiesЧтобы удалить политику:
sudo rabbitmqctl clear_policy ha-two
Пояснение: режимы ha-mode: all, exactly, nodes. Выбор зависит от нагрузки, количества сообщений и требований к производительности: зеркалирование на все узлы увеличивает доступность, но снижает пропускную способность.
Шаг 8 — Тестирование через веб‑интерфейс
Откройте в браузере:
Вводите логин/пароль: hakase / aqwe123@

Дашборд и статус узлов:

Проверьте вкладки Admin → Users и Admin → Policies, чтобы убедиться, что пользователь и политики созданы.

Безопасность, отладка и эксплуатация
Важно:
- Меняйте пароли и используйте TLS для AMQP и веб‑интерфейса в продакшне.
- Ограничьте доступ к порту 15672 только для доверенных IP/подсетей.
- Рассмотрите настройку мониторинга (Prometheus, Grafana) и алертов по SLI/SLO.
Отладка:
- Просмотрите логи: /var/log/rabbitmq/*.
- Проверяйте соответствие .erlang.cookie и владельца файлов.
- Для проблем при репликации проверьте ha-sync-mode и состояние синхронизации у зеркал.
Критерии приёмки
- Все три узла отображаются в
rabbitmqctl cluster_status. - Веб‑интерфейс доступен и показывает всех узлов.
- Политики HA применяются к тестовой очереди и mirror‑копии появляются на нужных узлах.
- Пользователь‑админ создан, guest удалён.
Рекомендации по эксплуатации и масштабированию
- Для производственной нагрузки используйте минимум три узла и распределяйте нагрузку по VM/физическим хостам.
- Проводите тесты отказа (simulate node stop) и проверяйте промоут зеркала в мастера.
- Если требуется высокая производительность — минимизируйте зеркалирование (точечное зеркалирование критичных очередей), чтобы не снижать пропускную способность.
Модель принятия решения (простая)
- Нужна высокая доступность и низкая задержка: зеркалируйте только критичные очереди на ограниченное число узлов.
- Нужна максимальная доступность данных: используйте ha-mode = all (цена — производительность).
Чеклист для ролей
Администратор:
- Настроить /etc/hosts на всех узлах
- Установить EPEL и rabbitmq-server
- Открыть порты в firewalld
- Скопировать .erlang.cookie и проверить права
- Объединить узлы в кластер
Разработчик/интегратор:
- Проверить, что клиенты подключаются к 5672 и могут публиковать/подписываться
- Протестировать поведение при недоступности узла
Оператор/DevOps:
- Настроить мониторинг и бэкап конфигураций
- Подготовить план отката и инструкции по восстановлению узла
Частые ошибки и их причины
- Не совпадает .erlang.cookie → узлы не видят друг друга.
- Неверные права на /var/lib/rabbitmq/.erlang.cookie → Erlang откажется использовать файл.
- Firewalld/iptables блокируют порты → межузловая связь не устанавливается.
- Неверные имена узлов (hostname) — убедитесь, что имена в кластере соответствуют формату rabbit@node01.
Короткий план восстановления при падении узла
- Остановить RabbitMQ на проблемном узле: sudo systemctl stop rabbitmq-server.
- Проверить логи и исправить причину.
- Если требуется пересоздать узел: удалить из кластера, очистить данные (с осторожностью), восстановить .erlang.cookie и заново присоединить узел.
Итог
Мы установили RabbitMQ на три узла CentOS 7, включили management, открыли необходимые порты, объединили узлы в кластер, создали администратора и настроили политики HA для зеркалирования очередей. После выполнения шагов у вас должен быть работоспособный кластер, готовый к тестам нагрузки и эксплуатации.
Ресурсы и ссылки
- Официальная документация RabbitMQ: https://www.rabbitmq.com/documentation.html
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента