Detaillierte Vorgänge zum Erstellen des gemeinsamen Clusters und des Spiegelclusters von RabbitMq mit Docker

Detaillierte Vorgänge zum Erstellen des gemeinsamen Clusters und des Spiegelclusters von RabbitMq mit Docker

Gewöhnlicher Cluster: Ein gewöhnlicher Cluster, der aus mehreren Knoten besteht. Nachrichten werden zufällig an die Warteschlange eines der Knoten gesendet. Andere Knoten behalten nur Metadaten. Jeder Knoten hat nur dieselben Metadaten, nämlich Warteschlangenstruktur, Switch-Struktur, Vhost usw. Wenn Verbraucher Nachrichten konsumieren, ziehen sie Nachrichten von verschiedenen Knoten. Wenn der Knoten, der die Nachricht speichert, ausfällt, kann die Nachricht nicht konsumiert werden. Wenn die Nachricht persistent gespeichert ist, muss sie warten, bis der Knoten wiederhergestellt ist, bevor sie konsumiert werden kann. Wenn sie nicht persistent gespeichert ist, geht die Nachricht verloren.

Spiegelcluster: Basierend auf dem normalen Modus werden die erforderlichen Warteschlangen in Spiegelwarteschlangen umgewandelt und existieren auf mehreren Knoten, um eine hohe Verfügbarkeit (HA) zu erreichen. Dieser Modus löst die oben genannten Probleme. Der Broker synchronisiert Nachrichtenentitäten aktiv zwischen Spiegelknoten, und es besteht keine Notwendigkeit, Daten vorübergehend abzurufen, wenn Verbraucher Daten abrufen. Die Nebenwirkungen dieses Modus liegen ebenfalls auf der Hand. Wenn zu viele Spiegelwarteschlangen vorhanden sind und eine große Anzahl von Nachrichten eingeht, wird nicht nur die Systemleistung verringert, sondern auch die Netzwerkbandbreite innerhalb des Clusters stark beansprucht. Im Allgemeinen wird der Spiegelungsmodus für Szenarien mit hohen Zuverlässigkeitsanforderungen empfohlen.

1. Erstellen Sie die Betriebsumgebung von RabbitMq

Mein Computer ist Windows 10 und ich habe zwei RabbitMQ-Knoten über Docker erstellt.

1. Fragen Sie das RabbitMQ-Bild über die Suche ab

Docker-Suche Rabbitmq

2. Ziehen Sie das neueste offizielle Image von rabbitmq durch Pull

Am besten bringen Sie die Version mit dem Tag-Management hierher. Andernfalls kann die Webverwaltungsseite beim Abrufen der neuesten Version nicht die gesamte Version anzeigen und fordert zur Übersicht auf: Nur-Verwaltungsmodus

Docker Pull RabbitMQ: 3.8.25-Management

3. Erstellen Sie einen Container

docker run -d --name rabbitmq1 -p 5672:5672 -p 15672:15672 --hostname myRabbit1 -e RABBITMQ_DEFAULT_VHOST=mein_vhost1 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin a4eb038c2ecb

--name: Containername

-p: Endpunktzuordnung

--hostname: RabbitMQ-Knotenname

-e RABBITMQ_DEFAULT_VHOST: Virtueller Hostname

-e RABBITMQ_DEFAULT_USER: Anmeldekonto

-e RABBITMQ_DEFAULT_PASS: Anmeldekennwort

a4eb038c2ecb ist die Bild-ID, ersetzen Sie sie entsprechend Ihrer eigenen Situation.

4. Starten Sie die Verwaltungsseite

In unserem Image ist die Webverwaltungsseite standardmäßig nicht aktiviert, daher verwenden wir den Befehl „exec“, um den Container aufzurufen und zu starten. Die Umgebung dieses Images ist Ubuntu.

PS C:\> docker exec -it 639a151c5440 /bin/bash
root@myRabbit:/# rabbitmq-plugins aktivieren rabbitmq_management

Besuchen Sie http://localhost:15672/ im Browser, um es zu öffnen. Machen Sie dasselbe für die anderen RabbitMQs. Der Unterschied besteht darin, dass die Ports auf 5673 und 15673 usw. geändert werden und --link verwendet wird, um beim Erstellen des Containers eine Verbindung zum ersten RabbitMQ-Knoten herzustellen (Sie können auch eine Bridge-Netzwerkverbindung erstellen), wie folgt

docker run -d --name rabbitmq2 -p 5673:5672 -p 15673:15672 --hostname myRabbit2 -e RABBITMQ_DEFAULT_VHOST=my_vhost2 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin --link rabbitmq1:myRabbit1 a4eb038c2ecb

5. Erlang-Cookies setzen

Das Erlang-Cookie konnte ursprünglich durch Festlegen des Parameters -e RABBITMQ_ERLANG_COOKIE beim Ausführen des Containers gesetzt werden, ist mittlerweile jedoch veraltet.

Wir verwenden zunächst den Befehl „Docker-Logs“, um das laufende Protokoll des Containers anzuzeigen und den Parameter „Home-Dir“ wie folgt zu finden:

PS D:\> Docker-Protokolle rabbitmq1
//.....Der Startbroker wird hier weggelassen...2021-11-17 02:19:55.859245+00:00 [info] <0.222.0>
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> Knoten: Kaninchen@myRabbit1
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> Home-Verzeichnis: /var/lib/rabbitmq
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> Konfigurationsdatei(en): /etc/rabbitmq/conf.d/10-default-guest-user.conf
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> : /etc/rabbitmq/conf.d/management_agent.disable_metrics_collector.conf
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> Cookie-Hash: Aed9pjd9vYWw3hng7Gjmkg==
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> Protokoll(e): /var/log/rabbitmq/rabbit@myRabbit1_upgrade.log
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> : <stdout>
2021-11-17 02:19:55.859245+00:00 [info] <0.222.0> Datenbankverzeichnis: /var/lib/rabbitmq/mnesia/rabbit@myRabbit1

Die Datei .erlang.cookie befindet sich also in diesem Pfad und wir können diese Datei sehen, wenn wir den Container betreten

root@myRabbit1:~# ls -a /var/lib/rabbitmq
. .. .bash_history .erlang.cookie Gedächtnis

Anschließend setzen wir die Berechtigungen für das Erlang-Cookie und führen den folgenden Code im Container aus. Wenn die Berechtigungen nicht ausreichen, melden nachfolgende Vorgänge einen Fehler.

chmod 600 /var/lib/rabbitmq/.erlang.cookie

Anschließend kopieren wir mit dem Docker-Befehl cp die Datei .erlang.cookie in rabbitmq1 auf die physische Maschine und anschließend in den rabbitmq2-Container. Der Kopierbefehl zwischen der physischen Maschine und dem Container lautet wie folgt:

  • Container kopiert Dateien auf die physische Maschine: Docker CP Containername: Containerverzeichnis
  • Verzeichnis des physischen Computers Physischer Computer kopiert Dateien in Container: docker cp Verzeichnis des physischen Computers Containername: Containerverzeichnis

Der spezifische Code lautet wie folgt:

docker cp rabbitmq1:/var/lib/rabbitmq/ d:\Arbeitsbereich\
docker cp d:\Arbeitsbereich\rabbitmq\.erlang.cookie rabbitmq2:/var/lib/rabbitmq/

Nach dem Kopieren müssen Sie den rabbitmq2-Container neu starten, da sonst beim Ausführen des Befehls rabbitmqctl der folgende Fehler gemeldet wird:

[Fehler] Die Cookie-Datei /var/lib/rabbitmq/.erlang.cookie darf nur vom Eigentümer aufgerufen werden können

2. Normalmodus

Rufen Sie nach dem Neustart den Container auf und fügen Sie den Knoten rabbitmq2 zu rabbitmq1 hinzu, um einen normalen Cluster zu erstellen. Führen Sie jeweils die folgenden Codes aus:

rabbitmqctl stop_app
rabbitmqctl zurücksetzen
rabbitmqctl join_cluster --ram rabbit@myRabbit1 //myRabbitmq1 ist der Hostname von rabbitmq im rabbitmq1-Container.
rabbitmqctl start_app

Danach können wir zwei Knoten auf der Webverwaltungsseite sehen.

Wenn Sie auf einem beliebigen Knoten eine Warteschlange erstellen, wird die gleiche Warteschlange auf dem anderen Knoten generiert. Und es kann festgestellt werden, dass sich der vhost von rabbitmq2 von my_vhost2 zu my_vhost1 geändert hat, was dasselbe wie rabbitmq ist.

3. Spiegelmodus

Der Spiegelmodus besteht darin, den RabbitMQ1-Container basierend auf dem normalen Modus aufzurufen und den folgenden Befehl einzugeben:

rabbitmqctl set_policy -p my_vhost1 ha-all "^" '{"ha-mode":"all"}' --auf alle anwenden

Das spezifische Format ist

rabbitmqctl set_policy [-p Vhost] Namensmusterdefinition [Priorität]
-p Vhost: Optionaler Parameter, der für die Warteschlange unter dem angegebenen virtuellen Host festgelegt wird. Name: Richtlinienname. Muster: Warteschlangen-Übereinstimmungsmuster (regulärer Ausdruck).
Definition: Bilddefinition, bestehend aus drei Teilen: ha-mode, ha-params, ha-sync-mode
        ha-mode: Gibt den Spiegelwarteschlangenmodus an. Gültige Werte sind alle/genau/Knoten
            all: zeigt die Spiegelung auf allen Knoten im Cluster an exact: zeigt die Spiegelung auf einer angegebenen Anzahl von Knoten an, die Anzahl der Knoten wird durch ha-params angegeben nodes: zeigt die Spiegelung auf angegebenen Knoten an, der Knotenname wird durch ha-params angegeben ha-params: als Parameter ist es eine Ergänzung zum ha-mode ha-sync-mode: der Synchronisierungsmodus von Nachrichten in der Warteschlange, die gültigen Werte sind automatisch und manuell
Priorität: optionaler Parameter, Richtlinienpriorität rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}' --apply-to-all

Oder melden Sie sich auf der RabbitMQ-Verwaltungsseite an -> Admin -> Richtlinien -> Richtlinie hinzufügen/aktualisieren

Name: Richtlinienname

Muster: ^-Übereinstimmungszeichen, nur ein ^ bedeutet Übereinstimmung mit allen. ^message bezieht sich auf den Warteschlangennamen, der mit „message“ beginnt

Definition: ha-mode=all ist der passende Typ, der in 3 Modi unterteilt ist: all (bedeutet alle Warteschlangen)

Priorität: Zuerst nach priority sortieren. Je größer der Wert, desto höher die Priorität. Bei gleicher priority nach Erstellungszeit sortieren. Je später die Erstellung, desto höher die Priorität.

Erklären Sie kurz den Unterschied zwischen Betreiberrichtlinie und Benutzerrichtlinie:

  • Die Betreiberrichtlinie wird von Dienstanbietern oder Infrastrukturabteilungen von Unternehmen verwendet, um bestimmte allgemeine Regeln festzulegen, die durchgesetzt werden müssen.
  • Mit der Benutzerrichtlinie werden Regeln für Geschäftsanwendungen festgelegt

Operatorrichtlinie und Benutzerrichtlinie werden kombiniert und auf die Warteschlange angewendet. Um zu verhindern, dass die Operatorrichtlinie bestimmte Schlüsselattribute der Warteschlange überschreibt, wie z. B. den Dead Letter Exchange Exchange, was zu unerwarteten Ergebnissen in Geschäftsanwendungen führen kann, unterstützt die Operatorrichtlinie nur vier Parameter: expire , message-ttl , max-length und max-length-bytes .

Referenzlernen:

https://www.cnblogs.com/knowledgesea/p/6535766.html

https://blog.csdn.net/belonghuang157405/article/details/83540148

Dies ist das Ende dieses Artikels zum Erstellen des normalen RabbitMq-Clusters und des gespiegelten Clusters mit Docker. Weitere Informationen zum Erstellen des RabbitMq-Clusters mit Docker finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So stellen Sie einen RabbitMQ-Cluster mit Docker bereit
  • So erstellen Sie eine RabbitMQ-Clusterumgebung mit Docker
  • So erstellen Sie einen RabbitMQ-Cluster mit Docker

<<:  Mysql praktische Übungen einfaches Bibliotheksverwaltungssystem

>>:  Beispielcode zur Implementierung eines gestapelten Karusselleffekts mit HTML+CSS+JS

Artikel empfehlen

Detaillierte Erläuterung der Nginx-Prozessverwaltungs- und Neuladeprinzipien

Prozessstrukturdiagramm Nginx ist eine Multiproze...

JS realisiert die Kartenausgabe-Animation

In diesem Artikelbeispiel wird der spezifische JS...

Detaillierte Erklärung der JS-Ereignisdelegation

1. Jede Funktion ist ein Objekt und belegt Speich...

Schritte der Docker-Lernmethode zum Erstellen des ActiveMQ-Nachrichtendienstes

Vorwort ActiveMQ ist der beliebteste und leistung...

Tutorial zur Installation und Konfiguration der Centos7-MySQL-Datenbank

1. Systemumgebung Die Systemversion nach dem Yum-...

Aufbau einer Docker+K8S-Clusterumgebung und verteilte Anwendungsbereitstellung

1. Docker installieren yum installiere Docker #St...

So zeichnen Sie eine vertikale Linie zwischen zwei Div-Tags in HTML

Als ich kürzlich eine Schnittstelle zeichnete, st...

SQL-Aggregation, Gruppierung und Sortierung

Inhaltsverzeichnis 1. Aggregierte Abfrage 1. COUN...

Bringen Sie Ihnen bei, wie Sie wartbaren JS-Code schreiben

Inhaltsverzeichnis Was ist wartbarer Code? Code-K...

4 Möglichkeiten, doppeltes Einfügen von Daten in Mysql zu vermeiden

Die gebräuchlichste Methode besteht darin, einen ...

mysql-5.7.28 Installations-Tutorial unter Linux

1. Laden Sie die Linux-Version von der offizielle...