Contents

Introduction

Prerequisites

Requirements

Componentes Utilizados

Problema

Verifique se RabbitMQ está fora do cluster

Solução

Introduction

Este documento descreve como adicionar manualmente RabbitMQ a um cluster se o cluster estiver quebrado.

Prerequisites

Requirements

Não existem requisitos específicos para este documento.

Componentes Utilizados

As informações neste documento são baseadas nestas versões de software e hardware:

- Servidor mínimo 2 RabbitMQ

- Um Balanceador de Carga

Problema

Este artigo o orienta sobre como verificar o cluster RabbitMQ e adicionar manualmente essas instâncias ao cluster. O CloudCenter fornece um assistente para configurar a alta disponibilidade (HA) para o RabbitMQ, no entanto, em alguns casos, ele diz que o HA foi configurado com êxito após sair do assistente, mas o cluster RabbitMQ não foi formado corretamente.

Verifique se RabbitMQ está fora do cluster

Etapa 1. Faça login em todos os servidores RabbitMQ com o uso do console CLI.

Etapa 2. Verifique se o servidor RabbitMQ é executado em todas as instâncias.

#ps -ef | grep rabbit

Output:

rabbitmq  1677     1  0 14:47 ?        00:00:00 /usr/lib/erlang/erts-6.4/bin/epmd -daemon

root      1973     1  0 14:47 ?        00:00:00 /bin/sh /etc/rc.d/init.d/rabbitmq-server start

root      2000  1973  0 14:47 ?        00:00:00 /bin/bash -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/sbin/rabbitmq-server

root      2003  2000  0 14:47 ?        00:00:00 su rabbitmq -s /bin/sh -c /usr/lib/rabbitmq/bin/rabbitmq-server

rabbitmq  2026  2003  0 14:47 ?        00:00:05 /usr/lib/erlang/erts-6.4/bin/beam -W w -K true -A30 -P 1048576 -- -root /usr/lib/erlang -progname erl -- -home /var/lib/rabbitmq -- -pa /usr/lib/rabbitmq/lib/rabbitmq_server-3.5.1/sbin/../ebin -noshell -noinput -s rabbit boot -sname rabbit@ip-172-31-32-101 -boot start_sasl -config /etc/rabbitmq/rabbitmq -kernel inet_default_connect_options [{nodelay,true}] -sasl errlog_type error -sasl sasl_error_logger false -rabbit error_logger {file,"/var/log/rabbitmq/rabbit@ip-172-31-32-101.log"} -rabbit sasl_error_logger {file,"/var/log/rabbitmq/rabbit@ip-172-31-32-101-sasl.log"} -rabbit enabled_plugins_file "/etc/rabbitmq/enabled_plugins" -rabbit plugins_dir "/usr/lib/rabbitmq/lib/rabbitmq_server-3.5.1/sbin/../plugins" -rabbit plugins_expand_dir "/var/lib/rabbitmq/mnesia/rabbit@ip-172-31-32-101-plugins-expand" -os_mon start_cpu_sup false -os_mon start_disksup false -os_mon start_memsup false -mnesia dir "/var/lib/rabbitmq/mnesia/rabbit@ip-172-31-32-101" -kernel inet_dist_listen_min 25672 -kernel inet_dist_listen_max 25672

rabbitmq  2242  2026  0 14:47 ?        00:00:00 inet_gethost 4

rabbitmq  2243  2242  0 14:47 ?        00:00:00 inet_gethost 4

root      2602  2588  0 15:04 pts/0    00:00:00 grep --color=auto rabbit

OR

#/sbin/service rabbitmq-server status

Status of node 'rabbit@ip-172-31-32-101' ...

[{pid,2026},

{running_applications,

[{rabbitmq_management,"RabbitMQ Management Console","3.5.1"},

{rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.5.1"},

{webmachine,"webmachine","1.10.3-rmq3.5.1-gite9359c7"},

{mochiweb,"MochiMedia Web Server","2.7.0-rmq3.5.1-git680dba8"},

{rabbitmq_management_agent,"RabbitMQ Management Agent","3.5.1"},

{rabbit,"RabbitMQ","3.5.1"},

----- Text omitted for brevity

Etapa 3. Verifique o status do cluster de todas as instâncias com estes comandos:

[root@ip-172-31-32-101 ~]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@ip-172-31-32-101' ...

[{nodes,[{disc,['rabbit@ip-172-31-32-101']}]},

{running_nodes,['rabbit@ip-172-31-32-101']},

{cluster_name,<<"rabbit@ip-172-31-32-101.us-east-2.compute.internal">>},

{partitions,[]}]

Nesta saída, você pode identificar que há apenas um nó que é executado no cluster.

Solução

Neste cenário, adicione rabbit@ip-172-31-32-101 ao cluster rabbit@ip-172-31-45-110.us-east-2.compute.internal

Etapa 1. Para vincular o segundo servidor RabbitMQ, você precisa garantir que o aplicativo seja interrompido e se junte ao cluster.

Etapa 2. Mude para o servidor RabbitMQ2 e pare o aplicativo.

[root@ip-172-31-32-101 ~]# rabbitmqctl stop_app

Stopping node 'rabbit@ip-172-31-32-101' ...

[root@ip-172-31-32-101 ~]#

Etapa 3. Junte o servidor RabbitMQ2 ao cluster RabbitMQ1.

[root@ip-172-31-32-101 ~]# rabbitmqctl join_cluster rabbit@ip-172-31-45-110

Clustering node 'rabbit@ip-172-31-32-101' with 'rabbit@ip-172-31-45-110' ...

Etapa 4. Inicie o aplicativo rabbitmq2.

[root@ip-172-31-32-101 ~]# rabbitmqctl start_app

Starting node 'rabbit@ip-172-31-32-101' ...

Você pode ver que os dois nós estão unidos em um cluster quando você executa o comando cluster_status em qualquer um dos nós.

Server1 : Output

[root@ip-172-31-45-110 ~]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@ip-172-31-45-110' ...

[{nodes,[{disc,['rabbit@ip-172-31-32-101','rabbit@ip-172-31-45-110']}]},

{running_nodes,['rabbit@ip-172-31-32-101','rabbit@ip-172-31-45-110']},

{cluster_name,<<"rabbit@ip-172-31-45-110.us-east-2.compute.internal">>},

{partitions,[]}]

Server2 : Output

[root@ip-172-31-32-101 ~]# rabbitmqctl cluster_status

Cluster status of node 'rabbit@ip-172-31-32-101' ...

[{nodes,[{disc,['rabbit@ip-172-31-32-101','rabbit@ip-172-31-45-110']}]},

{running_nodes,['rabbit@ip-172-31-45-110','rabbit@ip-172-31-32-101']},

{cluster_name,<<"rabbit@ip-172-31-45-110.us-east-2.compute.internal">>},

{partitions,[]}]