GNU/Linux >> LINUX-Kenntnisse >  >> Linux

So richten Sie den RabbitMQ-Cluster unter Ubuntu/Debian Linux ein

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?


Linux
  1. So richten Sie einen Ubuntu/Debian LAMP-Server ein

  2. Linux – Wie stellt man die Prozessoraffinität eines Prozesses unter Linux ein?

  3. So deaktivieren Sie Ipv6 unter Ubuntu, Linux Mint, Debian

  4. So richten Sie MySQL Cluster unter Ubuntu ein

  5. So stellen Sie die bevorzugte Netzwerkschnittstelle unter Linux ein

So setzen oder ändern Sie den Hostnamen in Debian Linux

So installieren Sie den IonCube Loader unter Ubuntu Linux

So richten Sie PowerDNS unter Ubuntu Linux ein

So richten Sie die UFW-Firewall unter Linux ein

So ändern Sie den Hostnamen unter Debian Linux

So verbinden Sie sich vom Terminal in Ubuntu Linux mit WLAN