Clustering RabbitMQ no CentOS 7

O RabbitMQ é um intermediário de mensagens de código aberto que suporta AMQP, STOMP e outras tecnologias de comunicação. É amplamente utilizado em aplicativos empresariais e arquiteturas modernas de microsserviços, onde atua como um canal de mensagens assíncronas entre diferentes microsserviços. Este guia descreve como você pode agrupar o RabbitMQ em vários servidores CentOS 7 para formar um intermediário de mensagens de alta disponibilidade. Neste tutorial, um servidor atuará como servidor mestre e os outros servidores atuarão como servidores espelho, caso o servidor mestre fique indisponível.

Pré-requisitos

Configure o firewall

O firewall do CentOS, ( firewalld), não permite nenhum tráfego recebido por padrão. Para disponibilizar o RabbitMQ para outros sistemas dentro e fora da rede e para nos permitir acessar o console de gerenciamento, primeiro precisamos abrir algumas portas.

O console de gerenciamento de interface da web do RabbitMQ escuta por padrão na porta 15672. Gostaríamos de disponibilizar publicamente o console de gerenciamento para que possamos acessá-lo em nosso computador. Portanto, instruiremos firewallda abrir permanentemente a porta 15672na zona pública (que é a zona padrão e ativa em uma instância do Vultr).

sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

Os nós do RabbitMQ precisam ser capazes de se comunicar. Gostaríamos de abrir as portas necessárias, mas apenas através da rede interna. Não queremos que ninguém na internet possa administrar ou entrar em contato diretamente com nossos servidores. Os comandos a seguir assumem que nossos servidores estão na 192.168.0.100/24sub - rede.

O primeiro serviço é o epmdserviço de descoberta de pares que escuta por padrão na porta 4369.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="4369" accept'

Para comunicação entre nós e CLI, o RabbitMQ precisa poder se comunicar pela porta 25672.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="25672" accept'

As ferramentas CLI se comunicam no intervalo de portas 35672-35682.

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="35672-35682" accept'

Se seus aplicativos precisarem do protocolo AMQP, você também precisará abrir portas 5671e 5672. Se você precisar se comunicar com outro protocolo, poderá encontrar as informações necessárias sobre os requisitos de rede do RabbitMQ na documentação oficial do RabbitMQ .

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5672" accept'

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
  rule family="ipv4"
  source address="192.168.0.100/24"
  port protocol="tcp" port="5671" accept'

Agora que firewalldestá configurado, precisamos instruí-lo a recarregar a configuração.

sudo firewall-cmd --reload

Repita as etapas desta seção em todos os servidores.

Instalar rabbitmqadmin

O plug-in de gerenciamento vem com uma ferramenta Python chamada rabbitmqadminque pode ser facilmente instalada no sistema quando o plug-in de gerenciamento é ativado.

sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin

Configurar DNS

Você deve usar os nomes de host do servidor para identificar os servidores durante o armazenamento em cluster. Por padrão, os servidores não têm registro DNS atribuído e a conexão falhará. Para superar isso rapidamente, adicione o nome do host principal e espelhado ao /etc/hostsarquivo usando seu editor favorito.

Por exemplo, o arquivo hosts do seu mestre pode se parecer com o seguinte. Observe os dois últimos registros, que permitem que os servidores se identifiquem pelo nome do host. Certifique-se de alterar os endereços IP por conta própria.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 guest
::1       guest

127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1       YOUR_MASTER_SERVER_HOST_NAME


192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME

Agrupe os nós

Um pré-requisito de importação para permitir que os nós se unam é que o cookie Erlang de todos os nós seja idêntico. Por padrão, cada nó receberá um cookie Erlang exclusivo, portanto, você deve reconfigurá-lo em todos os nós.

O comando a seguir definirá o cookie Erlang como " WE<3COOKIES", mas fique à vontade para alterar isso ao seu gosto. Faça isso em todos os servidores.

sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"

Reinicie o RabbitMQ em todos os servidores para garantir que o cookie Erlang seja recarregado corretamente.

sudo systemctl restart rabbitmq-server.service

Execute os seguintes comandos em todos os servidores, exceto no servidor mestre. Isso permitirá que os nós ingressem no servidor principal e formem um cluster.

sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app

Verifique se os nós ingressaram no cluster executando o seguinte comando.

sudo rabbitmqctl cluster_status

Todos os seus nós aparecerão na seção nodese running_nodesda saída. A partir de agora, você não precisará mais repetir as etapas em cada servidor; a configuração será espelhada automaticamente para os outros nós.

Crie uma política de alta disponibilidade

Agora que temos um cluster de nós RabbitMQ, podemos usá-lo para fazer filas e trocas de alta disponibilidade configurando uma nova política. Esta política pode ser adicionada através do RabbitMQ Management Console ou usando a interface da linha de comandos.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'

A lista a seguir explica o significado de cada parte do comando.

  • -p "/": Use esta política no "/"vhost (o padrão após a instalação)
  • --priority 1: A ordem na qual aplicar políticas
  • --apply-to "all": Pode ser "queues", "exchanges"ou"all"
  • ha: O nome que damos à nossa política
  • ".*": A expressão regular usada para decidir a quais filas ou trocas essa política é aplicada. ".*"vai combinar com qualquer coisa
  • '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}': A representação JSON da política. Este documento descreve o que queremos - exatamente 2 nós nos quais os dados são sincronizados automaticamente

Em resumo, essa política garantirá que sempre teremos 2 cópias dos dados em uma fila ou troca, desde que tenhamos pelo menos 2 nós em funcionamento. Se você tiver mais nós, poderá aumentar o valor de ha-params. Um quorum ( N/2 + 1), de nós é recomendado. Ter mais cópias de seus dados resultaria em maior uso de disco, E / S e rede, o que poderia resultar em um desempenho degradado.

Se você deseja espelhar os dados para todos os nós no cluster, poderá usar o seguinte documento JSON.

'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'

Se você deseja espelhar os dados apenas para nós específicos (por exemplo: node-1e node-2), use o seguinte.

'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'

Você pode alterar a expressão regular para atribuir políticas diferentes a diferentes filas. Digamos que temos os seguintes três nós:

  • rabbit @ master
  • rabbit @ client-ha
  • coelho @ produto-ha

Podemos então criar duas políticas que resultarão em filas com um nome que começa com "cliente" a ser espelhado no rabbit@client-hanó e todas as filas que têm um nome que começa com "produto" a serem espelhadas no rabbit@product-hanó.

sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}

Uma pequena observação aqui: filas exclusivas nunca são espelhadas ou duráveis ​​no RabbitMQ, mesmo que essa política corresponda a essas filas. Filas exclusivas são destruídas automaticamente quando um cliente é desconectado e, como tal, não seria útil replicá-lo em outro servidor. Se o servidor falhar, o cliente será desconectado e a fila será destruída automaticamente. Instâncias espelhadas também seriam destruídas.

Testando a instalação

Para testar a configuração em cluster, podemos criar uma nova fila usando a interface da linha de comandos através do console de gerenciamento.

sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true

Isto irá criar uma fila durável no padrão /vhost com o nome my-ha-queue.

Execute o comando a seguir e verifique na saída que a fila possui nossa política 'ha' atribuída e possui pid's no mestre e no nó espelho.

sudo rabbitmqctl list_queues name policy state pid slave_pids

Agora podemos publicar uma mensagem na fila do nó principal e parar o RabbitMQ no nó principal.

sudo rabbitmqadmin -u user_name -p password  publish routing_key=my-ha-queue payload="hello world"
sudo systemctl rabbitmqctl shutdown

Agora recupere conectando-se ao nó do espelho.

 sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue

Finalmente, podemos reiniciar nosso nó principal.

sudo systemctl start rabbitmq-server.service

Excluir o usuário convidado

Como mencionado anteriormente, o RabbitMQ cria automaticamente um usuário convidado com uma senha de convidado padrão. Seria uma prática recomendada deixar esse usuário padrão em um sistema exposto publicamente.

sudo rabbitmqctl delete_user guest


Leave a Comment

Configure sua própria rede privada com o OpenVPN

Configure sua própria rede privada com o OpenVPN

O Vultr oferece uma incrível conectividade de rede privada para servidores executando no mesmo local. Mas às vezes você quer dois servidores em países diferentes

Como instalar e configurar o CyberPanel no servidor CentOS 7

Como instalar e configurar o CyberPanel no servidor CentOS 7

Usando um sistema diferente? Introdução O CyberPanel é um dos primeiros painéis de controle do mercado, tanto de código aberto quanto de OpenLiteSpeed. What thi

Instale o eSpeak no CentOS 7

Instale o eSpeak no CentOS 7

Usando um sistema diferente? O ESpeak pode gerar arquivos de áudio de conversão de texto em fala (TTS). Isso pode ser útil por vários motivos, como criar seu próprio Turim

Monitore seus dispositivos usando o LibreNMS no CentOS 7

Monitore seus dispositivos usando o LibreNMS no CentOS 7

Usando um sistema diferente? O LibreNMS é um sistema de monitoramento de rede de código aberto completo. Ele usa o SNMP para obter os dados de diferentes dispositivos. Uma variedade

Como usar o Sudo no Debian, CentOS e FreeBSD

Como usar o Sudo no Debian, CentOS e FreeBSD

Usar um usuário sudo para acessar um servidor e executar comandos no nível raiz é uma prática muito comum entre o Linux e o Unix Systems Administrator. O uso de um sud

Como instalar o RabbitMQ no CentOS 7

Como instalar o RabbitMQ no CentOS 7

Usando um sistema diferente? O RabbitMQ é um intermediário de mensagens de código aberto amplamente usado, escrito na linguagem de programação Erlang. Como um middleware orientado a mensagens

Configurar o Nginx-RTMP no CentOS 7

Configurar o Nginx-RTMP no CentOS 7

Usando um sistema diferente? O RTMP é ótimo para veicular conteúdo ao vivo. Quando o RTMP é emparelhado com o FFmpeg, os fluxos podem ser convertidos em várias qualidades. Vultr i

Como instalar o Gradle no CentOS 7

Como instalar o Gradle no CentOS 7

Usando um sistema diferente? Gradle é um conjunto de ferramentas de automação de compilação de código aberto e gratuito baseado nos conceitos do Apache Ant e Apache Maven. Gradle fornece

Instale um servidor FTP com ProFTPd no CentOS 6 ou CentOS 7

Instale um servidor FTP com ProFTPd no CentOS 6 ou CentOS 7

Usando um sistema diferente? Neste guia, veremos como configurar um servidor FTP (ProFTPd) para transferir arquivos entre o seu PC e o seu servidor.

Instalando o Netdata no CentOS 7

Instalando o Netdata no CentOS 7

Usando um sistema diferente? O Netdata é uma estrela em ascensão no campo do monitoramento de métricas do sistema em tempo real. Comparado com outras ferramentas do mesmo tipo, o Netdata:

Como instalar o Apache Cassandra 3.11.x no CentOS 7

Como instalar o Apache Cassandra 3.11.x no CentOS 7

Usando um sistema diferente? O Apache Cassandra é um sistema de gerenciamento de banco de dados NoSQL gratuito e de código aberto, projetado para fornecer escalabilidade, alta

Como instalar um servidor Just Cause 2 (JC2-MP) no CentOS 7

Como instalar um servidor Just Cause 2 (JC2-MP) no CentOS 7

Neste tutorial, aprenda como configurar um servidor multiplayer Just Cause 2. Pré-requisitos Verifique se o sistema está totalmente atualizado antes de começarmos

Como instalar o servidor Starbound no CentOS 7

Como instalar o servidor Starbound no CentOS 7

Usando um sistema diferente? Neste tutorial, explicarei como configurar um servidor Starbound no CentOS 7. Pré-requisitos Você precisa ser o proprietário deste jogo

Instalando e configurando o ZNC no CentOS 7

Instalando e configurando o ZNC no CentOS 7

O ZNC é um segurança IRC gratuito e de código aberto que permanece permanentemente conectado a uma rede para que os clientes possam receber mensagens enviadas enquanto estiverem offline. Thi

Como instalar o Django no CentOS 7

Como instalar o Django no CentOS 7

O Django é uma estrutura Python popular para escrever aplicativos da web. Com o Django, você pode criar aplicativos mais rapidamente, sem reinventar a roda. Se você quiser você

Como instalar o CMS de outubro no CentOS 7

Como instalar o CMS de outubro no CentOS 7

Outubro é um sistema de gerenciamento de conteúdo de código aberto baseado no Laravel PHP Framework. Com uma interface elegante e uma arquitetura modular concisa

Como configurar a autenticação de dois fatores (2FA) para SSH no CentOS 6 usando o Google Authenticator

Como configurar a autenticação de dois fatores (2FA) para SSH no CentOS 6 usando o Google Authenticator

Após alterar a porta SSH, configurar a batida na porta e fazer outros ajustes para a segurança SSH, talvez haja mais uma maneira de protegê-lo

Como instalar o MyCLI no Linux (CentOS, Debian, Fedora e Ubuntu)

Como instalar o MyCLI no Linux (CentOS, Debian, Fedora e Ubuntu)

Introdução O MyCLI é um cliente de linha de comando para MySQL e MariaDB que permite concluir automaticamente e ajuda na sintaxe de seus comandos SQL. MyCL

Como instalar o Directus 6.4 CMS em um CentOS 7 LAMP VPS

Como instalar o Directus 6.4 CMS em um CentOS 7 LAMP VPS

Usando um sistema diferente? O Directus 6.4 CMS é um sistema de gerenciamento de conteúdo sem cabeça (CMS) poderoso e flexível, gratuito e de código aberto que fornece

Como instalar o Reader Self 3.5 RSS Reader em um CentOS 7 LAMP VPS

Como instalar o Reader Self 3.5 RSS Reader em um CentOS 7 LAMP VPS

Usando um sistema diferente? O Reader Self 3.5 é um leitor de RSS auto-hospedado, simples e flexível, gratuito e de código aberto, e uma alternativa ao Google Reader. Leitor Sel

A IA pode lutar contra o aumento do número de ataques de ransomware

A IA pode lutar contra o aumento do número de ataques de ransomware

Os ataques de ransomware estão aumentando, mas a IA pode ajudar a lidar com os vírus de computador mais recentes? AI é a resposta? Leia aqui para saber se é AI boone ou bane

ReactOS: Este é o futuro do Windows?

ReactOS: Este é o futuro do Windows?

ReactOS, um sistema operacional de código aberto e gratuito está aqui com a versão mais recente. Será que ela pode atender às necessidades dos usuários modernos do Windows e derrubar a Microsoft? Vamos descobrir mais sobre esse estilo antigo, mas uma experiência de sistema operacional mais recente.

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

Fique conectado por meio do aplicativo WhatsApp Desktop 24 * 7

O Whatsapp finalmente lançou o aplicativo Desktop para usuários de Mac e Windows. Agora você pode acessar o Whatsapp do Windows ou Mac facilmente. Disponível para Windows 8+ e Mac OS 10.9+

Como a IA pode levar a automação de processos ao próximo nível?

Como a IA pode levar a automação de processos ao próximo nível?

Leia isto para saber como a Inteligência Artificial está se tornando popular entre as empresas de pequena escala e como está aumentando as probabilidades de fazê-las crescer e dar vantagem a seus concorrentes.

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

A atualização do suplemento do macOS Catalina 10.15.4 está causando mais problemas do que resolvendo

Recentemente, a Apple lançou o macOS Catalina 10.15.4, uma atualização suplementar para corrigir problemas, mas parece que a atualização está causando mais problemas, levando ao bloqueio de máquinas mac. Leia este artigo para saber mais

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

13 Ferramentas de Extração de Dados Comerciais de Big Data

O que é um sistema de arquivos de registro no diário e como ele funciona?

O que é um sistema de arquivos de registro no diário e como ele funciona?

Nosso computador armazena todos os dados de uma maneira organizada conhecida como sistema de arquivos Journaling. É um método eficiente que permite ao computador pesquisar e exibir arquivos assim que você clicar em search.https: //wethegeek.com/? P = 94116 & preview = true

Singularidade tecnológica: um futuro distante da civilização humana?

Singularidade tecnológica: um futuro distante da civilização humana?

À medida que a ciência evolui em um ritmo rápido, assumindo muitos de nossos esforços, os riscos de nos sujeitarmos a uma singularidade inexplicável também aumentam. Leia, o que a singularidade pode significar para nós.

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

Uma visão sobre 26 técnicas analíticas de Big Data: Parte 1

O impacto da inteligência artificial na saúde 2021

O impacto da inteligência artificial na saúde 2021

A IA na área da saúde deu grandes saltos nas últimas décadas. Portanto, o futuro da IA ​​na área da saúde ainda está crescendo dia a dia.