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:
Geef je admin gebruikersnaam en wachtwoord op en klik op de knop Login. Je zou het RabbitMQ dashboard moeten zien in het volgende scherm:
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:
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.