Sie möchten die Auslastung und Lieferzeiten Ihrer Anwendungen reduzieren? Sparen Sie sich die Kopfschmerzen und richten Sie einen RabbitMQ-Cluster für Ihre Anwendung ein!
In diesem Tutorial erfahren Sie, wie Sie den RabbitMQ-Cluster einrichten und über einen voll funktionsfähigen RabbitMQ-Cluster mit Hochverfügbarkeitsunterstützung verfügen.
Bereit? Lesen Sie weiter und reduzieren Sie die Arbeitsbelastung!
Voraussetzungen
Stellen Sie sicher, dass Sie die folgenden Anforderungen erfüllen, um diesem Tutorial folgen zu können:
- Zwei oder mehr Linux-Server im selben Netzwerk – Dieses Tutorial verwendet drei Debian 11-Server namens node01, node02 und node03.
- Sudo-Root-Rechte oder Zugriff auf das Root-/Administratorkonto.
Einrichten einer Hosts-Datei
Der RabbitMQ-Cluster arbeitet mit dem Hostnamen oder der lokalen Domäne. Sie müssen sicherstellen, dass jeder Hostname in die IP-Adresse des Servers aufgelöst wird, indem Sie die Datei /etc/hosts bearbeiten Datei.
Öffnen Sie /etc/hosts
Datei auf allen Servern mit Ihrem bevorzugten Texteditor und fügen Sie der Datei die folgenden Zeilen hinzu.
Denken Sie daran, dass zum Bearbeiten der Datei /etc/hosts ein sudo-Privileg erforderlich ist.
Das Format von /etc/hosts Konfiguration ist IP-address hostname
.
Ersetzen Sie die folgenden Werte durch die IP-Adressen und Hostnamen Ihrer Server, speichern Sie die Änderungen und verlassen Sie den Editor.
# /etc/hosts file RabbitMQ Servers
172.16.1.20 node01
172.16.1.21 node02
172.16.1.22 node03
Führen Sie nun ping
aus Befehl unten, um zu überprüfen, ob jeder Hostname in die richtige IP-Adresse des Servers aufgelöst wird. Jeweils -c 3
Option macht ping
fordert dreimal an und beendet dann die Anfragen.
# ping node01 node02 and node03
ping -c 3 node01
ping -c 3 node02
ping -c 3 node03
Wenn Ihre Konfiguration korrekt ist, sehen Sie, dass jeder Hostname in die richtige IP-Adresse des Servers aufgelöst wird, wie unten gezeigt.
Installieren von RabbitMQ auf allen Servern
Nachdem Sie nun den /etc/hosts
konfiguriert haben Datei auf allen Servern, ist es an der Zeit, RabbitMQ-Pakete auf allen Servern (Knoten01, Knoten02 und Knoten03) zu installieren. Sie können RabbitMQ für die meisten Linux-Distributionen aus dem offiziellen Distributions-Repository installieren.
Zum Zeitpunkt des Schreibens stellt das Debian- und Ubuntu-Repository die neueste stabile RabbitMQ-Version 3.8.9 bereit.
1. Führen Sie apt
aus Befehl unten, um alle Paketindizes Ihres Systems zu aktualisieren.
sudo apt update
2. Führen Sie als Nächstes den folgenden apt install
aus Befehl zum Installieren von RabbitMQ (rabbitmq-server
) auf Ihrem System.
Sobald die Installation abgeschlossen ist, wird der rabbitmq-server
Der Dienst wird automatisch gestartet und auf Ihrem System aktiviert.
sudo apt install rabbitmq-server -y
3. Führen Sie zuletzt den folgenden Befehl aus, um den rabbitmq-server
zu überprüfen Dienststatus.
sudo systemctl status rabbitmq-server
Unten sehen Sie, dass der RabbitMQ-Serverdienst aktiv (läuft) ist und aktiviert . Dadurch starten die Dienste automatisch beim Booten/Starten des Systems.
Darüber hinaus können Sie die Version von RabbitMQ auf Ihrem System mit dem folgenden Befehl überprüfen.
sudo rabbitmq-diagnostics server_version
Die installierte RabbitMQ-Version ist 3.8.9 , wie unten gezeigt, aber Ihres kann anders sein.
Einrichten des RabbitMQ-Clusters
Nachdem Sie RabbitMQ installiert haben, ist es an der Zeit, den RabbitMQ-Cluster einzurichten. Die Verwendung des RabbitMQ-Clusters verhindert Datenverluste und Misserfolge zwischen Ihren Anwendungen. Der RabbitMQ-Cluster bietet Replikation und Hochverfügbarkeit auf allen Servern.
RabbitMQ ist eine in Erlang geschriebene Anwendung und stellt standardmäßig ein .erlang.cookie bereit Datei im RabbitMQ-Datenverzeichnis (/var/lib/rabbitmq) .
Um einen RabbitMQ-Cluster zu erstellen, richten Sie ein .erlang.cookie ein Datei auf jedem Server mit dem gleichen Inhalt und muss im Besitz von rabbitmq
sein Benutzer und Gruppe.
1. Führen Sie auf dem node01-Server den folgenden Befehl aus, um verfügbare Dateien im RabbitMQ-Datenverzeichnis (/var/lib/rabbitmq
). Der Befehl gibt dann den Inhalt von .erlang.cookie
aus Datei.
# 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
Kopieren Sie die Ausgabe (UXPBSDKHLRMGJSOJVEAN ) zu Ihrer Notiz hinzufügen, da Sie diese Ausgabe in den folgenden Schritten zu den Servern node02 und node03 hinzufügen werden. Beachten Sie, dass Sie möglicherweise eine andere Ausgabe von .erlang.cookie.
erhalten Datei als das, was unten gezeigt wird.
2. Wechseln Sie als Nächstes zum node02-Server und führen Sie den folgenden Befehl für stop
aus die rabbitmq
Service.
sudo systemctl stop rabbitmq-server
3. Bearbeiten Sie /var/lib/rabbitmq/.erlang.cookie
Datei in Ihrem bevorzugten Texteditor. Ersetzen Sie den ursprünglichen Inhalt durch den, den Sie in Schritt 1 notiert haben, speichern Sie die Änderungen und beenden Sie den Editor.
# content of .erlang.cookie from node01
UXPBSDKHLRMGJSOJVEAN
4. Führen Sie nun den folgenden Befehl aus, um rabbitmq-server
zu starten Service.
sudo systemctl start rabbitmq-server
5. Wechseln Sie zum node03-Server und wiederholen Sie die Schritte (zwei bis vier), um /var/lib/rabbitmq/.erlang.cookie
zu bearbeiten Datei.
6. Führen Sie den folgenden rabbitmqctl
aus Befehle auf den Servern node02 und node03, um sie dem RabbitMQ-Cluster (node01) hinzuzufügen.
# 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
Unten sehen Sie, dass der node02-Server mit dem RabbitMQ-Cluster (node01) clustert, und das gleiche gilt für den node03-Server.
7. Führen Sie abschließend rabbitmqctl
aus Befehl unten, um den Status des RabbitMQ-Clusters zu überprüfen. Sie können dies von jedem Server ausführen (node01, node02 oder node03).
sudo rabbitmqctl cluster_status
In der Ausgabe unten sehen Sie den Clusternamen ([email protected] ) und die laufenden Knoten.
Einrichten eines Admin-Benutzers für RabbitMQ
Nachdem Sie den RabbitMQ-Cluster eingerichtet haben, erstellen Sie einen neuen Admin-Benutzer für RabbitMQ und löschen den Standard-Gastbenutzer. Der RabbitMQ-Administratorbenutzer hat die Berechtigung, alle im RabbitMQ-Cluster verfügbaren Entitäten zu konfigurieren, zu lesen und zu schreiben.
1. Wechseln Sie zum node01-Server und führen Sie rabbitmqctl
aus Befehl unten, um einen neuen Benutzer namens admin
zu erstellen mit dem als AdminPassRabbitMQ
eingestellten Passwort . Sie können Ihren bevorzugten Benutzernamen und Ihr bevorzugtes Passwort festlegen, aber stellen Sie sicher, dass Sie ein starkes Passwort festlegen.
sudo rabbitmqctl add_user admin AdminPassRabbitMQ
2. Führen Sie als Nächstes den folgenden Befehl aus, um (set_user_tags
) der neue Benutzer (admin
) als administrator
für den RabbitMQ-Cluster.
sudo rabbitmqctl set_user_tags admin administrator
3. Führen Sie den folgenden Befehl zu set_permissions
aus zum admin
Benutzer mit folgendem:
- Erlaubt (
-p /
)admin
Benutzer auf alle vhosts im RabbitMQ-Cluster zugreifen. - Zuerst
".*"
– Ermöglicht dem Benutzer, die Berechtigung für jede Entität und jeden Vhost zu konfigurieren. - Zweiter
".*"
– Aktiviert Schreibrechte für den Benutzer für jede Entität und vhosts. - Dritter
".*"
– Aktiviert die Leseberechtigung für den Benutzer für alle Entitäten und vhosts.
sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
4. Führen Sie nun den folgenden Befehl aus, um (delete_user
) den Standardbenutzer (guest
) aus dem RabbitMQ-Cluster.
sudo rabbitmqctl delete_user guest
5. Führen Sie abschließend den folgenden Befehl aus, um alle verfügbaren Benutzer aufzulisten (list_users
) auf dem RabbitMQ-Cluster.
sudo rabbitmqctl list_users
Unten sehen Sie nur einen Benutzer (admin) . Sie können auch Benutzer von anderen Servern (node02 und node03) verifizieren, und Sie erhalten dieselbe Ausgabe.
Erstellen eines virtuellen Hosts und eines neuen Admin-Benutzers auf RabbitMQ
Sie haben Ihren RabbitMQ-Cluster eingerichtet und einen Admin-Benutzer auf RabbitMQ erstellt. Aber jetzt erstellen Sie einen virtuellen Host (vhost) und Benutzer auf RabbitMQ, damit Ihre Anwendung eine Verbindung zu RabbitMQ herstellen kann.
Das Grundkonzept eines virtuellen Hosts (vhost) auf RabbitMQ ähnelt dem auf Apache oder Serverblöcken auf NGINX. Jeder Vhost hat Entitäten wie Austausch, Warteschlangen, Bindungen, Benutzerberechtigungen, Authentifizierung usw.
1. Führen Sie rabbitmqctl
aus Befehl unten, um einen neuen vhost zu erstellen (add_vhost
) mit dem Namen app-qa1
.
sudo rabbitmqctl add_vhost app-qa1
2. Führen Sie als Nächstes die folgenden Befehle aus, um einen neuen Benutzer zu erstellen (add_user
) mit dem Namen alice
mit dem Passwort AlicePassRabbitMQ
und markieren Sie den Benutzer als administrator
. Sie können den Benutzernamen und das Passwort nach Belieben festlegen.
# 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. Führen Sie den folgenden Befehl aus, um Berechtigungen für den Benutzer alice
festzulegen um vhost app-qa1
zu verwalten . Diese Berechtigungen erlauben dem Benutzer alice
um alle Entitäten unter dem vhost app-qa1
zu konfigurieren, zu lesen und zu schreiben .
# set up permission for user alice
sudo rabbitmqctl set_permissions alice --vhost app-qa1 ".*" ".*" ".*"
4. Führen Sie schließlich jeden der folgenden Befehle aus, um verfügbare vhosts aufzulisten (list_vhosts
) auf dem RabbitMQ-Cluster und Berechtigungen (list_user_permissions
) des neuen Admin-Benutzers (alice
).
# check available vhosts on RabbitMQ
sudo rabbitmqctl list_vhosts
# check permissions for user alice
sudo rabbitmqctl list_user_permissions alice
Erstellen von Austauschen, Warteschlangen und Bindungen auf RabbitMQ
Ihr virtueller Host und Ihr Admin-Benutzer sind eingerichtet, aber sind das alles, was Sie brauchen, damit Ihre Anwendung funktioniert? Sie müssen weiterhin Entitäten wie Austausch, Warteschlangen und Bindungen auf RabbitMQ erstellen. Diese Entitäten sind erforderlich, damit Ihre Anwendung mit RabbitMQ funktioniert.
1. Führen Sie den folgenden rabbitmqadmin
aus Befehl zum Erstellen eines neuen Austauschs auf RabbitMQ mit dem Namen test_exchange
unter dem app-qa1
vhost und den Benutzer alice
. Mit dem type
können Sie die Art des Austauschs angeben Option, die direct
ist für diese Demo.
# Create new exchange test_exchange
sudo rabbitmqadmin -u alice -p AlicePassRabbitMQ -V app-qa1 declare exchange name=test_exchange type=direct
2. Führen Sie als Nächstes jeden der folgenden Befehle aus, um neue Warteschlangen auf RabbitMQ zu erstellen. In dieser Demo erstellen Sie den Standard classic
(test_classic
) und den quorum
Warteschlange mit dem Namen 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. Führen Sie die folgenden Befehle aus, um eine Bindung für beide test_classic
zu erstellen und test_quorum
Warteschlangen. Jede Bindung hat einen anderen routing_key
läuft aber immer noch auf der gleichen Börse (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. Führen Sie nun die folgenden Befehle zu publish
aus der hello, world
Nachricht an test_exchange
. Achten Sie darauf, den richtigen routing_key.
einzustellen
# 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. Führen Sie abschließend den folgenden Befehl für get
aus die hello, world
Nachricht von test_quorum
und test_classic
Warteschlangen.
# 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
Wie unten gezeigt, wissen Sie, dass die Warteschlangen funktionieren, wenn Sie den hello, world
erhalten Nachricht von test_quorum
und test_classic
Warteschlangen.
Aktivieren des RabbitMQ-Verwaltungs-Plugins
Sie haben es bisher geschafft, an RabbitMQ über eine Befehlszeilenumgebung zu arbeiten. Aber vielleicht bevorzugen Sie eine GUI, um mit RabbitMQ-Servern und -Clustern zu interagieren. In diesem Fall müssen Sie das RabbitMQ-Management-Plugin aktivieren.
Das RabbitMQ Management Plugin bietet eine webbasierte Verwaltungsoberfläche, die auf dem Standardport 15672
ausgeführt wird und das Befehlszeilen-Verwaltungstool [rabbitmqadmin]
Führen Sie rabbitmq-plugins
aus Befehl unten auf allen Servern (node01, node02 und node03), um rabbitmq_management
zu aktivieren Plugin. Dieser Befehl aktiviert automatisch andere notwendige Plugins, wie z. B. rabbitmq_management_agent
und rabbitmq_web_dispatch
.
sudo rabbitmq-plugins enable rabbitmq_management
Unten sehen Sie eine ähnliche Ausgabe, die Sie auf Ihrem Terminalbildschirm sehen werden.
Öffnen Sie nun Ihren Webbrowser und navigieren Sie zu Ihrer Server-IP-Adresse, gefolgt von Port 15672
(http://172.16.1.20:15672/), um auf die webbasierte Verwaltungsschnittstelle von RabbitMQ zuzugreifen. Port 15672
wird automatisch geöffnet, wenn Sie das RabbitMQ-Management-Plugin aktivieren.
Melden Sie sich mit dem Benutzer alice auf der Anmeldeseite der RabbitMQ-Verwaltungsoberfläche an und das Passwort AlicePassRabbitMQ .
Im RabbitMQ-Dashboard sehen Sie alle verfügbaren Knoten im RabbitMQ-Cluster.
Unten können Sie sehen, dass alle Knoten auf dem RabbitMQ-Cluster ohne Probleme laufen.
Überprüfen der Hochverfügbarkeit der Quorum-Warteschlange
Sie haben zuvor überprüft, dass die Knoten im RabbitMQ-Cluster ausgeführt werden und die Warteschlangen funktionieren, und das ist großartig. Was aber, wenn einer der Knoten heruntergefahren wird oder ausfällt? Stellen Sie sicher, dass die test_quorum-Warteschlange hohe Verfügbarkeit und serverübergreifende Replikation bietet.
1. Klicken Sie im RabbitMQ-Dashboard auf Warteschlangen Registerkarte, um auf die im RabbitMQ-Cluster verfügbaren Warteschlangen zuzugreifen.
Unten sehen Sie den test_classic
Warteschlange und test_quorum
Warteschlange.
2. Klicken Sie anschließend auf test_classic Warteschlange, um detaillierte Informationen zu erhalten.
Wie Sie unten sehen, ist der test_classic Warteschlange läuft auf [email protected] ohne Spiegel/Replikation. Wenn der Knoten [email protected] ist ausgefallen, der test_classic Warteschlange wird nicht verfügbar.
3. Wechseln Sie zurück zur Warteschlange Menü, sondern klicken Sie auf test_quorum diesmal anstehen.
Unten sehen Sie das test_quorum Warteschlange ist auf [email protected] verfügbar und stellt auch Spiegelungen für andere Knoten im Cluster bereit. Dieses Setup behält das test_quorum bei Warteschlange läuft, auch wenn node01 ausgefallen ist.
4. Führen Sie nun den folgenden Befehl aus, um node01
auszuschalten/herunterzufahren Server. Wenn der node01-Server .
ausgefallen ist
# turnoff node01
sudo poweroff
5. Wechseln Sie zum node02-Server und führen Sie den folgenden Befehl aus, um den RabbitMQ cluster_status
zu überprüfen
# checking RabbitMQ cluster status
sudo rabbitmqctl cluster_status
Sie sehen die aktuellen Running Nodes auf dem RabbitMQ-Cluster sind node02 und node03 .
6. Führen Sie als Nächstes die folgenden Befehle aus, um die „Hello World“-Nachricht von test_classic
zu erhalten Warteschlange. Dieser Befehl stellt fünf Anfragen an test_classic
Warteschlange mit der Bash-Schleife.
# 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
Sie erhalten die Meldung Nicht gefunden gibt, wie unten gezeigt, aus, weil der node01-Server ausgefallen ist.
7. Führen Sie abschließend die folgenden Befehle aus, um die „Hello World“-Nachricht von test_quorum
abzurufen Warteschlange.
Ähnlich wie beim Testen der test_classic-Warteschlange stellt dieser Befehl fünf Anforderungen an test_quorum
Warteschlange, aber dieses Mal erhalten Sie die „Hallo Welt“-Nachricht sogar die node01
ist unten. Wieso den? Der test_quorum
Die Warteschlange wird automatisch auf die Server node02 oder node03 repliziert/gespiegelt.
# 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
Schlussfolgerung
Dieses Tutorial soll Ihnen bei der Einrichtung des RabbitMQ-Clusters auf Debian/Ubuntu-Linux-Systemen helfen. Sie haben auch die grundlegende Verwaltung des RabbitMQ-Servers gelernt und erfahren, wie Sie Warteschlangen erstellen, die eine hohe Verfügbarkeit auf RabbitMQ unterstützen.
An diesem Punkt haben Sie einen vollständigen RabbitMQ-Cluster eingerichtet. Was kommt als nächstes? Vielleicht lernen Sie, die RabbitMQ in Ihre Anwendung zu implementieren?