een RabbitMQ Cluster opzetten op Ubuntu 20.04

RabbitMQ is een gratis, open-source en multi-protocol messaging broker software, geschreven in de programmeertaal Erlang. Een message broker wordt gebruikt om berichten voor een toepassing op te slaan. Wanneer een toepassing gegevens naar een andere toepassing stuurt, publiceert de toepassing het bericht op de berichtenmakelaar. RabbitMQ ondersteunt meerdere berichtenprotocollen en kan gemakkelijk in een gedistribueerde configuratie worden ingezet. De message broker fungeert als tussenpersoon voor verschillende web-applicaties en wordt gebruikt om de belasting en de levertijd van web-applicaties te verminderen.

In deze handleiding gaan we een RabbitMQ Cluster met drie knooppunten opzetten op een Ubuntu 20.04 server.

Vereisten

  • Drie servers draaien Ubuntu 20.04.
  • Op elke server is een root wachtwoord ingesteld.

Aan de slag

Voor je begint moet je je systeempakketten bijwerken naar de laatste versie. Je kunt ze bijwerken door op elk knooppunt het volgende commando uit te voeren:

apt-get update -y

Als alle pakketten bijgewerkt zijn, moet je op elk knooppunt het bestand /etc/hosts instellen. Zodat ze met elkaar kunnen communiceren via hostnaam.

Bewerk het /etc/hosts bestand op elke node met het volgende commando:

nano /etc/hosts

Voeg de volgende regels toe:

192.168.0.10 node1
192.168.0.11 node2
192.168.0.12 node3

Sla het bestand op en sluit het als je klaar bent. Vervolgens kun je verder gaan met de volgende stap.

Installeer RabbitMQ Server

Vervolgens moet je op elk knooppunt het RabbitMQ Server pakket installeren. Je kunt het installeren door gewoon het volgende commando uit te voeren:

apt-get install rabbitmq-server -y

Als het geïnstalleerd is, start je de RabbitMQ dienst en schakel je hem in om te starten bij het herstarten van het systeem met het volgende commando:

systemctl start rabbitmq-server
systemctl enable rabbitmq-server

Je kunt ook de status van de RabbitMQ dienst controleren met het volgende commando:

systemctl status rabbitmq-server

Je zou de volgende uitvoer moeten krijgen:

? 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.

Op dit punt is de RabbitMQ server geïnstalleerd en draait op elk knooppunt. Je kunt nu verder gaan met de volgende stap.

Schakel RabbitMQ beheerplugin in

De RabbitMQ beheer plugin biedt een HTTP-gebaseerde API die gebruikt kan worden om RabbitMQ knooppunten en clusters via een webbrowser te bewaken en te beheren. Standaard draait deze op de TCP poort 15672.

Je kunt de RabbitMQ management plugin inschakelen door op elke node het volgende commando uit te voeren:

rabbitmq-plugins enable rabbitmq_management

Je zou de volgende uitvoer moeten zien:

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.

Herstart vervolgens de RabbitMQ dienst om de veranderingen toe te passen:

systemctl restart rabbitmq-server

Je kunt de luisterpoort verifiëren met het volgende commando:

netstat -tunelp | grep 15672

Je zou de volgende uitvoer moeten zien:

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

Opzetten RabbitMQ Cluster

Standaard is het bestand /var/lib/rabbitmq/.erlang.cookie op elk knooppunt hetzelfde. Om het RabbitMQ cluster op te zetten, moet je het /var/lib/rabbitmq/.erlang.cookie bestand van node1 naar andere nodes kopiëren.

Voer op node1 het volgende commando uit om het bestand /var/lib/rabbitmq/.erlang.cookie naar de andere nodes te kopiëren.

scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/

Vervolgens moet je node1 en node2 instellen om zich bij het cluster node1 aan te sluiten.

Start eerst de RabbitMQ dienst opnieuw op en stop de app met het volgende commando op zowel node2 als node3:

systemctl restart rabbitmq-server
rabbitmqctl stop_app

Voeg je op node2 bij het cluster op node1 door het volgende commando uit te voeren:

rabbitmqctl join_cluster [email protected]

Je zou de volgende uitvoer moeten zien:

Clustering node [email protected] with [email protected]

Op node2 start je de app met het volgende commando:

rabbitmqctl start_app

Je zou de volgende uitvoer moeten zien:

Starting node [email protected] ...
 completed with 3 plugins.

Op de node3, join het cluster op node1 door het volgende commando uit te voeren:

rabbitmqctl join_cluster [email protected]

Je zou de volgende uitvoer moeten zien:

Clustering node [email protected] with [email protected]

Op node3 start je de app met het volgende commando:

rabbitmqctl start_app

Je zou de volgende uitvoer moeten zien:

Starting node [email protected] ...
 completed with 3 plugins.

Als je met succes klaar bent, controleer dan de status van het cluster door het volgende commando op node1 uit te voeren:

rabbitmqctl cluster_status

Je zou de volgende uitvoer moeten zien:

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

Setup Administrator User

Vervolgens moet je een nieuwe admin gebruiker aanmaken voor de RabbitMQ server en de standaard ‘guest’ gebruiker verwijderen.

Je kunt een nieuwe gebruiker aanmaken met de naam “hitesh” en wachtwoord “password” door op node1 het volgende commando uit te voeren:

rabbitmqctl add_user hitesh password

Je zou de volgende uitvoer moeten zien:

Adding user "hitesh" ...

Configureer vervolgens de gebruiker hitesh als beheerder met het volgende commando:

rabbitmqctl set_user_tags hitesh administrator

Je zou de volgende uitvoer moeten zien:

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

Geef vervolgens de gebruiker hitesh toestemming om alle vhosts te wijzigen, te schrijven en te lezen.

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

Je zou de volgende uitvoer moeten zien:

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

Verwijder vervolgens de gastgebruiker met het volgende commando:

rabbitmqctl delete_user guest

Je zou het volgende commando moeten krijgen:

Deleting user "guest" ...

Je kunt nu alle gebruikers opnoemen met het volgende commando:

rabbitmqctl list_users

Je zou de volgende uitvoer moeten krijgen:

Listing users ...
user	tags
hitesh	[administrator]

De gebruiker die je op node1 hebt aangemaakt wordt automatisch gerepliceerd naar alle nodes op het cluster.

RabbitMQ instellen Wachtrij spiegelen

Standaard bevindt de inhoud van een wachtrij zich op een enkele node. Je zult dus het ‘ha policy’ cluster moeten instellen voor wachtrij spiegeling en replicatie naar alle clusterknooppunten.

Maak daartoe een ha policy aan met de naam ‘ha-all’ die alle wachtrijen op het RabbitMQ cluster zal spiegelen naar alle knooppunten op het cluster.

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

Uitvoer:

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

Maak vervolgens een ha policy aan met de naam ‘ha-two’ die alle wachtrijnamen beginnend met ‘two.’ zal spiegelen naar de twee knooppunten op het cluster.

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

Uitvoer:

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

Maak vervolgens een hoge beschikbaarheid beleid aan met de naam ‘ha-nodes’ dat alle wachtrijen zal bevatten waarvan de naam begint met ‘nodes.’ We zullen spiegelen naar twee specifieke knooppunten ‘node2’ en ‘node3’ in het cluster.

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

Uitvoer:

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

Je kunt nu alle geconfigureerde policy’s opnoemen door het volgende commando uit te voeren:

rabbitmqctl list_policies;

Je zou de volgende uitvoer moeten zien:

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

Als je klaar bent, kun je verder gaan met de volgende stap.

Toegang tot RabbitMQ Cluster

Je kunt nu de RabbitMQ webinterface openen door het IP adres van een willekeurige node in je webbrowser in te typen met poort 15672 zoals http://192.168.0.10:15672/. Je zou de RabbitMQ login pagina moeten zien:

RabbitMQ Inloggen

Geef je admin gebruikersnaam en wachtwoord op en klik op de knop Login. Je zou het RabbitMQ dashboard moeten zien in het volgende scherm:

RabbitMQ Dashboard

Klik vervolgens op het tabblad‘Admin‘, en klik op het menu‘Policies‘. Je zou alle RabbitMQ ha policies die we gemaakt hebben in het volgende scherm moeten zien:

RabbitMQ Beleidslijnen

Conclusie

Gefeliciteerd! Je hebt met succes drie-node RabbitMQ cluster op Ubuntu20.04 server opgezet. Je cluster deelt nu configuratie informatie, waaronder, topologie en beveiligingsinformatie over alle knooppunten.