Verteilt RabbitMQ Knoten nicht gegenseitig zu erkennen
Arbeite ich an einem RabbitMQ verteilt POC und ich bin stecken in die Grundlagen der Cluster-Knoten.
Ich versuche zu Folgen, den Kaninchen tutorial auf clustering, so ist das meine Referenz.
Nach der Installation von erlang (R14B04) und Kaninchen (2.8.2-1) habe ich kopiert, die .erlang.cookie
Inhalt der Datei von einem Knoten auf den anderen beiden.
Ich war mir nicht sicher, wie erlang, um zu bemerken, diese änderung musste ich neu starten die Maschinen selbst (ziemlich brute-force, aber ich weiß nicht, erlang).
Darüber hinaus eröffnete ich in iptables-4369 und 5 zusätzliche ports für die Kommunikation und unter
folgende config:
/usr/lib64/erlang/bin/sys.config
{kernel,[{inet_dist_listen_min, XX00},{inet_dist_listen_max,XX05}]}]
Dann ein weiterer Neustart (dumm ich weiß), um zu überprüfen, erlang nimmt diese berücksichtigt aber immer noch, wenn ich laufen:
rabbitmqctl cluster rabbit@HostName1
Bekomme ich:
Clustering node rabbit@HostName2 with [rabbit@HostName1] ...
Error: {no_running_cluster_nodes,[rabbit@HostName1],
[rabbit@HostName1]}
Gibt es eine chance mein hantieren mit der erlang.cookie oder mit den ports nicht gelingen, aber ich weiß nicht, wie um Sie zu überprüfen. Ich habe versucht, die Eingabe erl
in die cmd und dann erl_epmd:names()
oder andere Befehle um weitere Informationen zu erhalten, aber ich bin wahrscheinlich Weg in erlang land.
Wäre wirklich für jede Hilfe dankbar,
Update:
Ich habe versucht, pingen zwei erlang-Knoten manuell und bekam pang
zurück.
Ich habe die folgenden:
Mit zwei Knoten, hielt rabbitmq (war nicht sicher, ob benötigt, aber um sicher zu sein), begann erlang so (erl -sname dilbert
und erl -sname dilbert2
), wenn die erlang-Kommandozeile gestartet, lief ich node().
auf jeden von Ihnen und bekam dilbert@HostName1
und dilbert2@HostName2
beziehungsweise. Ich habe dann versucht zu laufen net_adm:ping('dilbert').
und net_adm:ping('dilbert@HostName1').
mit dem einfachen Anführungszeichen und ohne Sie aus den beiden Knoten (Namen geändert versteht sich) und habe an allen 8 Fällen pang
.
Bei mir lief nodes().
auf einer der Maschinen hab ich wieder ein leeres array.
Ich habe auch versucht, damit alle traffic in der firewall (Skript) und dann versuchen, führen Sie die oben genannten Befehle (keine Sorge, Sie sind zurück auf jetzt) und immer noch zurück pang
.
Update2:
Aus irgendeinem Grund hatte ich cookies Diskrepanz, die ich brauchte, um zu lösen (danke @kjw0188 für den Vorschlag [ich lief erlang:get_cookie().
in der erlang-Befehl Linie]).
Dies hat nicht geholfen und ich brauchte halt iptables komplett (nicht sicher, warum, aber ich werd es bald) und laden Sie die erlang-Knoten mit -name dilbert@my-ip
weil mein rackspace-Server keine dns-Namen. Diese ermöglichten schließlich mich zu einem pong und sehen Sie sich die Knoten gegenseitig sehen (nodes().
gibt einen nicht-leeren array nach dem "ping").
Das problem ich bin nun konfrontiert ist, wie Sie Sie anweisen, RabbitMQ zu verwenden -Namen statt -sname beim starten erlang.
Habe nicht versucht es noch (erlang-noob). Weißt du, wie ich überprüfen kann, um zu sehen, dass der aktuelle Knoten nicht ausgeführt wird? Ich denke, RabbitMQ beginnt mit einem Knoten, wenn es geladen wird, damit ich aufhören werde, aber ich möchte, um zu überprüfen, kein Knoten aktiv ist, bevor ich versuche Ihren Vorschlag. Dank
Sie sollten nicht brauchen, nehmen Sie sich Kaninchen, aber wenn Sie möchten, können Sie versuchen, den Dienst stoppen
sudo /etc/init.d/rabbitmq-server stop
Immer noch kein Glück, siehe mein update oben. Dank
Tun die cookies-match? Versuchen
erlang:get_cookie().
auf dilbert
und dogbert
oder Einstellung der cookie manuell mit der -setcookie
Befehlszeile-option. Wenn Sie kann immer noch nicht pingen sich gegenseitig, wie es scheint, erlang nicht finden können, die anderen Knoten aus irgendeinem Grund. Sind die hosts erreichbar mit normalen ping
? Verwenden Sie den Hostnamen für den Maschinen für den ping, nicht die IP-Adresse.
InformationsquelleAutor Ittai | 2012-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Also ich hatte mehrere Probleme mit der Verbindung meiner zwei RabbitMQ-Knoten-
Ich will hinzufügen, dass meine Knoten sind auf rackspace gehostet, und daher haben Sie nicht ein Standard-exposable hostname und erfordern iptables da es keine DMZ oder gebaut in Sicherheits-Konzept des Konzerns wie amazon.
Probleme:
1. Cookie - Nicht sicher, wie oder warum, aber ich hatte mehrere Instanzen von
.erlang.cookie
(in/root
, in meinem home-Verzeichnis und in/var/lib/rabbitmq/
) behielt ich nur das eine, in rabbitmq und überprüft alle Knoten haben den gleichen cookie.2. IPTables - um für die Knoten kommunizieren, die ich brauchte, um öffnen Sie die
epmd
Hafen und der Bereich der ports für die eigentliche Kommunikationinet_dist_listen_min
inet_dist_listen_max
.empd
ist das in der Regel 4369-port und für den anderen Bereich verwenden, was Bereich, den Sie möchten.${otherNode}
ist die ip von meinem anderen Knoten.Ich musste auch so konfigurieren, erlang durch rabbitmq diese ports verwenden (siehe config-Datei am Ende)
3. HostName - zu Sehen, wie ich don ' T haben Sie einen Hostnamen, die ich brauchte, um zu Bearbeiten, die Kaninchen-Skripte zu verwenden
-name
und nicht-sname
(der erste erzählt erlang nehmen Sie die ganzen Namen, die letztere steht für den Kurznamen, und so fügt ein @ - Zeichen und den Hostnamen).Dies wurde erreicht durch die Bearbeitung von:
/usr/lib/rabbitmq/bin/rabbitmqctl
Hinzugefügt am Anfang der definition des
RABBITMQ_NODE_IP_ADDRESS
Eigenschaftin den eigentlichen Befehl erl, ich änderte
-sname ${RABBITMQ_NODENAME} \
zu-name ${RABBITMQ_NODENAME}@${RABBITMQ_NODE_IP_ADDRESS}\
.Dies machte rabbitmq hören nur auf die angegebene ip-Adresse (angegeben in der config-Datei am Ende) und laden Sie mit dieser ip-Adresse anstelle der in der Regel den Hostnamen.
bearbeitet
/usr/lib/rabbitmq/bin/rabbitmq-server
Verändert der eigentliche Befehl erl aus
-sname ${RABBITMQ_NODENAME} \
zu-name ${RABBITMQ_NODENAME}@${RABBITMQ_NODE_IP_ADDRESS}
\Hinzugefügt ein Kaninchen conf (
/etc/rabbitmq/rabbitmq-env.conf
) Datei mit-Einige Ressourcen, die mir geholfen, mich auf den Weg geben:
RabbitMQ Clustering Guide
Clustering-RabbitMQ-Server für Hohe Verfügbarkeit
rabbitmq-env.conf(5) manual page
Knoten-Kommunikation durch die öffentliche IP-Adresse erlang-mailing-Liste (Mitte post)
Konfigurieren von RabbitMQ-Cluster auf Cloud
Hoffe, das wird helfen, jemand anderes.
EDIT:
Nicht sicher, wie ich mich geirrt habe, aber es schien mein erlang-Kaninchen-port-Anweisungen wurden nicht beachtet oder waren nicht genug. Endete darin, dass alle Kommunikation zwischen den beiden Knoten...
InformationsquelleAutor Ittai
Einer Sache wirklich aufpassen, whitespace-Zeichen jeder Art in die erlang-cookie-Datei, insbesondere Zeilenumbrüche NACH dem Inhalt des Cookies. Solange beide identisch sind, die Dinge sind in Ordnung, aber wenn einer einen Zeilenumbruch und der andere nicht, was nicht funktioniert.
InformationsquelleAutor Jonathan Oliver
Hintergrund: ich Stand vor dem gleichen Problem beim einrichten der Rabbitmq-cluster. Ich war mit 2 docker-Container läuft auf meinem host-Maschine, die ist äquivalent zu 2 separate Knoten und ich konnte nicht erstellen Sie ein cluster von diesen beiden.
Lösung: 1. Stellen Sie sicher, Sie haben die gleiche erlang cookie auf allen cluster-Knoten, der Standard-Speicherort ist
/var/lib/rabbitmq/.erlang.cookie
. Diese Datei wird für die Authentifizierung verwendet, so stellen Sie sicher, Sie haben es gleich auf alle Knoten. Nach dem ändern der .erlang.cookie starten Sie Ihren rabbitmq service.Stellen Sie sicher, dass Knoten zugänglich sind, aus einer anderen, verwenden Sie ping oder telnet Verbindung überprüfen.
Prüfen, dass /etc/hosts die richtigen Einträge, zum Beispiel, wenn rabbit2 will join cluster-rabbit1, /etc/hosts von rabbit2 enthalten sollte.
Nun stop-service mit
$rabbitmqctl stop_app
gefolgt von$rabbitmqctl join_cluster rabbit@rabbit1
, starten Sie den Dienst durchrabbitmqctl start_app
und überprüfen$rabbitmqctl cluster_status
um zu sehen, ob Sie sich der cluster ist oder nicht.Folgte ich dem rabbitmq offiziellen Dokumentation, um den setup-cluster.
InformationsquelleAutor Rahul Mishra
ändern RabbitMQ sname/name Verhalten Bearbeiten Sie die Skripte:
Beispiel
Im Skript rabbitmqctl es ist das folgende Stück code:
Sie haben, um es zu ändern in:
InformationsquelleAutor Vincenzo Maggio
http://pearlin.info/?p=1672
so müssen Sie kopieren die Cookies von den Knoten, die Sie verbinden möchten,
Beispiel :- rabbit@node1
rabbit@node2
gehen rabbit@node1 und kopieren Sie die cookie von cat /var/lib/rabbitmq/.erlang.cookie
gehen rabbit@node2 entfernen Sie den aktuellen cookie und füge die neuen ein.
auf demselben Knoten
sollte es tun.
gleichen hier dokumentiert.
http://pearlin.info/?p=1672
http://pearlin.info/?p=1672
ist nicht Englisch, noch ist es über die Programmierung.InformationsquelleAutor user2348359