# Настройка кластера RabbitMQ ## Шаг 1: Настройте имена хостов и DNS Первым шагом в установке кластера RabbitMQ является настройка правильных имён хостов и DNS. ```{rubric} MQ Server 1: ``` ```console [any@mq2]$ sudo hostnamectl set-hostname mq1.example.com --static ``` ```{rubric} MQ Server 2: ``` ```console [any@mq1]$ sudo hostnamectl set-hostname mq2.example.com --static ``` Если у вас нет DNS-сервера, вы можете добавить записи в файл `/etc/hosts`: ```console [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 должен быть запущен: ```console [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. ``` ## Шаг 3: Скопируйте cookie с RabbitMQ Node1 на RabbitMQ Node2 Для работы кластера RabbitMQ все узлы, участвующие в кластере, должны иметь одинаковые файлы cookie. Скопируйте cookie на своём первом узле на все остальные узлы в кластере. На `mq1` запустите: ```console [root@mq1]# scp /var/lib/rabbitmq/.erlang.cookie \ mq2:/var/lib/rabbitmq/.erlang.cookie ``` ## Шаг 4: Сброс RabbitMQ на Node2 Переконфигурируйте RabbitMQ на узле 2 и присоедините его к кластеру. 1. Перезапустите сервис RabbitMQ: ```console [root@mq2]# systemctl restart rabbitmq-server ``` 2. Остановите приложение: ```console [root@mq2]# rabbitmqctl stop_app Stopping rabbit application on node rabbit@mq2 ... ``` 3. Сбросьте RabbitMQ: ```console [root@mq2]# rabbitmqctl reset Resetting node rabbit@mq2 ... ``` 3. Присоедините узел к кластеру: ```console [root@mq2]# rabbitmqctl join_cluster rabbit@mq1 Clustering node rabbit@mq2 with rabbit@mq1 ``` 4. Запустите процесс подачи приложения: ```console [root@mq2]# rabbitmqctl start_app Starting node rabbit@mq2 ... completed with 0 plugins. ``` 5. Проверьте статус кластера: ```console [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 Создайте политику, которая позволяет зеркалировать очереди для всех узлов в кластере. ```console [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 "/" ... ``` Вы можете перечислить настроенные политики, используя: ```console [root@mq1]# rabbitmqctl list_policies Listing policies for vhost "/" ... vhost name pattern apply-to definition priority / ha-all .\* all {"ha-mode":"all"} 0 ``` Чтобы удалить политику, используйте: ```console [root@mq1]# rabbitmqctl clear_policy ``` ## Шаг 6: Тестирование Наконец, проверьте настройку кластера RabbitMQ. Включите веб-панель управления RabbitMQ Management для удобного управления: ```console [root@mq1]# rabbitmq-plugins enable rabbitmq_management ``` Для отображения статистики нод, необходимо включить плагин на всех нодах кластера. Если у вас есть активный брандмауэр, разрешите порты TCP `5672` и `15672`. Чтобы открыть его, откройте URL-адрес `http://[IP-адрес сервера | Имя хоста]:15672`. По умолчанию пользователь `guest` существует и может подключаться только с локального хоста. Вы можете войти с этим пользователем локально с паролем `guest`. Чтобы иметь возможность войти в сеть, создайте пользователя-администратора, как показано ниже: ```console [root@mq1]# rabbitmqctl add_user admin StrongPassword [root@mq1]# rabbitmqctl set_user_tags admin administrator ``` Используйте созданного пользователя для входа в интерфейс управления RabbitMQ. Вы должны получить статус всех узлов кластера. Если вы войдёте в RabbitMQ node2 и проверите для созданных пользователей RabbitMQ, вы должны увидеть вывод, подобный приведённому ниже. ```console [root@mq2]# rabbitmqctl list_users Listing users ... user tags admin [administrator] guest [administrator] ``` Вы успешно настроили кластер RabbitMQ.