Настройка кластера RabbitMQ#

Шаг 1: Настройте имена хостов и DNS#

Первым шагом в установке кластера RabbitMQ является настройка правильных имён хостов и DNS.

MQ Server 1:

[any@mq2]$ sudo hostnamectl set-hostname mq1.example.com --static

MQ Server 2:

[any@mq1]$ sudo hostnamectl set-hostname mq2.example.com --static

Если у вас нет DNS-сервера, вы можете добавить записи в файл /etc/hosts:

[root@mq1]# echo "192.168.121.11 mq1.example.com mq1" >> /etc/hosts
[root@mq1]# echo "192.168.121.8  mq2.example.com mq2" >> /etc/hosts

Шаг 2: Установите сервер RabbitMQ на узлах#

Войдите на свои серверы и установите сервер RabbitMQ на всех узлах.

Статус ваших серверов RabbitMQ должен быть запущен:

[root@mq1]# systemctl status rabbitmq-server.service  

* rabbitmq-server.service - RabbitMQ broker
  Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
  Active: active (running) since Mon 2018-12-10 10:33:30 PST; 1min 28s ago
Main PID: 9634 (beam.smp)
  Status: "Initialized"
   Tasks: 87 (limit: 505)
  CGroup: /system.slice/rabbitmq-server.service
          |-9634 /usr/lib/erlang/erts-10.1/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1048576 -t 500
          |-9733 /usr/lib/erlang/erts-10.1/bin/epmd -daemon
          |-9883 erl_child_setup 32768
          |-9906 inet_gethost 4
          `-9907 inet_gethost 4

Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##  ##
Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##  ##      RabbitMQ 3.7.9. Copyright (C) 2007-2018 Pivotal Software, Inc.
Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##########  Licensed under the MPL.  See http://www.rabbitmq.com/
Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ######  ##
Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:   ##########  Logs: /var/log/rabbitmq/rabbit@mq1.log
Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:                     /var/log/rabbitmq/rabbit@mq1_upgrade.log
Dec 10 10:33:28 mq1.example.com rabbitmq-server[9634]:               Starting broker...
Dec 10 10:33:30 mq1.example.com rabbitmq-server[9634]: systemd unit for activation check: "rabbitmq-server.service"
Dec 10 10:33:30 mq1.example.com systemd[1]: Started RabbitMQ broker.
Dec 10 10:33:30 mq1.example.com rabbitmq-server[9634]:  completed with 0 plugins.

Шаг 4: Сброс RabbitMQ на Node2#

Переконфигурируйте RabbitMQ на узле 2 и присоедините его к кластеру.

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

    [root@mq2]# systemctl restart rabbitmq-server
    
  2. Остановите приложение:

    [root@mq2]# rabbitmqctl stop_app
    
    Stopping rabbit application on node rabbit@mq2 ...
    
  3. Сбросьте RabbitMQ:

    [root@mq2]# rabbitmqctl reset
    
    Resetting node rabbit@mq2 ...
    
  4. Присоедините узел к кластеру:

    [root@mq2]# rabbitmqctl join_cluster rabbit@mq1
    
    Clustering node rabbit@mq2 with rabbit@mq1
    
  5. Запустите процесс подачи приложения:

    [root@mq2]# rabbitmqctl start_app
    
    Starting node rabbit@mq2 ...
    completed with 0 plugins.
    
  6. Проверьте статус кластера:

    [root@mq1]# rabbitmqctl cluster_status
    
    warning: the VM is running with native name encoding of latin1 which may
    cause Elixir to malfunction as it expects utf8. Please ensure your locale
    is set to UTF-8 (which can be verified by running "locale" in your shell)
    Cluster status of node rabbit@mq1 ...
    
    [{nodes,[{disc,[rabbit@mq1,rabbit@mq2]}]},
    {running_nodes,[rabbit@mq2,rabbit@mq1]},
    {cluster_name,<<"rabbit@mq2.example.com">>},
    {partitions,[]},
    {alarms,[{rabbit@mq2,[]},{rabbit@mq1,[]}]}]
    

Шаг 5. Настройка политики RabbitMQ HA#

Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере.

[root@mq1]# rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

Setting policy "ha-all" for pattern ".\*" to "{"ha-mode":"all"}" 
with priority "0" for vhost "/" ...

Вы можете перечислить настроенные политики, используя:

[root@mq1]# rabbitmqctl list_policies

Listing policies for vhost "/" ...
vhost name pattern apply-to definition priority
/ ha-all .\* all {"ha-mode":"all"} 0

Чтобы удалить политику, используйте:

[root@mq1]# rabbitmqctl clear_policy <policyname>

Шаг 6: Тестирование#

Наконец, проверьте настройку кластера RabbitMQ.

Включите веб-панель управления RabbitMQ Management для удобного управления:

[root@mq1]# rabbitmq-plugins enable rabbitmq_management

Для отображения статистики нод, необходимо включить плагин на всех нодах кластера.

Если у вас есть активный брандмауэр, разрешите порты TCP 5672 и 15672.

Чтобы открыть его, откройте URL-адрес http://[IP-адрес сервера | Имя хоста]:15672.

По умолчанию пользователь guest существует и может подключаться только с локального хоста. Вы можете войти с этим пользователем локально с паролем guest.

Чтобы иметь возможность войти в сеть, создайте пользователя-администратора, как показано ниже:

[root@mq1]# rabbitmqctl add_user admin StrongPassword
[root@mq1]# rabbitmqctl set_user_tags admin administrator

Используйте созданного пользователя для входа в интерфейс управления RabbitMQ. Вы должны получить статус всех узлов кластера.

Если вы войдёте в RabbitMQ node2 и проверите для созданных пользователей RabbitMQ, вы должны увидеть вывод, подобный приведённому ниже.

[root@mq2]# rabbitmqctl list_users

Listing users ...
user tags
admin [administrator]
guest [administrator]

Вы успешно настроили кластер RabbitMQ.