Obtendo o RabbitMQ Autocluster para produzir um cluster no Rabbit MQ após o registro do Consul

3

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 .

    
por hamx0r 15.02.2016 / 22:30

1 resposta

1

Você precisa fornecer um nome de host significativo às instâncias do docker e nomes de host que podem ser resolvidos pelas duas instâncias.

Por exemplo, no log que você forneceu, aqui estão os nomes de host gerados automaticamente pelo docker:

  • Nó 1:

    node           : rabbit@edae08d9e0bc
    
  • Nó 2:

    node           : rabbit@e9bd0b21c5af
    

Depois de definir manualmente um nome de host "resolvível" para suas instâncias, os nós RabbitMQ poderão se comunicar e formar um cluster.

    
por 23.03.2016 / 11:40

Tags