С помощью rabbitmq-автокластер настроенный для Consul, я могу запустить 2 экземпляра RMQ, которые правильно регистрируются в Consul. Я могу проверить это, посмотрев на веб-интерфейс Consul, чтобы увидеть "2 прохождения" на кнопке службы "rabbitmq". Тем не мение, rabbitmqctl cluster_status
не указывает, что экземпляры RMQ сгруппированы.
Ниже вы можете увидеть ошибку о невозможности подключения к rabbit@node1
, но с таким именем ничего не настроено. Это корень или моя проблема? Нужно ли мне устанавливать имена хостов RMQ Docker Container, чтобы это работало? Я предположил, что rabbitmq-autocluster позволяет настроить кластер без необходимости возиться с именами хостов (/etc/hosts
или DNS), потому что Consul все это сделает. Это не так?
И RMQ, и Consul запускаются в Docker-контейнерах, работают так:
docker run --name rmq1 -d \
-e AUTOCLUSTER_TYPE=consul \
-e CONSUL_SCHEME=http \
-e CONSUL_HOST=192.168.99.100 \
-e CONSUL_PORT=8500 \
-e CONSUL_SERVICE=rabbitmq \
-e CLUSTER_NAME=rmqcluster \
-l consul \
-p 4369:4369 \
-p 5672:5672 \
-p 15672:15672 \
-p 25672:25672 \
gavinmroy/alpine-rabbitmq-autocluster
Обратите внимание на асимметричный порт вперед
docker run --name rmq2 -d \
-e AUTOCLUSTER_TYPE=consul \
-e CONSUL_SCHEME=http \
-e CONSUL_HOST=192.168.99.100 \
-e CONSUL_PORT=8500 \
-e CONSUL_SERVICE=rabbitmq \
-e CLUSTER_NAME=rmqcluster \
-l consul \
-p 4370:4369 \
-p 5673:5672 \
-p 15673:15672 \
-p 25673:25672 \
gavinmroy/alpine-rabbitmq-autocluster
docker run --name consul \
-p 8400:8400 -p 8500:8500 -p 8600:53/udp \
-h consul progrium/consul \
-server -bootstrap -ui-dir /ui
Из комментарий разработчика по этому поводу, это выглядит как rabbitmqctl cluster_status
должно быть использовано для установления того, что экземпляры RMQ действительно сгруппированы. Однако, когда я запускаю эту команду, она не показывает никаких кластеров:
=INFO REPORT==== 15-Feb-2016::19:57:56 ===
node : rabbit@edae08d9e0bc
home dir : /var/lib/rabbitmq
config file(s) : /usr/lib/rabbitmq/etc/rabbitmq/rabbitmq.config
cookie hash : iqG7DCBA+lxNNLQq/Y6efg==
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia
Setting default log settings
=INFO REPORT==== 15-Feb-2016::19:57:57 ===
autocluster: Registering node with consul
=INFO REPORT==== 15-Feb-2016::19:57:57 ===
autocluster: Node appears to be the first in the cluster
Обратите внимание, что это также первый узел в кластере.
=INFO REPORT==== 15-Feb-2016::19:58:07 ===
node : rabbit@e9bd0b21c5af
home dir : /var/lib/rabbitmq
config file(s) : /usr/lib/rabbitmq/etc/rabbitmq/rabbitmq.config
cookie hash : iqG7DCBA+lxNNLQq/Y6efg==
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia
Setting default log settings
=INFO REPORT==== 15-Feb-2016::19:58:08 ===
autocluster: Registering node with consul
=INFO REPORT==== 15-Feb-2016::19:58:08 ===
autocluster: Node appears to be the first in the cluster
Если я сбегу docker restart rmq2
, я получаю ниже. Обратите внимание на ошибку
=INFO REPORT==== 15-Feb-2016::21:24:26 ===
node : rabbit@e9bd0b21c5af
home dir : /var/lib/rabbitmq
config file(s) : /usr/lib/rabbitmq/etc/rabbitmq/rabbitmq.config
cookie hash : iqG7DCBA+lxNNLQq/Y6efg==
log : tty
sasl log : tty
database dir : /var/lib/rabbitmq/mnesia
Setting default log settings
=INFO REPORT==== 15-Feb-2016::21:24:27 ===
autocluster: Registering node with consul
=ERROR REPORT==== 15-Feb-2016::21:24:32 ===
autocluster: Can not communicate with cluster nodes: [rabbit@node1]
=INFO REPORT==== 15-Feb-2016::21:24:32 ===
** РЕДАКТИРОВАТЬ ** В приведенном выше примере использовался один сервер Consul на отдельной машине от двух машин RMQ. Я попробовал это снова, используя Консул Контейнер работает на тех же машинах, на которых работает каждый из экземпляров RMQ, чтобы действовать как Consul Client. Экземпляры RMQ запустятся и зарегистрируются с их совместно размещенным клиентом Consul. Оба клиента Consul подключены к одному серверу Consul. При запуске одного из экземпляров RMQ после того, как прошло достаточно времени, чтобы 1-й экземпляр RMQ полностью зарегистрировался в Consul, мы видим следующее:
docker logs rmq2 | grep autoclusterautocluster: Registering node with consul
autocluster: Can not communicate with cluster nodes: [rabbit@192]
autocluster: Starting Consul Health Check TTL Timer
Похоже, Consul регистрирует каждый экземпляр RMQ, используя его IP-адрес в качестве имени хоста, и потому что есть .
в нем он думает, что это полное доменное имя. Если я установил RABBITMQ_USE_LONGNAME на true
, RMQ не загружается с этим выводом.
Вам необходимо дать осмысленное имя хоста вашим экземплярам докеров и имена хостов, которые могут быть разрешены обоими экземплярами.
Например, в предоставленном вами журнале есть имена хостов, автоматически сгенерированные докером:
Узел 1:
node : rabbit@edae08d9e0bc
Узел 2:
node : rabbit@e9bd0b21c5af
После того как вы вручную установите «разрешаемое» имя хоста для своих экземпляров, узлы RabbitMQ смогут связываться и формировать кластер.