Ricerca nel sito web

Come configurare il cluster RabbitMQ su Ubuntu 20.04


Questo tutorial esiste per queste versioni del sistema operativo

  • Ubuntu 22.04 (Jammy Jellyfish)
  • Ubuntu 20.04 (Focal Fossa)

Su questa pagina

  1. Prerequisiti
  2. Per iniziare
  3. Installa il server RabbitMQ
  4. Abilita i plug-in di gestione RabbitMQ
  5. Imposta il cluster RabbitMQ
  6. Imposta utente amministratore
  7. Mirroring della coda di installazione di RabbitMQ
  8. Accedi al cluster RabbitMQ
  9. Conclusione

RabbitMQ è un software broker di messaggistica gratuito, open source e multiprotocollo scritto nel linguaggio di programmazione Erlang. Un broker di messaggi viene utilizzato per archiviare i messaggi per un'applicazione. Quando un'applicazione invia dati a un'altra applicazione, l'app pubblica il messaggio sul broker di messaggi. RabbitMQ supporta più protocolli di messaggistica e può essere facilmente implementato in configurazioni distribuite. Il broker di messaggi funge da intermediario per varie applicazioni Web e viene utilizzato per ridurre i carichi e i tempi di consegna dell'applicazione Web.

In questo tutorial, configureremo un cluster RabbitMQ a tre nodi sul server Ubuntu 20.04.

Prerequisiti

  • Tre server con Ubuntu 20.04.
  • Su ogni server è configurata una password di root.

Iniziare

Prima di iniziare, dovrai aggiornare i tuoi pacchetti di sistema all'ultima versione. Puoi aggiornarli eseguendo il seguente comando su ogni nodo:

apt-get update -y

Una volta aggiornati tutti i pacchetti, sarà necessario configurare il file /etc/hosts su ogni nodo. Quindi possono comunicare tra loro tramite il nome host.

Modifica il file /etc/hosts su ogni nodo con il seguente comando:

nano /etc/hosts

Aggiungi le seguenti righe:

192.168.0.10 node1
192.168.0.11 node2
192.168.0.12 node3

Salva e chiudi il file quando hai finito. Successivamente, puoi procedere al passaggio successivo.

Installa il server RabbitMQ

Successivamente, dovrai installare il pacchetto RabbitMQ Server su ogni nodo. Puoi installarlo semplicemente eseguendo il seguente comando:

apt-get install rabbitmq-server -y

Una volta installato, avvia il servizio RabbitMQ e abilitalo all'avvio al riavvio del sistema con il seguente comando:

systemctl start rabbitmq-server
systemctl enable rabbitmq-server

Puoi anche verificare lo stato del servizio RabbitMQ con il seguente comando:

systemctl status rabbitmq-server

Dovresti ottenere il seguente output:

? rabbitmq-server.service - RabbitMQ Messaging Server
     Loaded: loaded (/lib/systemd/system/rabbitmq-server.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2020-07-21 06:25:07 UTC; 19min ago
   Main PID: 2565 (beam.smp)
     Status: "Initialized"
      Tasks: 87 (limit: 2353)
     Memory: 83.5M
     CGroup: /system.slice/rabbitmq-server.service
             ??2551 /bin/sh /usr/sbin/rabbitmq-server
             ??2565 /usr/lib/erlang/erts-10.6.4/bin/beam.smp -W w -A 64 -MBas ageffcbf -MHas ageffcbf -MBlmbcs 512 -MHlmbcs 512 -MMmcs 30 -P 1>
             ??2828 erl_child_setup 65536
             ??2921 inet_gethost 4
             ??2922 inet_gethost 4

Jul 21 06:24:58 node1 systemd[1]: Starting RabbitMQ Messaging Server...
Jul 21 06:25:07 node1 systemd[1]: rabbitmq-server.service: Supervising process 2565 which is not our child. We'll most likely not notice when >
Jul 21 06:25:07 node1 systemd[1]: Started RabbitMQ Messaging Server.

A questo punto, il server RabbitMQ è installato e in esecuzione su ciascun nodo. Ora puoi procedere al passaggio successivo.

Abilita i plug-in di gestione RabbitMQ

Il plug-in di gestione RabbitMQ fornisce un'API basata su HTTP che può essere utilizzata per monitorare e gestire nodi e cluster RabbitMQ tramite un browser Web. Per impostazione predefinita, è in esecuzione sulla porta TCP 15672.

Puoi abilitare il plug-in di gestione RabbitMQ eseguendo il seguente comando su ogni nodo:

rabbitmq-plugins enable rabbitmq_management

Dovresti vedere il seguente output:

Enabling plugins on node :
rabbitmq_management
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch
Applying plugin configuration to 
The following plugins have been enabled:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_web_dispatch

started 3 plugins.

Successivamente, riavvia il servizio RabbitMQ per applicare le modifiche:

systemctl restart rabbitmq-server

Puoi verificare la porta di ascolto con il seguente comando:

netstat -tunelp | grep 15672

Dovresti vedere il seguente output:

tcp        0      0 0.0.0.0:15672           0.0.0.0:*               LISTEN      109        23155      2565/beam.smp

Configura il cluster RabbitMQ

Per impostazione predefinita, il file /var/lib/rabbitmq/.erlang.cookie è lo stesso su ogni nodo. Per configurare il cluster RabbitMQ, dovrai copiare il file /var/lib/rabbitmq/.erlang.cookie dal node1 ad altri nodi.

Sul nodo1, eseguire il seguente comando per copiare il file /var/lib/rabbitmq/.erlang.cookie negli altri nodi.

scp /var/lib/rabbitmq/.erlang.cookie :/var/lib/rabbitmq/

Successivamente, dovrai configurare node1 e node2 per unirti al cluster node1.

Innanzitutto, riavvia il servizio RabbitMQ e arresta l'app con il seguente comando su node2 e node3:

systemctl restart rabbitmq-server
rabbitmqctl stop_app

Sul nodo2, unisciti al cluster sul nodo1 eseguendo il seguente comando:

rabbitmqctl join_cluster 

Dovresti vedere il seguente output:

Clustering node 

Sul nodo2, avvia l'app con il seguente comando:

rabbitmqctl start_app

Dovresti vedere il seguente output:

Starting node  ...
 completed with 3 plugins.

Sul nodo3, unisciti al cluster sul nodo1 eseguendo il seguente comando:

rabbitmqctl join_cluster 

Dovresti vedere il seguente output:

Clustering node 

Sul node3, avvia l'app con il seguente comando:

rabbitmqctl start_app

Dovresti vedere il seguente output:

Starting node  ...
 completed with 3 plugins.

Al termine, controlla lo stato del cluster eseguendo il seguente comando su node1:

rabbitmqctl cluster_status

Dovresti vedere il seguente output:

Cluster status of node  ...
Basics

Cluster name: 

Disk Nodes





Running Nodes





Versions

: RabbitMQ 3.8.2 on Erlang 22.2.7
: RabbitMQ 3.8.2 on Erlang 22.2.7
: RabbitMQ 3.8.2 on Erlang 22.2.7

Alarms

(none)

Network Partitions

(none)

Listeners

Node: , interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: , interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: , interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: , interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: , interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: , interface: [::], port: 15672, protocol: http, purpose: HTTP API
Node: , interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication
Node: , interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0
Node: , interface: [::], port: 15672, protocol: http, purpose: HTTP API

Feature flags

Flag: drop_unroutable_metric, state: disabled
Flag: empty_basic_get_metric, state: disabled
Flag: implicit_default_bindings, state: enabled
Flag: quorum_queue, state: enabled
Flag: virtual_host_metadata, state: enabled

Imposta utente amministratore

Successivamente, dovrai creare un nuovo utente amministratore per il server RabbitMQ ed eliminare l'utente ospite predefinito.

Puoi creare un nuovo utente chiamato \hitesh\ e la password \password\ eseguendo il seguente comando su node1:

rabbitmqctl add_user hitesh password

Dovresti vedere il seguente output:

Adding user "hitesh" ...

Successivamente, configura l'utente hitesh come amministratore con il seguente comando:

rabbitmqctl set_user_tags hitesh administrator

Dovresti vedere il seguente output:

Setting tags for user "hitesh" to [administrator] ...

Quindi, concedi all'utente hitesh il permesso di modificare, scrivere e leggere tutti i vhost.

rabbitmqctl set_permissions -p / hitesh ".*" ".*" ".*"

Dovresti vedere il seguente output:

Setting permissions for user "hitesh" in vhost "/" ...

Quindi, elimina l'utente ospite con il seguente comando:

rabbitmqctl delete_user guest

Dovresti ottenere il seguente comando:

Deleting user "guest" ...

Ora puoi elencare tutti gli utenti con il seguente comando:

rabbitmqctl list_users

Dovresti ottenere il seguente output:

Listing users ...
user	tags
hitesh	[administrator]

L'utente che hai creato su node1 verrà automaticamente replicato su tutti i nodi del cluster.

Mirroring della coda di configurazione RabbitMQ

Per impostazione predefinita, i contenuti di una coda si trovano su un singolo nodo. Sarà quindi necessario configurare il cluster di criteri ha per il mirroring e la replica delle code su tutti i nodi del cluster.

Per fare ciò, crea una policy ha denominata ha-all di cui tutte le code sul cluster RabbitMQ eseguiranno il mirroring su tutti i nodi del cluster.

rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'

Produzione:

Setting policy "ha-all" for pattern ".*" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

Successivamente, crea una politica ha denominata ha-two in cui tutti i nomi delle code iniziano con due. eseguirà il mirroring sui due nodi del cluster.

rabbitmqctl set_policy ha-two "^two\." '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

Produzione:

Setting policy "ha-two" for pattern "^two\." to "{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}" with priority "0" for vhost "/" ...

Successivamente, crea una policy di alta disponibilità denominata ha-nodes che conterrà tutte le code in cui il nome inizia con nodes. Eseguiremo il mirroring su due nodi specifici node2 e node3 nel cluster.

rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":[""]}'

Produzione:

Setting policy "ha-nodes" for pattern "^nodes\." to "{"ha-mode":"nodes","ha-params":[""]}" with priority "0" for vhost "/" ...

Ora puoi elencare tutti i criteri configurati eseguendo il seguente comando:

rabbitmqctl list_policies;

Dovresti vedere il seguente output:

Listing policies for vhost "/" ...
vhost	name	pattern	apply-to	definition	priority
/	ha-all	.*	all	{"ha-mode":"all"}	0
/	ha-two	^two\.	all	{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}	0
/	ha-nodes	^nodes\.	all	{"ha-mode":"nodes","ha-params":[""]}	0

Una volta terminato, puoi procedere al passaggio successivo.

Accedi al cluster RabbitMQ

Ora puoi accedere all'interfaccia web di RabbitMQ digitando l'indirizzo IP di qualsiasi nodo nel tuo browser web con la porta 15672 come http://192.168.0.10:15672/. Dovresti vedere la pagina di accesso di RabbitMQ:

Fornisci il nome utente e la password dell'amministratore e fai clic sul pulsante Accedi. Dovresti vedere la dashboard RabbitMQ nella seguente schermata:

Successivamente, fai clic sul menu della scheda Amministratore e fai clic sul menu Criteri. Dovresti vedere tutte le policy RabbitMQ ha che abbiamo creato nella seguente schermata:

Conclusione

Congratulazioni! hai configurato correttamente il cluster RabbitMQ a tre nodi sul server Ubuntu20.04. Il tuo cluster ora condivide le informazioni di configurazione, tra cui la topologia e le informazioni di sicurezza su tutti i nodi.