O cluster Broken RabbitMQ não irá reiniciar

4

Eu executo o RabbitMQ em 3 servidores, a mesma versão do Erlang e do RabbitMQ: RabbitMQ 3.4.1, Erlang 17.3

Um nó travou no servidor 2. Os outros dois nós não se conectaram:

servidor 1:

[CentOS-62-64-minimal ~]$ sudo rabbitmqctl cluster_status
Cluster status of node 'rabbit@CentOS-62-64-minimal' ...
[{nodes,[{disc,['rabbit@CentOS-62-64-minimal',rabbit@de3,rabbit@mysql]}]},
 {running_nodes,['rabbit@CentOS-62-64-minimal']},
 {cluster_name,<<"rabbit@CentOS-62-64-minimal">>},
 {partitions,[]}]

servidor 3:

[de3 ~]$ sudo rabbitmqctl cluster_status
Cluster status of node rabbit@de3 ...
[{nodes,[{disc,['rabbit@CentOS-62-64-minimal',rabbit@de3,rabbit@mysql]}]},
 {running_nodes,[rabbit@de3]},
 {cluster_name,<<"rabbit@CentOS-62-64-minimal">>},
 {partitions,[]}]

Após reiniciar e redefinir o rabbitmq no servidor 3, ele finalmente se conectou ao servidor1:

[CentOS-62-64-minimal ~]$ sudo rabbitmqctl cluster_status
Cluster status of node 'rabbit@CentOS-62-64-minimal' ...
[{nodes,[{disc,['rabbit@CentOS-62-64-minimal',rabbit@de3,rabbit@mysql]}]},
 {running_nodes,['rabbit@CentOS-62-64-minimal']},
 {cluster_name,<<"rabbit@CentOS-62-64-minimal">>},
 {partitions,[]}]

Por que o cluster "quebrou" com apenas 1 nó abaixo? O servidor 3 estava funcionando bem, mas o servidor 1 não estava: "A fila está localizada em um servidor que está inoperante".

Quanto ao servidor 2, ele não foi reiniciado. Após uma reinicialização manual, não consigo reconectar ao cluster, mesmo depois de várias redefinições e removendo / var / lib / rabbitmq / mnesia /:

[root@mysql ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@mysql ...
[{nodes,[{disc,[rabbit@mysql]}]},
 {running_nodes,[rabbit@mysql]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]}]

[mysql ~]# rabbitmqctl stop_app
Stopping node rabbit@mysql ...
[root@mysql ~]# rabbitmqctl force_reset
Forcefully resetting node rabbit@mysql ...
[ysql ~]# rabbitmqctl join_cluster rabbit@CentOS-62-64-minimal
Clustering node rabbit@mysql with 'rabbit@CentOS-62-64-minimal' ...
Error: {ok,already_member}
[mysql ~]# rabbitmqctl start_app
Starting node rabbit@mysql ...
[mysql ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@mysql ...
[{nodes,[{disc,[rabbit@mysql]}]},
 {running_nodes,[rabbit@mysql]},
 {cluster_name,<<"[email protected]">>},
 {partitions,[]}]

Não tenho ideia do que deu errado. Na última vez que isso aconteceu, atualizei o RabbitMQ qnd Erlang para a versão mais recente.

    
por Julien 19.11.2014 / 06:13

3 respostas

1

Eu tive esse problema hoje projetando um documento de quebra intencional para um evento breakfix para ensinar nossa equipe de operações como consertar o material. Intencionalmente, não agrupei um nó e não consegui executar o rabbitmqctl join_cluster com êxito porque o cluster acreditava que o nó já era membro.

Clustering node 'rabbit@node-1' with 'rabbit@node-0' ... ...done (already_member).

Por fim, o que funcionou para mim foi rabbitmqctl forget_cluster_node rabbit@node-1 de um nó em cluster em funcionamento. Depois que fiz isso, consegui executar com sucesso rabbtmqctl join_cluster rabbit@node-0

    
por 20.04.2017 / 23:52
4

Com base na documentação do cluster RabbitMQ , sua saída rabbitmqctl cluster_status parece errada; running_nodes deve conter mais do que apenas o nó local onde você está executando o comando. Isso sugere que eles não podem falar uns com os outros corretamente, existem firewalls entre os nós?

    
por 21.11.2014 / 15:18
1

Bodgit está correto, posso dizer que você tem um cluster de coelho operacional que sua configuração está errada. Parece que cada nó é seu próprio cluster com apenas ele mesmo como o nó atual em execução.

Por favor, consulte o documento do RabbitMQ sobre como configurar o cluster.

Você deve ver algo muito mais parecido com o seguinte em cada nó:

    root@rabbit0:~# rabbitmqctl cluster_status
    Cluster status of node 'rabbit@rabbit0' ...
    [{nodes,[{disc,['rabbit@rabbit0','rabbit@rabbit1']}]},
     {running_nodes,['rabbit@rabbit1','rabbit@rabbit0']},
     {cluster_name,<<"[email protected]">>},
     {partitions,[]}]
    ...done.

    root@rabbit1:~# rabbitmqctl cluster_status
    Cluster status of node 'rabbit@rabbit1' ...
    [{nodes,[{disc,['rabbit@rabbit0','rabbit@rabbit1']}]},
     {running_nodes,['rabbit@rabbit0','rabbit@rabbit1']},
     {cluster_name,<<"[email protected]">>},
     {partitions,[]}]
    ...done.

Isso é higienizado, mas as ordens e a intenção são mantidas.

Você também precisa configurar a alta disponibilidade se quiser que suas filas apresentem failover:

link

    
por 24.11.2014 / 20:35

Tags