Usando o rabbitmq-autocluster configurado para o Consul, posso ativar duas instâncias do RMQ que se registram adequadamente no Consul. Posso verificar isso consultando a GUI da Web do Consul para ver "2 passagens" no botão de serviço "rabbitmq". No entanto, rabbitmqctl cluster_status
não indica que as instâncias do RMQ estão em cluster.
Abaixo, você pode ver um erro sobre não conseguir se conectar a rabbit@node1
, mas nada está configurado com esse nome. Essa é a raiz ou o meu problema? Preciso definir os nomes de host do RMQ Docker Container para que isso funcione? Presumi que o rabbitmq-autocluster permitia uma configuração de cluster sem precisar mexer com nomes de host ( /etc/hosts
ou DNS) porque o Consul lidaria com tudo isso. Isso está errado?
Tanto o RMQ quanto o Consul estão sendo executados nos contêineres do Docker, executados da seguinte forma:
Contêineres:
RMQ 1
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
RMQ 2
Observe a porta assimétrica encaminhar
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
Cônsul
docker run --name consul \
-p 8400:8400 -p 8500:8500 -p 8600:53/udp \
-h consul progrium/consul \
-server -bootstrap -ui-dir /ui
De comentário do desenvolvedor sobre este assunto , parece que rabbitmqctl cluster_status
deveria ser utilizável para estabelecer que as instâncias de RMQ estão realmente agrupadas. No entanto, quando eu executo este comando, ele não mostra nenhum cluster:
Registros
RMQ 1
=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
RMQ 2
Observe que ele também parece ser o primeiro nó do 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
RMQ 2
Se eu executar docker restart rmq2
, recebo o abaixo. Observe o erro
=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 ===
** EDIT **
O acima foi usando um único servidor Consul em uma máquina separada das duas máquinas RMQ. Eu tentei isso novamente usando um Cônsul Container em execução nas mesmas máquinas que executam cada uma das instâncias do RMQ para agir como um cliente cônsul. As instâncias do RMQ serão iniciadas e registradas com o Cônsul Client co-hospedado. Ambos os Clientes Consul estão conectados ao mesmo Servidor Consul. Ao iniciar uma das instâncias do RMQ após o tempo suficiente para a primeira instância do RMQ se registrar completamente no Consul, vemos isto:
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
Parece que o Consul está registrando cada instância do RMQ usando seu endereço IP para o nome do host e, como há um .
, ele acha que é um FQDN. Se eu definir RABBITMQ_USE_LONGNAME como true
, o RMQ não inicializa com essa saída .