O documento de agrupamento do RabbitMQ
https://www.rabbitmq.com/clustering.html
descreve um processo pelo qual você pode implantar um arquivo de configuração para clustering para que um cluster seja criado automaticamente quando seus nós rabbitmq inicializarem.
[{rabbit,
[{cluster_nodes, {['rabbit@rabbit1', 'rabbit@rabbit2', 'rabbit@rabbit3'], ram}}]}].
Você aplica esse arquivo em cada um dos 3 nós em /etc/rabbitmq/rabbitmq.config e, em seguida, inicia o rabbitmq em cada um e um cluster aparentemente se formará.
Isso não parece funcionar muito bem, por exemplo
Se você iniciar o rabbit2 e o rabbit3 ainda não tiver surgido, o serviço não será iniciado no rabbit2, pois está tentando criar um cluster com o rabbit3.
Da mesma forma, se você aplicar a configuração apenas no rabbit1 e pré-iniciar o rabbit2 e o rabbit3, o rabbit1 formará um cluster apenas com o rabbit2, pois, de acordo com a documentação (não entendo o porquê):
RabbitMQ will try to cluster to each node provided, and stop after it can cluster with one of them.
A única maneira de isso funcionar é se você aplicar o arquivo de configuração em todos os 3 nós e iniciá-los exatamente ao mesmo tempo. Estou tentando implantar isso com o Ansible, que cria os nós sequencialmente, para que não funcione.
O que estou perdendo aqui?
Eu também implanto clusters RabbitMQ com Puppet, e você realmente não precisa ativar todos os nós exatamente ao mesmo tempo.
O que eu costumo fazer, e até agora tem funcionado para mim é:
.
nós que estamos agrupando (porque não quero depender da disponibilidade de DNS) * implantar rabbitmq.config
.
Para criar o cookie erlang, costumo usar http://passwordsgenerator.net/ e configurá-lo para criar uma string de 20 caracteres consistente apenas com caracteres maiúsculos. Em seguida, coloque esta string em /var/lib/rabbitmq/.erlang.cookie, assim:
Isso deve funcionar para você. Testado nas versões 3.2, 3.3 e 3.5.
Eu fiz algum progresso nisso.
O problema parece estar relacionado à escolha de usar nós ram em vez de nós de disco no arquivo rabbitmq.config. Da documentação:
Quando altero o arquivo de configuração para usar "disco" em vez de "ram", a criação do cluster ficou muito mais estável.