2016-12-23 2 views
1

Ich habe ein wenig über das Einrichten eines dockerisierten RabbitMQ-Clusters gelesen, und google zeigt alle möglichen Ergebnisse auf dem gleichen Rechner an.Wie richte ich einen einfachen dockerisierten RabbitMQ-Cluster ein?

Ich versuche, einen RabbitMQ-Cluster über mehrere Maschinen hinweg einzurichten.

Ich habe drei Maschinen mit den Namen dockerswarmmodemaster1, dockerswarmmodemaster2 und dockerswarmmodemaster3

Auf der ersten Maschine (dockerswarmmodemaster1), ich geben Sie den folgenden Befehl ein:

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 -p 15672:15672 \ 
    -p 25672:25672 --hostname dockerswarmmodemaster1 --name roger_rabbit \ 
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

Nun ist diese eine RabbitMQ ganz gut anläuft, und ich kann auf die Admin-Seite auf 15672 gehen und sehen, dass es wie erwartet funktioniert.

Ich dann SSH zu meiner zweiten Maschine (dockerswarmmodemaster2) und das ist das Bit, auf dem ich feststecke. Ich habe Variationen auf dem folgenden Befehl versuchen:

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 \ 
    -p 15672:15672 -p 25672:25672 --name jessica_rabbit -e CLUSTERED=true \ 
    -e [email protected] \ 
    -e RABBITMQ_ERLANG_COOKIE='secret cookie here' \ 
    rabbitmq:3-management 

Egal, was ich versuche, sagt die Web-Seite auf beiden RabbitMQ Maschinen, dass es keine Cluster im Rahmen des "Cluster-Links-Seite. Ich habe noch nicht versucht, die dritte Maschine einzubinden.

So - einige weitere Informationen:
1. Die Computernamen sind durch DNS auflösbar.
2. Ich habe versucht, den Befehl --net = host im Befehl docuker run auf beiden Computern zu verwenden. Keine Änderung.
3. Ich verwende keinen Docker-Schwarm- oder Schwarm-Modus.
4. Ich habe kein docker compose installiert. Ich würde es vorziehen, es nicht zu benutzen, wenn es möglich ist.

Gibt es eine Möglichkeit, dies aus dem Docker Run-Befehl zu tun, oder muss ich den Hasen Admin CLI herunterladen und manuell dem Cluster beitreten?

Antwort

2

Sie können dieses Plugin https://github.com/aweber/rabbitmq-autocluster verwenden, um einen RabbitMQ Docker-Cluster zu erstellen.

Das Plugin verwendet etcd2 oder consul als Service-Erkennung, auf diese Weise müssen Sie nicht die rabbitmqctl Befehlszeile verwenden.

Ich habe es mit Docker Schwarm verwendet, aber es ist nicht notwendig.

Here ist das Ergebnis

1

Die offiziellen Container scheinen CLUSTERED und CLUSTER_WITH nicht Umgebungsvariablen zu unterstützen. Es unterstützt nur Listenvariablen, die in RabbitMQ Configuration angegeben sind. Laut offiziellen Clustering Guide, eine der möglichen Lösungen ist über Konfigurationsdatei. Daher können Sie dem Container nur eine eigene Konfiguration bereitstellen. Modifizierte Standardkonfiguration in Ihrem Fall wird wie folgt aussehen:

[ 
    { rabbit, [ 
    { loopback_users, [ ] }, 
    { cluster_nodes, {['[email protected]'], disc }} 
    ]} 
]. 

speichern Snippet zum Beispiel /home/user/rmq/rabbitmq.config. Tipp: Wenn Sie Knoten in Management-Konsole sehen möchten, müssen Sie eine andere Datei /home/user/rmq/enabled_plugins mit nur String

[rabbitmq_management]. 

danach hinzuzufügen, wird Ihr Befehl aussehen

docker run -d -p 4369:4369 -p 5671:5671 -p 5672:5672 -p 15671:15671 \ 
-p 15672:15672 -p 25672:25672 --name jessica_rabbit \ 
-v /home/user/rmq:/etc/rabbmitmq \ 
-e RABBITMQ_ERLANG_COOKIE='secret cookie here' \ 
rabbitmq:3-management 

PS Sie auch benötigen in Betracht ziehen, die Umgebungsvariable RABBITMQ_USE_LONGNAME zu setzen.

1

Um einen Cluster zu erstellen, müssen alle rabbitmq-Knoten, die einen Cluster bilden sollen, durch Knotennamen (Hostname) erreichbar sein. Sie müssen einen Hostnamen für jeden Andockcontainer mit der Option --hostname angeben und/etc/host-Einträge für alle anderen Container hinzufügen. Dies können Sie mit der Option --add-host oder durch manuelles Editieren der Datei/etc/hosts tun. So , hier ist das Beispiel für einen 3 rabbitmq Knoten-Cluster mit Docker-Containern (rabbitmq: 3-Management-Bild):

Zuerst ein Netzwerk erstellen, damit Sie IPs zuweisen können: docker network create --subnet=172.18.0.0/16 mynet1. Wir werden die folgenden haben:

  • 3 Docker-Container genannt rab1con, rab2con und rab3con
  • IPs bzw. 172.18.0.11 wird, -12 und -13
  • jeder von ihnen wird den Host-Namen haben jeweils Rab1, RAB2 und Rab3
  • alle der muss die gleiche erlang

Spin die erste

up cookie teilen

zweite

docker run -d --net mynet1 --ip 172.18.0.12 --hostname rab2 --add-host rab1:172.18.0.11 --add-host rab3:172.18.0.13 --name rab2con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

letzte

docker run -d --net mynet1 --ip 172.18.0.13 --hostname rab3 --add-host rab2:172.18.0.12 --add-host rab1:172.18.0.11 --name rab3con -e RABBITMQ_ERLANG_COOKIE='secret cookie here' rabbitmq:3-management 

als in contaner rab2con tun

rabbitmqctl stop_app 
rabbitmqctl join_cluster [email protected] 
rabbitmqctl start_app 

und das gleiche in rab3con und das ist es.

Verwandte Themen