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 nel broker di messaggi. RabbitMQ supporta più protocolli di messaggistica e può essere facilmente distribuito 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, imposteremo un cluster RabbitMQ a tre nodi sul server Ubuntu 20.04.
Prerequisiti
- Tre server con Ubuntu 20.04.
- Su ciascun server è configurata una password di root.
Per iniziare
Prima di iniziare, dovrai aggiornare i pacchetti di sistema all'ultima versione. Puoi aggiornarli eseguendo il seguente comando su ciascun nodo:
apt-get update -y
Una volta aggiornati tutti i pacchetti, sarà necessario impostare il file /etc/hosts su ciascun nodo. Così 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 ciascun 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 ed è in esecuzione su ogni nodo. Ora puoi procedere al passaggio successivo.
Abilita 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 ciascun nodo:
rabbitmq-plugins enable rabbitmq_management
Dovresti vedere il seguente output:
Enabling plugins on node [email protected]: rabbitmq_management The following plugins have been configured: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch Applying plugin configuration to [email protected] The following plugins have been enabled: rabbitmq_management rabbitmq_management_agent rabbitmq_web_dispatch started 3 plugins.
Quindi, riavvia il servizio RabbitMQ per applicare le modifiche:
systemctl restart rabbitmq-server
Puoi verificare la porta in 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
Impostazione del 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 node1, esegui il comando seguente per copiare il file /var/lib/rabbitmq/.erlang.cookie negli altri nodi.
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
Successivamente, dovrai configurare node1 e node2 per unirsi al cluster node1.
Innanzitutto, riavvia il servizio RabbitMQ e arresta l'app con il comando seguente sia su node2 che su node3:
systemctl restart rabbitmq-server
rabbitmqctl stop_app
Sul nodo2, unisciti al cluster sul nodo1 eseguendo il comando seguente:
rabbitmqctl join_cluster [email protected]
Dovresti vedere il seguente output:
Clustering node [email protected] with [email protected]
Sul node2, avvia l'app con il seguente comando:
rabbitmqctl start_app
Dovresti vedere il seguente output:
Starting node [email protected] ... completed with 3 plugins.
Sul nodo3, unisciti al cluster sul nodo1 eseguendo il comando seguente:
rabbitmqctl join_cluster [email protected]
Dovresti vedere il seguente output:
Clustering node [email protected] with [email protected]
Sul node3, avvia l'app con il seguente comando:
rabbitmqctl start_app
Dovresti vedere il seguente output:
Starting node [email protected] ... completed with 3 plugins.
Al termine, controlla lo stato del cluster eseguendo il comando seguente su node1:
rabbitmqctl cluster_status
Dovresti vedere il seguente output:
Cluster status of node [email protected] ... Basics Cluster name: [email protected] Disk Nodes [email protected] [email protected] [email protected] Running Nodes [email protected] [email protected] [email protected] Versions [email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7 [email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7 [email protected]: RabbitMQ 3.8.2 on Erlang 22.2.7 Alarms (none) Network Partitions (none) Listeners Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: [email protected], interface: [::], port: 15672, protocol: http, purpose: HTTP API Node: [email protected], interface: [::], port: 25672, protocol: clustering, purpose: inter-node and CLI tool communication Node: [email protected], interface: [::], port: 5672, protocol: amqp, purpose: AMQP 0-9-1 and AMQP 1.0 Node: [email protected], 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 password "password" eseguendo il seguente comando su node1:
rabbitmqctl add_user hitesh password
Dovresti vedere il seguente output:
Adding user "hitesh" ...
Quindi, 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 sul nodo1 verrà automaticamente replicato su tutti i nodi del cluster.
Mirroring della coda di configurazione di RabbitMQ
Per impostazione predefinita, i contenuti di una coda si trovano su un singolo nodo. Quindi dovrai configurare il cluster "ha policy" per il mirroring della coda e la replica su tutti i nodi del cluster.
Per fare ciò, crea una policy ha denominata 'ha-all' che tutte le code nel cluster RabbitMQ eseguiranno il mirroring su tutti i nodi del cluster.
rabbitmqctl set_policy ha-all ".*" '{"ha-mode":"all"}'
Uscita:
Setting policy "ha-all" for pattern ".*" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...
Quindi, crea una politica ha denominata "ha-two" in cui tutti i nomi di coda 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"}'
Uscita:
Setting policy "ha-two" for pattern "^two\." to "{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}" with priority "0" for vhost "/" ...
Quindi, crea una politica 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 'nodo2' e 'nodo3' nel cluster.
rabbitmqctl set_policy ha-nodes "^nodes\." '{"ha-mode":"nodes","ha-params":["[email protected]", "[email protected]"]}'
Uscita:
Setting policy "ha-nodes" for pattern "^nodes\." to "{"ha-mode":"nodes","ha-params":["[email protected]", "[email protected]"]}" with priority "0" for vhost "/" ...
È ora possibile elencare tutti i criteri configurati eseguendo il comando seguente:
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":["[email protected]","[email protected]"]} 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 su Accedi pulsante. Dovresti vedere la dashboard di RabbitMQ nella schermata seguente:
Quindi, fai clic su "Amministratore ' e fai clic su 'Norme ' menù. Dovresti vedere tutte le policy di RabbitMQ che abbiamo creato nella schermata seguente:
Conclusione
Congratulazioni! hai impostato correttamente il cluster RabbitMQ a tre nodi sul server Ubuntu20.04. Il tuo cluster ora condivide le informazioni di configurazione, comprese le informazioni sulla topologia e sulla sicurezza su tutti i nodi.