Как настроить простой кластер RabbitMQ докеры?

Я немного разбираюсь в создании докционированного кластера RabbitMQ, и google отображает всевозможные результаты для этого на той же машине.

Я пытаюсь создать кластер RabbitMQ для нескольких машин.

У меня три машины с именами dockerswarmmodemaster1 , dockerswarmmodemaster2 и dockerswarmmodemaster3

На первой машине (dockerswarmmodemaster1) я выдаю следующую команду:

 docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 \ -p 25672:25672 --hostname dockerswarmmodemaster1 --name roger_rabbit \ -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

Теперь это запускает rabbitMQ просто отлично, и я могу перейти на страницу администратора на 15672 и увидеть, что он работает, как ожидалось.

Я затем SSH на свою вторую машину (dockerswarmmodemaster2), и это бит, на который я застрял. Я пробовал варианты следующей команды:

 docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 \ -p 15672:15672 -p 25672:25672 --name jessica_rabbit -e CLUSTERED=true \ -e CLUSTER_WITH=rabbit@dockerswarmmodemaster1 \ -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \ rabbitmq:3-management 

Независимо от того, что я пытаюсь сделать, веб-страница на обеих машинах RabbitMQ говорит о том, что в разделе «ссылки на кластеры» нет кластера. Я еще не пробовал подключиться к третьей машине.

Итак – еще одна информация:
1. Имена машин разрешаются DNS.
2. Я попытался использовать ключ -net = host в команде запуска документатора на обеих машинах; без изменений.
3. Я не использую режим докеры или рой.
4. У меня нет установленной докеры. Я бы предпочел не использовать его, если это возможно.

Есть ли способ сделать это из команды запуска docker или мне нужно будет скачать admin cli для кролика и вручную присоединиться к кластеру?

Вы можете использовать этот плагин https://github.com/aweber/rabbitmq-autocluster для создания доклерного кластера RabbitMQ.

Плагин использует etcd2 или consul качестве обнаружения сервисов, etcd2 вам не нужно использовать командную строку rabbitmqctl .

Я использовал его с докером, но это необязательно.

Вот результат

Официальный контейнер, похоже, не поддерживает переменные среды CLUSTERED и CLUSTER_WITH . Он поддерживает только переменные списка, указанные в конфигурации RabbitMQ . Согласно официальному руководству по кластеризации , одним из возможных решений является файл конфигурации. Таким образом, вы можете просто предоставить свою конфигурацию контейнеру. Измененная конфигурация по умолчанию в вашем случае будет выглядеть так:

 [ { rabbit, [ { loopback_users, [ ] }, { cluster_nodes, {['rabbit@dockerswarmmodemaster1'], disc }} ]} ]. 

Сохраните этот фрагмент, например, /home/user/rmq/rabbitmq.config . Подсказка. Если вы хотите увидеть узел в консоли управления, вам нужно добавить еще один файл /home/user/rmq/enabled_plugins только с строкой

 [rabbitmq_management]. 

после этого ваша команда будет выглядеть так:

 docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 \ -p 15672:15672 -p 25672:25672 --name jessica_rabbit \ -v /home/user/rmq:/etc/rabbmitmq \ -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \ rabbitmq:3-management 

PS Вам также может потребоваться установить переменную среды RABBITMQ_USE_LONGNAME.

Чтобы создать кластер, все узлы rabbitmq, которые должны сформировать кластер, должны быть доступны (каждый из них другими) по имени узла (имя хоста). Вам нужно указать имя хоста для каждого контейнера докера с параметром --hostname и добавить / etc / host записи для всех других контейнеров, это вы можете сделать с --add-host или вручную вставить файл / etc / hosts вручную. Итак, вот пример для 3 кластеров узлов rabbitmq с контейнерами-докерерами (изображение rabbitmq: 3-management):

Сначала создайте сеть, чтобы вы могли назначать IP-адреса: docker network create --subnet=172.18.0.0/16 mynet1 . У нас будет следующее:

  • 3 докерных контейнера под названием rab1con, rab2con и rab3con
  • IP соответственно будут 172.18.0.11, -12 и -13
  • каждый из них будет иметь имя хоста соответственно rab1, rab2 и rab3
  • все должны делиться одним и тем же erlang cookie

Выдвиньте первый

 docker run -d --net mynet1 --ip 172.18.0.11 --hostname rab1 --add-host rab2:172.18.0.12 --add-host rab3:172.18.0.13 --name rab1con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

второй

 docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

последний

 docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

Чем в contaner rab2con do

 rabbitmqctl stop_app rabbitmqctl join_cluster rabbit@rab1 rabbitmqctl start_app 

и то же самое в rab3con, и все.