Установка и настройка кластера RabbitMQ на Windows
Иногда есть необходимость установить кластер RabbitMQ на Windows сервера, в этой статье мы рассмотрим как это можно сделать.
Установка будет проводится на 3 сервера, на каждом из них нужно выполнить операции указанные ниже.
Устанавливаем Erlang, переходим на страницу https://www.rabbitmq.com/which—erlang.html и проверяем какая версия Erlang совместима с текущим RabbitMQ.
Скачиваем и устанавливаем необходимую версию Erlang по ссылке http://www.erlang.org/download.html
После установки устанавливаем переменную окружения ERLANG_HOME
Открываем Start > Settings > Control Panel > System > Advanced > Environment Variables
Создаем системную переменную ERLANG_HOME, которая должна указывать на путь к установленному Erlang, например — C:\Program Files\erl10.4
Скачиваем архив с RabbitMQ https://github.com/rabbitmq/rabbitmq—server/releases/download/v3.7.15/rabbitmq—server—windows-3.7.15.zip
В настоящий момент последняя версия 3.7.15
Распаковываем архив в C:\Program Files\RabbitMQ
По аналогии создаем системную переменную RABBITMQ_SERVER , которая должна содержать полный путь к серверу (C:\Program Files\RabbitMQ)
Далее, в системную переменную Path добавляем значение ;%RABBITMQ_SERVER%\sbin
По аналогии создаем переменную с указанием пути к конфигу RABBITMQ
Переменная RABBITMQ_CONFIG_FILE , значение имя файла без расширения, например — c:\rabbitmq\rabbitmq
Создаем конфиг RABBITMQ — c:\rabbitmq\rabbitmq.config со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
%% Sample [ {rabbit, [ {tcp_listeners, [5672]}, {log_levels, [{connection, error}]}, {default_vhost, <<"/">>}, {default_user, <<"username">>}, {default_pass, <<"password">>}, {default_permissions, [<<".*">>, <<".*">>, <<".*">>]}, {heartbeat, 60}, {cluster_partition_handling, pause-minority}, {frame_max, 1048576} ]} ]. |
Соответственно вместо default_user и default_pass прописываем значения для дефолтного пользователя
cluster_partition_handling выставляем согласно статье https://www.rabbitmq.com/partitions.html#automatic—handling
- pause—minority — RabbitMQ перестанет принимать запросы если из строя вышло 2-е ноды из 3-х
- pause_if_all_down — перестанет принимать запросы если из строя вышли все ноды указанные в конфиге
- ignore — подойдет для кластера из двух нод
- autoheal — RabbitMQ продолжит принимать запросы даже если из строя вышло 2-е ноды из 3-х. Минус данного подхода в том что сообщения могут потеряться. Данный режим подойдет если вы работаете в нестабильной сети.
Устанавливаем RabbitMQ как сервис.
Для этого в консоли запускаем команду:
1 |
rabbitmq-service.bat install |
Запускаем сервис
Активируем Management плагин командой:
1 |
rabbitmq-plugins.bat enable rabbitmq_management |
Теперь веб интерфейс RabbitMQ доступен по адресу http://localhost:15672 и доступен под УЗ указанной в конфиге
Теперь, перед тем как создавать кластер, синхронизируйте erlang cookie
В качестве мастера мы будем использовать первый сервер, у меня это rmq1.dev.local
На мастер сервере я копирую cookie из %APPDATA%\RabbitMQ\.erlang.cookie в каталог C:\Windows\System32\config\systemprofile
Далее с этого сервера я копирую файл %APPDATA%\RabbitMQ\.erlang.cookie в каталоги %APPDATA%\RabbitMQ\ и C:\Windows\System32\config\systemprofile на другие 2 сервера.
В моем случае это rmq2.dev.local и rmq3.dev.local
После этого перезапускаем сервис RABBITMQ на серверах rmq2.dev.local и rmq3.dev.local
Переходим к созданию кластера.
Открываем консоль на сервере rmq2.dev.local и выполняем
1 2 3 4 5 6 |
rabbitmqctl stop_app rabbitmqctl join_cluster --ram rabbit@rmq1.dev.local rabbitmqctl start_app |
Повторяем операцию на сервере rmq3.dev.local
Кластер готов, все ноды отображаются в веб интерфейсе http://localhost:15672
Если для вас критична консистентность данных выполните команду ниже на любой из нод RABBITMQ
1 |
rabbitmqctl set_policy HA ".*" "{""ha-mode"": ""all""}" |
Теперь все сообщения будут считаться записанными только после того как будут синхронизированы на всех серверах.
Если по какой-то причине вам нужно удалить одну из нод выполните команды:
1 2 3 |
rabbitmqctl -n rabbit@rmq2.dev.local stop_app rabbitmqctl forget_cluster_node rabbit@rmq2.dev.local |
На этом настройка кластера RabbitMQ завершена.
Добавить комментарий