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

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

• 6 min read • DevOps • Обновлено 21 Nov 2025
RabbitMQ кластер на CentOS 7 — пошагово
RabbitMQ кластер на CentOS 7 — пошагово

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

Кратко: покажу пошагово, как установить 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 или защищённые сети для соединения узлов и не передавайте пароль в явном виде в общедоступных настройках.


Содержание (быстрый план)

  1. Настроить /etc/hosts
  2. Установить RabbitMQ (и зависимости из EPEL)
  3. Включить Management GUI
  4. Открыть порты в firewalld
  5. Скопировать .erlang.cookie и объединить узлы в кластер
  6. Создать администратора и удалить guest
  7. Настроить политики зеркалирования (HA)
  8. Проверить работу через веб‑интерфейс

Шаг 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 должен быть открыт).

Включение RabbitMQ Management — интерфейс плагина

Важно: если веб‑интерфейс недоступен, проверьте 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

Настройка firewalld — открытые порты для RabbitMQ

Примечание: если вы используете 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.

Состояние кластера на node02 Состояние кластера на 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

Создание администратора hakase

Замечание: удаление гостевого пользователя рекомендуется для безопасности, поскольку он по умолчанию имеет доступ только с 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 в Management

Пояснение: режимы ha-mode: all, exactly, nodes. Выбор зависит от нагрузки, количества сообщений и требований к производительности: зеркалирование на все узлы увеличивает доступность, но снижает пропускную способность.

Шаг 8 — Тестирование через веб‑интерфейс

Откройте в браузере:

http://10.0.15.21:15672/

Вводите логин/пароль: hakase / aqwe123@

Вход в RabbitMQ

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

Дашборд RabbitMQ

Проверьте вкладки 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.

Короткий план восстановления при падении узла

  1. Остановить RabbitMQ на проблемном узле: sudo systemctl stop rabbitmq-server.
  2. Проверить логи и исправить причину.
  3. Если требуется пересоздать узел: удалить из кластера, очистить данные (с осторожностью), восстановить .erlang.cookie и заново присоединить узел.

Итог

Мы установили RabbitMQ на три узла CentOS 7, включили management, открыли необходимые порты, объединили узлы в кластер, создали администратора и настроили политики HA для зеркалирования очередей. После выполнения шагов у вас должен быть работоспособный кластер, готовый к тестам нагрузки и эксплуатации.

Ресурсы и ссылки

Поделиться: 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 быстро