Tutorials  /  Linux Basics

RabbitMQ Cluster auf CentOS 7 einrichten – Hochverfügbarkeit leicht gemacht

Ccentron Redaktion · Juni 2025 ·8 Min. Lesezeit ·Linux Basics, Tutorial

RabbitMQ ist ein weit verbreiteter Open-Source-Nachrichtenbroker, der AMQP, STOMP und weitere Protokolle unterstützt. In Unternehmensumgebungen und modernen Microservice-Architekturen übernimmt RabbitMQ eine zentrale Rolle als asynchrane Kommunikationsschnittstelle zwischen verschiedenen Diensten. Diese Anleitung beschreibt, wie Sie einen RabbitMQ-Cluster auf mehreren CentOS-7-Servern einrichten, um eine hohe Verfügbarkeit sicherzustellen. Dabei agiert ein Server als Hauptknoten, während zusätzliche Server als gespiegelte Knoten fungieren, um Ausfallsicherheit zu gewährleisten.

Systemvoraussetzungen

  • Mindestens zwei frisch installierte und aktualisierte CentOS 7 Instanzen im selben privaten Subnetz
  • RabbitMQ ist auf jedem Server installiert, inklusive aktivierter Webverwaltungsoberfläche (siehe Installationsanleitung für CentOS 7)
  • Ein Benutzerkonto ohne Root-Rechte, das Sudo-Befehle ausführen darf (siehe Anleitung zur Sudo-Konfiguration für CentOS, Debian und FreeBSD)
VM

Passende Infrastruktur bei centron

Zum Ausprobieren braucht es keine eigene Hardware: ccloud³ VMs mit vollem Root-Zugriff gibt es ab 3,12 € im Monat, stundengenau abgerechnet und in Sekunden bereit. Cloud Server mieten →

Firewall einrichten

Standardmäßig blockiert das CentOS-Firewalltool firewalld sämtliche eingehenden Verbindungen. Um den Zugriff auf RabbitMQ und die Verwaltungsoberfläche von außen zu ermöglichen, müssen bestimmte Ports freigegeben werden.

Die Verwaltungsoberfläche von RabbitMQ läuft standardmäßig auf Port 15672. Um diesen Zugang von außen verfügbar zu machen, fügen Sie folgende Regel in der Public-Zone hinzu:

Konsole
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent

Damit sich die RabbitMQ-Knoten untereinander im internen Netzwerk austauschen können, müssen zusätzliche Ports ausschließlich für das Subnetz 192.168.0.100/24 geöffnet werden.

epmd-Erkennung aktivieren (Port 4369)

Konsole
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="192.168.0.100/24"
    port protocol="tcp" port="4369" accept'

Kommunikation zwischen RabbitMQ-Knoten aktivieren (Port 25672)

Damit sich die RabbitMQ-Instanzen untereinander synchronisieren können, muss der Port 25672 innerhalb des internen Netzwerks geöffnet werden:

Konsole
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="192.168.0.100/24"
    port protocol="tcp" port="25672" accept'

CLI-Kommunikation erlauben (Ports 35672–35682)

Die Kommandozeilen-Tools von RabbitMQ nutzen Ports im Bereich 35672 bis 35682. Diese Ports sollten ebenfalls für das interne Subnetz freigegeben werden:

Konsole
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="192.168.0.100/24"
    port protocol="tcp" port="35672-35682" accept'

AMQP-Ports freigeben (5671 und 5672)

Wenn Ihre Anwendungen das AMQP-Protokoll verwenden, müssen Sie die folgenden Ports für interne Verbindungen öffnen:

Konsole
sudo firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="192.168.0.100/24"
    port protocol="tcp" port="5672" accept'

sudo firewall-cmd --permanent --zone=public --add-rich-rule='
    rule family="ipv4"
    source address="192.168.0.100/24"
    port protocol="tcp" port="5671" accept'

Weitere Informationen zu den Netzwerkanforderungen von RabbitMQ – insbesondere wenn Sie zusätzliche Protokolle verwenden – finden Sie in der offiziellen Dokumentation.

Firewall-Regeln neu laden

Nachdem alle notwendigen Ports freigegeben wurden, müssen Sie firewalld neu laden, um die Änderungen zu übernehmen:

Konsole
sudo firewall-cmd --reload

Führen Sie diese Konfiguration auf allen Servern durch, die Teil des RabbitMQ-Clusters sein sollen.

Installation des CLI-Tools rabbitmqadmin

Die Verwaltungsoberfläche von RabbitMQ stellt ein Python-basiertes Tool namens rabbitmqadmin bereit, das verfügbar ist, sobald das Management-Plugin aktiviert wurde. Die Installation erfolgt mit den folgenden Befehlen:

Konsole
sudo wget http://localhost:15672/cli/rabbitmqadmin
sudo mv rabbitmqadmin /usr/local/bin/
sudo chmod +x /usr/local/bin/rabbitmqadmin

DNS für Hostnamenauflösung konfigurieren

Für den Aufbau eines RabbitMQ-Clusters ist es erforderlich, dass die Server sich gegenseitig über Hostnamen erkennen. Da in der Regel keine DNS-Einträge vorhanden sind, müssen Sie die Datei /etc/hosts auf jedem Server bearbeiten und IP-Adressen entsprechenden Hostnamen zuordnen.

Nachfolgend ein Beispiel für die /etc/hosts-Datei eines Master-Servers. Passen Sie die IP-Adressen und Hostnamen an Ihre Umgebung an:

Code
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

127.0.0.1 guest
::1       guest

127.0.0.1 YOUR_MASTER_SERVER_HOST_NAME
::1       YOUR_MASTER_SERVER_HOST_NAME

192.168.0.101 YOUR_MASTER_SERVER_HOST_NAME
192.168.0.102 YOUR_MIRROR_SERVER_HOST_NAME

RabbitMQ-Server zu einem Cluster verbinden

Damit mehrere RabbitMQ-Server einem gemeinsamen Cluster beitreten können, müssen alle denselben Erlang-Cookie verwenden. Standardmäßig erstellt jede Instanz einen eigenen Cookie, daher muss dieser manuell auf allen Systemen gesetzt werden.

Der Cookie lässt sich mit folgendem Befehl setzen (Sie können einen beliebigen Wert verwenden):

Konsole
sudo sh -c "echo 'WE<3COOKIES' > /var/lib/rabbitmq/.erlang.cookie"

Starten Sie anschließend den RabbitMQ-Dienst neu, damit die Änderung übernommen wird:

Konsole
sudo systemctl restart rabbitmq-server.service

Führen Sie die folgenden Befehle auf allen Knoten außer dem Master aus, um sie dem Cluster hinzuzufügen:

Konsole
sudo rabbitmqctl stop_app
sudo rabbitmqctl join_cluster "rabbit@<YOUR_MASTER_SERVER_HOST_NAME>"
sudo rabbitmqctl start_app

Prüfen Sie den Clusterstatus anschließend mit diesem Befehl:

Konsole
sudo rabbitmqctl cluster_status

Alle verbundenen Knoten werden im Abschnitt nodes und running_nodes aufgelistet. Ab diesem Moment werden alle Konfigurationen automatisch an die weiteren Knoten im Cluster übertragen.

Hochverfügbarkeit für Queues und Exchanges aktivieren

Erstellen Sie eine Hochverfügbarkeitsrichtlinie über die Verwaltungsoberfläche oder die Kommandozeile, um eine hohe Ausfallsicherheit und Datenbeständigkeit sicherzustellen. Das folgende Beispiel definiert eine Richtlinie für die Spiegelung von Daten auf zwei Knoten:

Konsole
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "all" ha ".*" '{ "ha-mode": "exactly", "ha-params": 2, "ha-sync-mode": "automatic"}'

Erklärung der Parameter:

  • -p "/": Gilt für den Standard-Virtual-Host
  • --priority 1: Bestimmt die Priorität der Regel
  • --apply-to "all": Gilt für Queues und Exchanges
  • ha: Name der Richtlinie
  • ".*": Regulärer Ausdruck für alle Ressourcen
  • JSON-Objekt: Gibt an, dass exakt 2 Knoten synchronisiert werden und die Synchronisation automatisch erfolgt

Sie können den Wert von ha-params erhöhen, um weitere Replikate zu erzeugen. Für maximale Ausfallsicherheit empfiehlt sich eine Konfiguration mit Quorum (N/2 + 1). Bedenken Sie jedoch, dass eine größere Anzahl an Kopien die Performance durch erhöhten Netzwerk-, Speicher- und IO-Bedarf beeinträchtigen kann.

Alternative Strategien zur Spiegelung

Daten auf alle Cluster-Knoten spiegeln:

Code
'{ "ha-mode": "all", "ha-sync-mode": "automatic"}'

Daten gezielt nur auf bestimmte Knoten spiegeln (z. B. node-1 und node-2):

Code
'{ "ha-mode": "nodes", "ha-params" :["rabbit@node-1", "rabbit@node-2"], "ha-sync-mode": "automatic"}'

Es ist außerdem möglich, Richtlinien für bestimmte Queue-Namen zu definieren. Angenommen, Sie haben folgende Knoten:

  • rabbit@master
  • rabbit@client-ha
  • rabbit@product-ha

Sie können dann separate Richtlinien für Queues mit dem Präfix client bzw. product erstellen:

Konsole
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-client "client.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@client-ha"], "ha-sync-mode": "automatic"}'
sudo rabbitmqctl set_policy -p "/" --priority 1 --apply-to "queues" ha-product "product.*" '{ "ha-mode": "nodes", "ha-params": ["rabbit@master", "rabbit@product-ha"], "ha-sync-mode": "automatic"}'

Hinweis: Exklusive Queues, die automatisch gelöscht werden, sobald der Client die Verbindung trennt, können nicht gespiegelt werden. Auch wenn eine entsprechende Richtlinie existiert, werden solche Queues nicht repliziert – da ihre Kurzlebigkeit eine Spiegelung überflüssig macht.

Den RabbitMQ-Cluster testen

Um die Clusterkonfiguration zu überprüfen, legen Sie über die Kommandozeile mit Hilfe des Management-Plugins eine neue Queue an:

Konsole
sudo rabbitmqadmin declare queue --vhost "/" name=my-ha-queue durable=true

Dieser Befehl erstellt eine dauerhafte Queue mit dem Namen my-ha-queue im Standard-Virtual-Host /.

Überprüfen Sie anschließend, ob diese Queue der Hochverfügbarkeitsrichtlinie zugeordnet ist und auf mehrere Knoten gespiegelt wurde:

Konsole
sudo rabbitmqctl list_queues name policy state pid slave_pids

Senden Sie nun von Ihrem Master-Knoten eine Testnachricht an die Queue:

Konsole
sudo rabbitmqadmin -u user_name -p password publish routing_key=my-ha-queue payload="hello world"

Fahren Sie anschließend RabbitMQ auf dem Master-Knoten herunter, um ein Failover-Szenario zu simulieren:

Konsole
sudo systemctl rabbitmqctl shutdown

Rufen Sie die Nachricht nun über den Spiegelknoten ab, indem Sie dessen IP-Adresse oder DNS-Namen verwenden:

Konsole
sudo rabbitmqadmin -H MIRROR_NODE_IP_OR_DNS -u user_name -p password get queue=my-ha-queue

Zum Schluss starten Sie den Master-Knoten wieder:

Konsole
sudo systemctl start rabbitmq-server.service

Standardbenutzer „guest“ entfernen

RabbitMQ wird mit einem vordefinierten Benutzerkonto guest ausgeliefert. Dieses Konto sollte auf öffentlich erreichbaren Systemen aus Sicherheitsgründen entfernt werden.

Nutzen Sie folgenden Befehl, um den Gastbenutzer zu löschen:

Konsole
sudo rabbitmqctl delete_user guest

Fazit

Mit dieser umfassenden Anleitung haben Sie erfolgreich einen stabilen und hochverfügbaren RabbitMQ-Cluster unter CentOS 7 eingerichtet. Durch die Kombination mehrerer Knoten, das Spiegeln von Queues und Exchanges sowie die Einrichtung automatischer Failover-Mechanismen ist Ihr Messaging-System gegen Ausfälle abgesichert. Die Konfiguration von Firewallregeln, DNS-Zuweisungen, Clustereinstellungen und Replikationsrichtlinien trägt zur Robustheit Ihrer Infrastruktur bei.

Überwachen Sie regelmäßig den Zustand Ihres Clusters, analysieren Sie Leistungskennzahlen und passen Sie Richtlinien an wachsende Anforderungen an. Bei korrekter Pflege stellt Ihr RabbitMQ-Cluster eine zuverlässige und sichere Nachrichtenübertragung für Ihre gesamte Microservice-Landschaft sicher.

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Linux Basics
Teilen
Noch offene Fragen?

Unser Team hilft Ihnen bei Ihrem konkreten Setup weiter – von Menschen, die die Plattform selbst betreiben.

War dieses Tutorial hilfreich?

Ihre Antwort wird anonym gespeichert und hilft uns, die Tutorials zu verbessern.

Kommentare

Noch keine Kommentare – stellen Sie die erste Frage zu diesem Tutorial.

Zum Kommentieren anmelden

Kommentare stehen centron-Kunden offen. Melden Sie sich in Ihrem Konto an, um eine Frage zu diesem Tutorial zu stellen.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren