2016-04-15 6 views
0

Ich habe einen RabbitMQ-Cluster mit drei Knoten eingerichtet: rabbit1, rabbit2 und rabbit3, die jeweils in einem Andock-Container ausgeführt werden.RabbitMQ Cluster wählt keinen neuen Master

Alle Warteschlangen werden unter den drei Knoten gespiegelt und rabbit1 ist der Master. Wenn ich den Behälter für Rabbit2 oder Rabbit3 stoppe, funktionieren die zwei verbleibenden Knoten gut. Wenn ich zum Beispiel 3 Nachrichten in einer Warteschlange habe, existieren diese immer noch auf Kaninchen1 und dem anderen Knoten, der immer noch aktiv ist.

Wenn ich jedoch hase1 stoppe, werden die Warteschlangen von kaninchen2 und kaninchen3 geleert, bis ich wieder hase1 starte. Wenn ich eine Nachricht an hase2 oder hase3 sende, wird die Nachricht empfangen, aber nicht in der Warteschlange gespeichert. während, wenn rabbit1 aktiv ist und ich etwas an rabbit2/rabbit3 sende, wird die Nachricht gespeichert und korrekt synchronisiert.

Gibt es irgendeine Möglichkeit oder irgendeine Konfiguration, die ich berücksichtigen muss, damit die Nachricht nicht von den Slaves geleert wird, wenn der Master heruntergefahren wird, aber die Slaves stattdessen einen neuen Master wählen oder zumindest die Nachrichten speichern? Vielen Dank im Voraus.

Antwort

0

Das Einrichten des Clusters ist eine Sache, aber Sie müssen auch die Warteschlangenspiegelung konfigurieren. Warteschlangen werden standardmäßig nicht auf anderen Knoten repliziert: Sie müssen explizit indicate which queue(s) must be replicated and how mithilfe von Richtlinien verwenden.

Die oben verlinkte RabbitMQ-Dokumentation als Beispiele für mehrere Anwendungsfälle.

+0

Ich hätte klarstellen müssen: Ich habe die richtigen Richtlinien festgelegt, um die Nachrichten unter allen Notizen zu replizieren und automatisch zu synchronisieren. Deshalb bin ich so verwirrt, warum es nicht funktioniert. Meine Richtlinien sind wie folgt: rabbitmqctl set_policy ha-all "^ ha \." "{" "ha-mode" ":" "all" "," ha-sync-mode ":" automatisch "}" – KaffeeKaethe

+0

Also entsprechend so "Wenn Sie einen RabbitMQ-Knoten stoppen, der den Master einer gespiegelten Warteschlange enthält, Einige Slave auf einem anderen Knoten werden zum Master hochgestuft. "Es sollte funktionieren. – KaffeeKaethe

+0

Wie lautet der Name Ihrer Warteschlange (n)? –

0

Also habe ich das Problem gefunden:

ich die Warteschlange in meinem Code zu erklären, und obwohl rabbitmq bedeutet „zählen“ diese Warteschlangen sie unter der Leitung nicht und zum Beispiel auftreten kann weder mit "betrachtet wird rabbitmqctl list_queues ".

Wenn ich die Warteschlange über die Benutzeroberfläche oder über rabbitmqadmin deklariere und den Dienst mit der bereits bestehenden Warteschlange verbinden lasse, funktioniert es einwandfrei.

Ich frage mich allerdings, warum die Warteschlangen nicht im Management-Tool erscheinen, obwohl sie offensichtlich irgendwo existieren (da kann ich lesen/schieben).

Verwandte Themen