GNU/Linux >> Linux Esercitazione >  >> Linux

Come configurare il cluster RabbitMQ su Ubuntu/Debian Linux

Vuoi ridurre i carichi di lavoro e i tempi di consegna delle tue applicazioni? Risparmiati il ​​mal di testa e configura un cluster RabbitMQ per la tua applicazione!

In questo tutorial imparerai come configurare il cluster RabbitMQ e avere un cluster RabbitMQ completamente funzionale con supporto ad alta disponibilità.

Pronto? Continua a leggere e inizia a ridurre i carichi di lavoro!

Prerequisiti

Per seguire questo tutorial, assicurati di disporre dei seguenti requisiti:

  • Due o più server Linux nella stessa rete:questo tutorial utilizza tre server Debian 11 denominati node01, node02 e node03.
  • Sudo privilegi di root o accesso all'account root/amministratore.

Configurazione di un file host

Il cluster RabbitMQ funziona con il nome host o il dominio locale. Devi assicurarti che ogni nome host si risolva nell'indirizzo IP del server modificando /etc/hosts file.

Apri il /etc/hosts file su tutti i server utilizzando il tuo editor di testo preferito e aggiungi le seguenti righe al file.

Ricorda che la modifica del file /etc/hosts richiede un privilegio sudo.

Il formato di /etc/hosts la configurazione è IP-address hostname .

Sostituisci i valori seguenti con gli indirizzi IP e i nomi host dei tuoi server, salva le modifiche ed esci dall'editor.

# /etc/hosts file RabbitMQ Servers
172.16.1.20     node01
172.16.1.21     node02
172.16.1.22     node03

Ora esegui il ping comando seguente per verificare che ogni nome host si risolva nell'indirizzo IP corretto del server. Ogni -c 3 l'opzione rende ping richiede tre volte, quindi termina le richieste.

# ping node01 node02 and node03
ping -c 3 node01
ping -c 3 node02
ping -c 3 node03

Se la tua configurazione è corretta, vedrai che ogni nome host è stato risolto nell'indirizzo IP corretto del server, come mostrato di seguito.

Installazione di RabbitMQ su tutti i server

Ora che hai configurato il /etc/hosts file su tutti i server, è ora di installare i pacchetti RabbitMQ su tutti i server (nodo01, nodo02 e nodo03). Puoi installare RabbitMQ dal repository di distribuzione ufficiale per la maggior parte delle distribuzioni Linux.

Al momento della scrittura, il repository Debian e Ubuntu fornisce l'ultima versione stabile di RabbitMQ 3.8.9.

1. Esegui apt comando seguente per aggiornare tutti gli indici dei pacchetti del tuo sistema.

sudo apt update

2. Quindi, esegui il seguente apt install comando per installare RabbitMQ (rabbitmq-server ) sul tuo sistema.

Una volta completata l'installazione, il rabbitmq-server il servizio viene avviato e abilitato automaticamente sul tuo sistema.

sudo apt install rabbitmq-server -y

3. Infine, esegui il comando seguente per verificare il rabbitmq-server lo stato del servizio.

sudo systemctl status rabbitmq-server

Di seguito, puoi vedere che il servizio del server RabbitMQ è attivo (in esecuzione) e abilitato . Di conseguenza, i servizi si avviano automaticamente all'avvio/avvio del sistema.

Inoltre, puoi anche verificare la versione di RabbitMQ sul tuo sistema usando il comando seguente.

sudo rabbitmq-diagnostics server_version

La versione di RabbitMQ installata è 3.8.9 , come mostrato di seguito, ma il tuo potrebbe essere diverso.

Configurazione del cluster RabbitMQ

Dopo aver installato RabbitMQ, è il momento di configurare il cluster RabbitMQ. L'uso del cluster RabbitMQ previene la perdita di dati e la perdita tra le tue applicazioni. Il cluster RabbitMQ fornisce replica e disponibilità elevata su tutti i server.

RabbitMQ è un'applicazione scritta in Erlang e, per impostazione predefinita, fornisce un .erlang.cookie nella directory dei dati di RabbitMQ (/var/lib/rabbitmq) .

Per creare un cluster RabbitMQ, devi configurare un .erlang.cookie file in ogni server con lo stesso contenuto e deve essere di proprietà del rabbitmq utente e gruppo.

1. Sul server node01, eseguire il comando seguente per verificare i file disponibili nella directory dei dati RabbitMQ (/var/lib/rabbitmq ). Il comando quindi stampa il contenuto del .erlang.cookie file.

# List files and directories on /var/lib/rabbitmq
ls -lah /var/lib/rabbitmq

# Print content of the file .erlang.cookie
cat /var/lib/rabbitmq/.erlang.cookie

Copia l'output (UXPBSDKHLRMGJSOJVEAN ) alla tua nota perché aggiungerai questo output ai server node02 e node03 nei passaggi seguenti. Tieni presente che potresti ottenere un output diverso del .erlang.cookie. file rispetto a quanto mostrato di seguito.

2. Quindi, passa al server node02 ed esegui il seguente comando su stop il rabbitmq servizio.

sudo systemctl stop rabbitmq-server

3. Modifica il /var/lib/rabbitmq/.erlang.cookie file nel tuo editor di testo preferito. Sostituisci il contenuto originale con quello annotato nel passaggio uno, salva le modifiche ed esci dall'editor.

# content of .erlang.cookie from node01
UXPBSDKHLRMGJSOJVEAN

4. Ora, esegui il comando seguente per avviare rabbitmq-server servizio.

sudo systemctl start rabbitmq-server

5. Passa al server node03 e ripeti i passaggi (da due a quattro) per modificare il /var/lib/rabbitmq/.erlang.cookie file.

6. Esegui il seguente rabbitmqctl comandi sui server node02 e node03 per aggiungerli al cluster RabbitMQ (node01).

# Stop RabbitMQ application
sudo rabbitmqctl stop_app

# Join the RabbitMQ node01
sudo rabbitmqctl join_cluster [email protected]

# Start the RabbitMQ application again
sudo rabbitmqctl start_app

Di seguito, puoi vedere che il server node02 è in cluster con il cluster RabbitMQ (node01) e lo stesso vale per il server node03.

7. Infine, esegui il rabbitmqctl comando seguente per verificare lo stato del cluster RabbitMQ. Puoi eseguirlo da qualsiasi server (nodo01, nodo02 o nodo03).

sudo rabbitmqctl cluster_status

Puoi vedere nell'output sotto il nome del cluster ([email protected] ) e i nodi in esecuzione.

Configurazione di un utente amministratore per RabbitMQ

Dopo aver configurato il cluster RabbitMQ, creerai un nuovo utente amministratore per RabbitMQ ed eliminerai l'utente guest predefinito. L'utente amministratore RabbitMQ dispone dell'autorizzazione per configurare, leggere e scrivere qualsiasi entità disponibile nel cluster RabbitMQ.

1. Passa al server node01 ed esegui il rabbitmqctl comando seguente per creare un nuovo utente chiamato admin con la password impostata come AdminPassRabbitMQ . Puoi impostare il nome utente e la password preferiti, ma assicurati di impostare una password complessa.

sudo rabbitmqctl add_user admin AdminPassRabbitMQ

2. Quindi, esegui il seguente comando per impostare (set_user_tags ) il nuovo utente (admin ) come administrator per il cluster RabbitMQ.

sudo rabbitmqctl set_user_tags admin administrator

3. Esegui il comando seguente su set_permissions al admin utente con quanto segue:

  • Consente (-p / ) admin utente per accedere a tutti i vhost sul cluster RabbitMQ.
  • Primo ".*" – Consente all'utente di configurare i permessi per ogni entità e vhost.
  • Secondo ".*" – Abilita l'autorizzazione di scrittura per l'utente per ogni entità e vhost.
  • Terzo ".*" – Abilita l'autorizzazione di lettura per l'utente per ogni entità e vhost.
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

4. Ora, esegui il seguente comando per eliminare (delete_user ) l'utente predefinito (guest ) dal cluster RabbitMQ.

sudo rabbitmqctl delete_user guest

5. Infine, esegui il comando seguente per elencare tutti gli utenti disponibili (list_users ) sul cluster RabbitMQ.

sudo rabbitmqctl list_users

Di seguito puoi vedere un solo utente (admin) . Puoi anche verificare gli utenti di altri server (node02 e node03) e otterrai lo stesso output.

Creazione di un host virtuale e di un nuovo utente amministratore su RabbitMQ

Hai impostato il tuo cluster RabbitMQ e creato un utente amministratore su RabbitMQ. Ma ora creerai un host virtuale (vhost) e utenti su RabbitMQ, in modo che la tua applicazione possa connettersi a RabbitMQ.

Il concetto di base di un host virtuale (vhost) su RabbitMQ è simile a quello su Apache o sui blocchi server su NGINX. Ogni vhost ha entità come scambi, code, binding, autorizzazioni utente, autenticazione, ecc.

1. Esegui rabbitmqctl comando seguente per creare un nuovo host virtuale (add_vhost ) denominato app-qa1 .

sudo rabbitmqctl add_vhost app-qa1

2. Quindi, esegui i seguenti comandi per creare un nuovo utente (add_user ) denominato alice con la password AlicePassRabbitMQ e tagga l'utente come administrator . Puoi impostare il nome utente e la password come preferisci.

# create new user alice
sudo rabbitmqctl add_user alice AlicePassRabbitMQ

# set a tag administrator for user alice
sudo rabbitmqctl set_user_tags alice administrator

3. Esegui il comando seguente per impostare le autorizzazioni per l'utente alice per gestire vhost app-qa1 . Queste autorizzazioni consentono all'utente alice per configurare, leggere e scrivere tutte le entità sotto il vhost app-qa1 .

# set up permission for user alice
sudo rabbitmqctl set_permissions alice --vhost app-qa1 ".*" ".*" ".*"

4. Infine, esegui ogni comando di seguito per elencare i vhost disponibili (list_vhosts ) sul cluster RabbitMQ e sulle autorizzazioni (list_user_permissions ) del nuovo utente amministratore (alice ).

# check available vhosts on RabbitMQ
sudo rabbitmqctl list_vhosts

# check permissions for user alice
sudo rabbitmqctl list_user_permissions alice

Creazione di scambi, code e binding su RabbitMQ

Il tuo host virtuale e l'utente amministratore sono impostati, ma sono tutto ciò di cui hai bisogno per far funzionare la tua applicazione? Dovrai comunque creare entità, come scambi, code e collegamenti su RabbitMQ. Tali entità sono necessarie per far funzionare la tua applicazione con RabbitMQ.

1. Esegui il seguente rabbitmqadmin comando per creare un nuovo scambio su RabbitMQ chiamato test_exchange sotto il app-qa1 vhost e l'utente alice . Puoi specificare il tipo di scambi con il type opzione, che è direct per questa demo.

# Create new exchange test_exchange
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare exchange name=test_exchange type=direct

2. Quindi, esegui ogni comando seguente per creare nuove code su RabbitMQ. In questa demo creerai il classic predefinito (test_classic ) e il quorum coda denominata test_quorum .

# create quorum queue with option queue_type=quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_quorum durable=true queue_type=quorum

# create default classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare queue name=test_classic durable=true

3. Esegui i comandi seguenti per creare l'associazione per entrambi test_classic e test_quorum code. Ogni associazione ha routing_key diversi ma funziona ancora sullo stesso scambio (test_exchange ).

# create binding for test_quorum
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_quorum" routing_key="test_routing_key_quorum"

# create binding for test_classic
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare binding source="test_exchange" destination_type="queue" destination="test_classic" routing_key="test_routing_key_classic"

4. Ora, esegui i seguenti comandi su publish il hello, world messaggio al test_exchange . Assicurati di impostare il routing_key. corretto

# publish message for the test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_quorum payload="hello world, Quorum Queue"

# publish message for the test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 publish exchange=test_exchange routing_key=test_routing_key_classic payload="hello world, Classic Queue"

5. Infine, esegui il seguente comando su get il hello, world messaggio da test_quorum e test_classic code.

# retrieve the message from test_quorum queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum

# retrieve the message from test_classic queue
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic

Come mostrato di seguito, saprai che le code funzionano se ricevi il hello, world messaggio dal test_quorum e test_classic code.

Abilitazione del plug-in di gestione RabbitMQ

Finora sei riuscito a lavorare su RabbitMQ tramite un ambiente a riga di comando. Ma forse preferisci una GUI per interagire con i server e i cluster RabbitMQ. In tal caso, dovrai abilitare il plug-in di gestione RabbitMQ.

Il plug-in di gestione RabbitMQ fornisce un'interfaccia utente di gestione basata sul Web in esecuzione sulla porta predefinita 15672 e lo strumento di gestione della riga di comando [rabbitmqadmin]

Esegui il rabbitmq-plugins comando seguente su tutti i server (nodo01, nodo02 e nodo03) per abilitare rabbitmq_management collegare. Questo comando abilita automaticamente altri plugin necessari, come rabbitmq_management_agent e rabbitmq_web_dispatch .

sudo rabbitmq-plugins enable rabbitmq_management

Di seguito è riportato l'output simile che vedrai sullo schermo del tuo terminale.

Ora apri il tuo browser web e vai all'indirizzo IP del tuo server seguito dalla porta 15672 (http://172.16.1.20:15672/) per accedere all'interfaccia di gestione basata sul Web di RabbitMQ. Porta 15672 viene aperto automaticamente quando abiliti il ​​plug-in di gestione RabbitMQ.

Accedi alla pagina di accesso dell'interfaccia utente di gestione di RabbitMQ con l'utente alice e password AlicePassRabbitMQ .

Nella dashboard di RabbitMQ, vedrai tutti i nodi disponibili nel cluster RabbitMQ.

Di seguito, puoi vedere tutti i nodi del cluster RabbitMQ in esecuzione senza problemi.

Verifica dell'elevata disponibilità della coda del quorum

In precedenza hai verificato che i nodi nel cluster RabbitMQ siano in esecuzione e le code funzionino, ed è fantastico. Ma cosa succede se uno dei nodi si spegne o si guasta? Verifica che la coda test_quorum fornisca disponibilità elevata e replica tra i server.

1. Nella dashboard di RabbitMQ, fai clic su Code scheda per accedere alle code disponibili nel cluster RabbitMQ.

Di seguito puoi vedere il test_classic coda e test_quorum coda.

2. Quindi, fai clic su test_classic coda per ottenere le sue informazioni dettagliate.

Come vedi sotto, il test_classic la coda è in esecuzione su [email protected] senza mirror/replica. Quando il nodo [email protected] è inattivo, il test_classic la coda diventa non disponibile.

3. Torna alla Coda menu, ma fai clic su test_quorum fare la fila questa volta.

Di seguito puoi vedere il test_quorum la coda è disponibile su [email protected] e fornisce anche mirror ad altri nodi del cluster. Questa configurazione manterrà il test_quorum coda in esecuzione anche quando node01 è inattivo.

4. Ora esegui il comando seguente per spegnere/spegnere node01 server. Con il server node01 inattivo.

# turnoff node01
sudo poweroff

5. Passa al server node02 ed esegui il comando seguente per controllare RabbitMQ cluster_status

# checking RabbitMQ cluster status
sudo rabbitmqctl cluster_status

Vedrai gli attuali Nodi in esecuzione sul cluster RabbitMQ sono node02 e nodo03 .

6. Quindi, esegui i seguenti comandi per ricevere il messaggio "hello world" dal test_classic coda. Questo comando effettuerà cinque richieste al test_classic coda usando il ciclo Bash.

# setup temporary environment variable CLASSIC
export CLASSIC="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_classic"

# retrieve message from `test_classic` queue 5 times using bash loop
for i in {1..5}; do $CLASSIC; done

Riceverai il Non trovato output, come mostrato di seguito, perché il server node01 è inattivo.

7. Infine, esegui i seguenti comandi per recuperare il messaggio "hello world" dal test_quorum coda.

Simile al test della coda test_classic, questo comando effettua cinque richieste al test_quorum coda, ma questa volta riceverai il messaggio "hello world" anche il node01 è giù. Come mai? Il test_quorum la coda viene automaticamente replicata/rispecchiata sui server node02 o node03.

# setup temporary environment variable QUORUM
export QUORUM="sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 get queue=test_quorum"

# retrieve message from `test_quorum` queue 5 times using bash loop
for i in {1..5}; do $QUORUM; done

Conclusione

Questo tutorial mirava ad aiutarti nel processo di configurazione del cluster RabbitMQ su sistemi Debian/Ubuntu Linux. Hai anche imparato l'amministrazione di base del server RabbitMQ e come creare code che supportano l'alta disponibilità su RabbitMQ.

A questo punto hai impostato un cluster RabbitMQ completo. Allora, qual è il prossimo? Forse impari a implementare RabbitMQ nella tua applicazione?


Linux
  1. Come configurare un server LAMP Ubuntu/Debian

  2. Linux:come impostare l'affinità del processore di un processo su Linux?

  3. Come disabilitare Ipv6 su Ubuntu, Linux Mint, Debian

  4. Come configurare MySQL Cluster su Ubuntu

  5. Come impostare l'interfaccia di rete preferita in Linux

Come impostare o modificare il nome host in Debian Linux

Come installare il caricatore IonCube su Ubuntu Linux

Come configurare PowerDNS su Ubuntu Linux

Come configurare il firewall UFW su Linux

Come modificare il nome host su Debian Linux

Come connettersi al WiFi dal terminale in Ubuntu Linux