Поиск по сайту:

Как настроить кластер RabbitMQ в Ubuntu 20.04


Это руководство существует для этих версий ОС

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 20.04 (Focal Fossa)

На этой странице

  1. Предпосылки
  2. Начало работы
  3. Установите сервер RabbitMQ
  4. Включить подключаемые модули управления RabbitMQ
  5. Настройка кластера RabbitMQ
  6. Пользователь-администратор установки
  7. Зеркальное отображение очереди установки RabbitMQ
  8. Доступ к кластеру RabbitMQ
  9. Заключение

RabbitMQ — это бесплатное многопротокольное программное обеспечение для обмена сообщениями с открытым исходным кодом, написанное на языке программирования Erlang. Брокер сообщений используется для хранения сообщений для приложения. Когда приложение отправляет данные другому приложению, оно публикует сообщение в брокере сообщений. RabbitMQ поддерживает несколько протоколов обмена сообщениями и может быть легко развернут в распределенных конфигурациях. Брокер сообщений действует как посредник для различных веб-приложений и используется для уменьшения нагрузки и времени доставки веб-приложения.

В этом руководстве мы собираемся настроить кластер RabbitMQ с тремя узлами на сервере Ubuntu 20.04.

Предпосылки

  • Три сервера с Ubuntu 20.04.
  • Пароль root настраивается на каждом сервере.

Начиная

Перед запуском вам необходимо обновить системные пакеты до последней версии. Вы можете обновить их, выполнив следующую команду на каждом узле:

apt-get update -y

После обновления всех пакетов вам нужно будет настроить файл /etc/hosts на каждом узле. Таким образом, они могут общаться друг с другом по имени хоста.

Отредактируйте файл /etc/hosts на каждом узле с помощью следующей команды:

nano /etc/hosts

Добавьте следующие строки:

192.168.0.10 node1
192.168.0.11 node2
192.168.0.12 node3

Сохраните и закройте файл, когда закончите. Далее можно переходить к следующему шагу.

Установите сервер RabbitMQ

Далее вам нужно будет установить пакет RabbitMQ Server на каждом узле. Вы можете установить его, просто выполнив следующую команду:

apt-get install rabbitmq-server -y

После установки запустите службу RabbitMQ и включите ее запуск при перезагрузке системы с помощью следующей команды:

systemctl start rabbitmq-server
systemctl enable rabbitmq-server

Вы также можете проверить статус службы RabbitMQ с помощью следующей команды:

systemctl status rabbitmq-server

Вы должны получить следующий результат:

? rabbitmq-server.service - RabbitMQ Messaging Server
     Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-07-21 06:25:07 UTC; 19min ago
   Main PID: 2565 (beam.smp)
     Status: "Initialized"
      Tasks: 87 (limit: 2353)
     Memory: 83.5M
     CGroup: /system.slice/rabbitmq-server.service
             ??2551 /bin/sh /usr/sbin/rabbitmq-server
             ??2565 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1>
             ??2828 erl_child_setup 65536
             ??2921 inet_gethost 4
             ??2922 inet_gethost 4

Jul 21 06:24:58 node1 systemd[1]: Starting RabbitMQ Messaging Server...
Jul 21 06:25:07 node1 systemd[1]: rabbitmq-server.service: Supervising process 2565 which is not our child. We'll most likely not notice when >
Jul 21 06:25:07 node1 systemd[1]: Started RabbitMQ Messaging Server.

На этом этапе сервер RabbitMQ установлен и работает на каждом узле. Теперь вы можете перейти к следующему шагу.

Включить подключаемые модули управления RabbitMQ

Подключаемый модуль управления RabbitMQ предоставляет API на основе HTTP, который можно использовать для мониторинга и управления узлами и кластерами RabbitMQ через веб-браузер. По умолчанию он работает на TCP-порту 15672.

Вы можете включить подключаемый модуль управления RabbitMQ, выполнив следующую команду на каждом узле:

rabbitmq-plugins enable rabbitmq_management

Вы должны увидеть следующий вывод:

Enabling plugins on node :
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to 
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

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

systemctl restart rabbitmq-server

Вы можете проверить порт прослушивания с помощью следующей команды:

netstat -tunelp | grep 15672

Вы должны увидеть следующий вывод:

tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      109        23155      2565/beam.smp

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

По умолчанию файл /var/lib/rabbitmq/.erlang.cookie одинаков на каждом узле. Чтобы настроить кластер RabbitMQ, вам потребуется скопировать файл /var/lib/rabbitmq/.erlang.cookie с узла node1 на другие узлы.

На узле node1 выполните следующую команду, чтобы скопировать файл /var/lib/rabbitmq/.erlang.cookie на другие узлы.

scp /var/lib/rabbitmq/.erlang.cookie :/var/lib/rabbitmq/

Далее вам нужно будет настроить узлы node1 и node2 для присоединения к узлу кластера node1.

Сначала перезапустите службу RabbitMQ и остановите приложение с помощью следующей команды на узлах node2 и node3:

systemctl restart rabbitmq-server
rabbitmqctl stop_app

На node2 присоединитесь к кластеру на node1, выполнив следующую команду:

rabbitmqctl join_cluster 

Вы должны увидеть следующий вывод:

Clustering node 

На node2 запустите приложение с помощью следующей команды:

rabbitmqctl start_app

Вы должны увидеть следующий вывод:

Starting node  ...
 completed with 3 plugins.

На узле3 присоединитесь к кластеру на узле1, выполнив следующую команду:

rabbitmqctl join_cluster 

Вы должны увидеть следующий вывод:

Clustering node 

На node3 запустите приложение с помощью следующей команды:

rabbitmqctl start_app

Вы должны увидеть следующий вывод:

Starting node  ...
 completed with 3 plugins.

После успешного завершения проверьте состояние кластера, выполнив следующую команду на узле node1:

rabbitmqctl cluster_status

Вы должны увидеть следующий вывод:

Cluster status of node  ...
Basics

Cluster name: 

Disk Nodes





Running Nodes





Versions

: RabbitMQ 3.8.2 on Erlang 22.2.7
: RabbitMQ 3.8.2 on Erlang 22.2.7
: RabbitMQ 3.8.2 on Erlang 22.2.7

Alarms

(none)

Network Partitions

(none)

Listeners

Node: , interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: , interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: , interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: , interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: , interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: , interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: , interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: , interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: , interface: [::], port: 15672, protocol: http, purpose: HTTP API

Feature flags

Flag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: quorum_queue, state: enabled
Flag: virtual_host_metadata, state: enabled

Настройка пользователя администратора

Далее вам нужно будет создать нового пользователя-администратора для сервера RabbitMQ и удалить гостевого пользователя по умолчанию.

Вы можете создать нового пользователя с именем «hitesh» и паролем «password», выполнив следующую команду на node1:

rabbitmqctl add_user hitesh password

Вы должны увидеть следующий вывод:

Adding user "hitesh" ...

Затем настройте пользователя hitesh в качестве администратора с помощью следующей команды:

rabbitmqctl set_user_tags hitesh administrator

Вы должны увидеть следующий вывод:

Setting tags for user "hitesh" to [administrator] ...

Затем предоставьте пользователю hitesh разрешение на изменение, запись и чтение всех виртуальных хостов.

rabbitmqctl set_permissions -p / hitesh ".*" ".*" ".*"

Вы должны увидеть следующий вывод:

Setting permissions for user "hitesh" in vhost "/" ...

Затем удалите гостевого пользователя с помощью следующей команды:

rabbitmqctl delete_user guest

Вы должны получить следующую команду:

Deleting user "guest" ...

Теперь вы можете перечислить всех пользователей с помощью следующей команды:

rabbitmqctl list_users

Вы должны получить следующий результат:

Listing users ...
user	tags
hitesh	[administrator]

Ваш пользователь, которого вы создали на узле 1, будет автоматически реплицирован на все узлы кластера.

Зеркалирование очереди установки RabbitMQ

По умолчанию содержимое очереди располагается на одном узле. Таким образом, вам потребуется настроить кластер политик ha для зеркалирования очереди и репликации на все узлы кластера.

Для этого создайте политику ha с именем ha-all, которая будет зеркалировать все очереди в кластере RabbitMQ на все узлы в кластере.

rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

Вывод:

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

Затем создайте политику ha с именем ha-two, в которой все имена очередей начинаются с двух. будет зеркалироваться на два узла в кластере.

rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

Вывод:

Setting policy "ha-two" for pattern "^two\." to "{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}" with priority "0" for vhost "/" ...

Затем создайте политику высокой доступности с именем ha-nodes, которая будет содержать все очереди, имя которых начинается с узлов. Мы будем зеркалировать на два конкретных узла node2 и node3 в кластере.

rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":[""]}'

Вывод:

Setting policy "ha-nodes" for pattern "^nodes\." to "{"ha-mode":"nodes","ha-params":[""]}" with priority "0" for vhost "/" ...

Теперь вы можете вывести список всех настроенных политик, выполнив следующую команду:

rabbitmqctl list_policies;

Вы должны увидеть следующий вывод:

Listing policies for vhost "/" ...
vhost	name	pattern	apply-to	definition	priority
/	ha-all	.*	all	{"ha-mode":"all"}	0
/	ha-two	^two\.	all	{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}	0
/	ha-nodes	^nodes\.	all	{"ha-mode":"nodes","ha-params":[""]}	0

Как только вы закончите, вы можете перейти к следующему шагу.

Доступ к кластеру RabbitMQ

Теперь вы можете получить доступ к веб-интерфейсу RabbitMQ, введя IP-адрес любого узла в веб-браузере с портом 15672, например http://192.168.0.10:15672/. Вы должны увидеть страницу входа RabbitMQ:

Укажите имя пользователя и пароль администратора и нажмите кнопку «Войти». Вы должны увидеть панель управления RabbitMQ на следующем экране:

Затем щелкните меню вкладки «Администратор» и щелкните меню «Политики». Вы должны увидеть все созданные политики RabbitMQ ha на следующем экране:

Заключение

Поздравляем! вы успешно настроили трехузловой кластер RabbitMQ на сервере Ubuntu20.04. Теперь ваш кластер совместно использует информацию о конфигурации, включая информацию о топологии и безопасности, на всех узлах.