RabbitMQ-Cluster unter Ubuntu 20.04 einrichten

RabbitMQ ist eine freie, quelloffene und Multiprotokoll-Messaging-Broker-Software, die in der Programmiersprache Erlang geschrieben wurde. Ein Message Broker wird verwendet, um Nachrichten für eine Anwendung zu speichern. Wenn eine Anwendung Daten an eine andere Anwendung sendet, veröffentlicht die Anwendung die Nachricht auf dem Message Broker. RabbitMQ unterstützt mehrere Messaging-Protokolle und kann leicht in verteilten Konfigurationen eingesetzt werden. Der Message Broker fungiert als Vermittler für verschiedene Webanwendungen und wird verwendet, um die Last und die Lieferzeiten von Webanwendungen zu reduzieren.

In diesem Tutorial werden wir einen RabbitMQ-Cluster mit drei Knoten auf einem Ubuntu 20.04-Server einrichten.

Voraussetzungen

  • Drei Server, auf denen Ubuntu 20.04 läuft.
  • Ein Root-Passwort ist auf jedem Server konfiguriert.

Erste Schritte

Bevor Sie beginnen, müssen Sie Ihre Systempakete auf die neueste Version aktualisieren. Sie können sie aktualisieren, indem Sie den folgenden Befehl auf jedem Knoten ausführen:

apt-get update -y

Sobald alle Pakete aktualisiert sind, müssen Sie auf jedem Knoten die Datei /etc/hosts einrichten. So können sie sich gegenseitig über den Hostnamen ansprechen.

Bearbeiten Sie die Datei /etc/hosts auf jedem Knoten mit dem folgenden Befehl:

nano /etc/hosts

Fügen Sie die folgenden Zeilen hinzu:

192.168.0.10 node1
192.168.0.11 node2
192.168.0.12 node3

Speichern und schließen Sie die Datei, wenn Sie fertig sind. Danach können Sie mit dem nächsten Schritt fortfahren.

RabbitMQ-Server installieren

Als nächstes müssen Sie das RabbitMQ Server-Paket auf jedem Knoten installieren. Sie können es installieren, indem Sie einfach den folgenden Befehl ausführen:

apt-get install rabbitmq-server -y

Nach der Installation starten Sie den RabbitMQ-Dienst und aktivieren ihn mit dem folgenden Befehl, damit er beim Neustart des Systems gestartet wird:

systemctl start rabbitmq-server
systemctl enable rabbitmq-server

Sie können den Status des RabbitMQ-Dienstes auch mit dem folgenden Befehl überprüfen:

systemctl status rabbitmq-server

Sie sollten die folgende Ausgabe erhalten:

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

Zu diesem Zeitpunkt ist der RabbitMQ-Server auf jedem Knoten installiert und läuft. Sie können nun mit dem nächsten Schritt fortfahren.

Aktivieren des RabbitMQ-Management-Plugins

Das RabbitMQ-Management-Plugin stellt eine HTTP-basierte API zur Verfügung, die zur Überwachung und Verwaltung von RabbitMQ-Knoten und -Clustern über einen Webbrowser verwendet werden kann. Standardmäßig läuft es auf dem TCP-Port 15672.

Sie können das RabbitMQ-Management-Plugin aktivieren, indem Sie den folgenden Befehl auf jedem Knoten ausführen:

rabbitmq-plugins enable rabbitmq_management

Sie sollten die folgende Ausgabe sehen:

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.

Starten Sie anschließend den RabbitMQ-Dienst neu, um die Änderungen zu übernehmen:

systemctl restart rabbitmq-server

Sie können den lauschenden Port mit dem folgenden Befehl überprüfen:

netstat -tunelp | grep 15672

Sie sollten die folgende Ausgabe sehen:

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

RabbitMQ-Cluster einrichten

Standardmäßig ist die Datei /var/lib/rabbitmq/.erlang.cookie auf jedem Knoten gleich. Um den RabbitMQ-Cluster einzurichten, müssen Sie die Datei /var/lib/rabbitmq/.erlang.cookie von Knoten1 auf andere Knoten kopieren.

Führen Sie auf Knoten1 den folgenden Befehl aus, um die Datei /var/lib/rabbitmq/.erlang.cookie auf die anderen Knoten zu kopieren.

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

Als nächstes müssen Sie node1 und node2 einrichten, um dem Cluster node1 beizutreten.

Starten Sie zunächst den RabbitMQ-Dienst neu und stoppen Sie die App mit folgendem Befehl sowohl auf node2 als auch auf node3:

systemctl restart rabbitmq-server
rabbitmqctl stop_app

Treten Sie auf node2 dem Cluster auf node1 bei, indem Sie den folgenden Befehl ausführen:

rabbitmqctl join_cluster [email protected]

Sie sollten die folgende Ausgabe sehen:

Clustering node [email protected] with [email protected]

Starten Sie auf dem Knoten2 die App mit dem folgenden Befehl:

rabbitmqctl start_app

Sie sollten die folgende Ausgabe sehen:

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

Treten Sie auf Knoten3 dem Cluster auf Knoten1 bei, indem Sie den folgenden Befehl ausführen:

rabbitmqctl join_cluster [email protected]

Sie sollten die folgende Ausgabe sehen:

Clustering node [email protected] with [email protected]

Starten Sie auf dem Knoten3 die App mit dem folgenden Befehl:

rabbitmqctl start_app

Sie sollten die folgende Ausgabe sehen:

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

Überprüfen Sie nach erfolgreichem Abschluss den Status des Clusters, indem Sie den folgenden Befehl auf Knoten1 ausführen:

rabbitmqctl cluster_status

Sie sollten die folgende Ausgabe sehen:

Cluster status of node [email protected] ...
Basics

Cluster name: [email protected]

Disk Nodes

[email protected]
[email protected]2
[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

Als nächstes müssen Sie einen neuen Administrator-Benutzer für den RabbitMQ-Server anlegen und den Standard-Benutzer „guest“ löschen.

Sie können einen neuen Benutzer mit dem Namen „hitesh“ und dem Passwort „password“ erstellen, indem Sie den folgenden Befehl auf node1 ausführen:

rabbitmqctl add_user hitesh password

Sie sollten die folgende Ausgabe sehen:

Adding user "hitesh" ...

Als Nächstes konfigurieren Sie den Benutzer „hitesh“ mit dem folgenden Befehl als Administrator:

rabbitmqctl set_user_tags hitesh administrator

Sie sollten die folgende Ausgabe sehen:

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

Erteilen Sie als Nächstes dem Benutzer hitesh die Berechtigung zum Ändern, Schreiben und Lesen aller vhosts.

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

Sie sollten die folgende Ausgabe sehen:

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

Löschen Sie als Nächstes den Gastbenutzer mit dem folgenden Befehl:

rabbitmqctl delete_user guest

Sie sollten dann den folgenden Befehl erhalten:

Deleting user "guest" ...

Alle Benutzer mit dem folgenden Befehl auflisten:

rabbitmqctl list_users

Dies ergibt die Folgende Ausgabe:

Listing users ...
user	tags
hitesh	[administrator]

Ihr Benutzer, den Sie auf Knoten1 angelegt haben, wird automatisch auf alle Knoten des Clusters repliziert.

RabbitMQ-Einrichtung Queue-Spiegelung

Standardmäßig befindet sich der Inhalt einer Warteschlange auf einem einzigen Knoten. Daher müssen Sie den ‚ha policy‘-Cluster für die Queue-Spiegelung und Replikation auf alle Cluster-Knoten einrichten.

Erstellen Sie dazu eine ha-Policy mit dem Namen ‚ha-all‘, die alle Queues auf dem RabbitMQ-Cluster auf alle Knoten des Clusters spiegeln soll.

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

Ausgabe:

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

Als nächstes erstellen Sie eine ha-Policy mit dem Namen ‚ha-two‘, die alle Queue-Namen, die mit ‚zwei‘ beginnen, auf die beiden Knoten des Clusters spiegelt.

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

Ausgabe:

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

Als nächstes erstellen Sie eine Hochverfügbarkeitsrichtlinie mit dem Namen „ha-nodes“, die alle Warteschlangen enthält, deren Name mit „nodes“ beginnt. Wir werden auf zwei bestimmte Knoten ’node2′ und ’node3′ im Cluster spiegeln.

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

Ausgabe:

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

Sie können nun alle konfigurierten Richtlinien auflisten, indem Sie den folgenden Befehl ausführen:

rabbitmqctl list_policies;

Sie sollten die folgende Ausgabe sehen:

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

Wenn Sie fertig sind, können Sie mit dem nächsten Schritt fortfahren.

Zugriff auf RabbitMQ-Cluster

Sie können nun auf das RabbitMQ-Webinterface zugreifen, indem Sie die IP-Adresse eines beliebigen Knotens in Ihren Webbrowser mit Port 15672 wie http://192.168.0.10:15672/ eingeben. Sie sollten die RabbitMQ-Login-Seite sehen:

RabbitMQ-Anmeldung

Geben Sie Ihren Admin-Benutzernamen und Ihr Passwort ein und klicken Sie auf die Schaltfläche Login. Sie sollten das RabbitMQ-Dashboard im folgenden Bildschirm sehen:

RabbitMQ Dashboard

Klicken Sie als Nächstes auf die Registerkarte„Admin“ und dann auf das Menü„Policies„. Sie sollten alle RabbitMQ ha-Policies sehen, die wir im folgenden Bildschirm erstellt haben:

RabbitMQ-Richtlinien

Fazit

Herzlichen Glückwunsch! Sie haben erfolgreich einen Drei-Knoten-RabbitMQ-Cluster auf einem Ubuntu20.04-Server eingerichtet. Ihr Cluster teilt nun Konfigurationsinformationen, einschließlich Topologie- und Sicherheitsinformationen über alle Knoten hinweg.

Das könnte dich auch interessieren …