Weiter unten finden Sie die docker-compose.yml-Dateien.Ändern der Führung des Zoowärterclusters, wenn der Anführer stirbt
Voraussetzungen:
I beginnen 3 zookeeper Servern als einen Cluster mit Andockfensters-komponieren (Andockfensters-compose.yml, 3 zookeepers), dann fügt man einen 4. ein (andere docker- compose.yml, 1 zoekeeper) zum Cluster. Einer der ersten 3 Tierpfleger ist der Anführer, der 4. einer ist wie erwartet ein Follower.
Problem:
Als ich die ersten drei Tierpfleger (mittels docker-compose down
) aufhören, ich „verlieren“ die Führer und ich erwarte, dass der 4. zookeeper die Führung zu übernehmen.
Das einzige, was passiert ist, dass zookeeper Fehler zeigt, z.B .:
WARN Cannot open channel to 3 at election address localhost/127.0.0.1:43888
java.net.ConnectException: Connection refused
Doing echo stat | nc localhost 52181 | grep Mode
zuvor Modus follower
für diese letzte zookeeper zurückgekehrt und gibt nichts zurück.
Der noch runnng zookeeper Server nur sagt, zum Beispiel:
INFO Closed socket connection for client /127.0.0.1:43548 (no session established for client) (org.apache.zookeeper.server.NIOServerCnxn)
Lösung 1:
Zunehmende Fristen nicht helfen, das gleiche Resultat:
ZOOKEEPER_TICK_TIME: 4000
ZOOKEEPER_INIT_LIMIT: 30
ZOOKEEPER_SYNC_LIMIT: 15
Lösung 2:
- Der andere Weg aorund:
Wenn ich die einzelnen zookeeper Server zuerst starten (ohne die anderen bereits laufenden), es gibt nur Fehlermeldungen (siehe Fehler oben) und offensichtlich ist nicht runni ng richtig seit echo stat | nc localhost 52181 | grep Mode
gibt wieder nichts zurück.
Wenn ich dann die anderen 3 Tierpfleger zum Cluster hinzufüge, läuft alles gut und der erste Tierpfleger-Server ist der leader
.
Das Töten des ersten Tierpflegers lässt 3 laufen und einer von ihnen ist der neue leader
.
Frage:
- Ich erwarte, dass in dem Cluster einen einzelnen zookeeper verlassen macht es zum 'Führer'.
- Es funktioniert "andersherum" wie in Lösung 2 beschrieben (aber dann nicht einer, sondern drei Tierpfleger laufen, nur einer wird getötet).
- Warum funktioniert es nicht wie in dem Problem beschrieben, den einzelnen Tierpfleger als Leiter oder als einzeln arbeitender Tierpfleger-Server verlassen?
Docker-compose.yml Dateien:
Ich beginne 3 zookeeper Server mit Docker-compose und die folgende Docker-compose.yml:
---
version: '2'
services:
zookeeper_1:
image: confluentinc/cp-zookeeper:3.1.1
network_mode: host
environment:
ZOOKEEPER_SERVER_ID: 1
ZOOKEEPER_CLIENT_PORT: 22181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
zookeeper_2:
image: confluentinc/cp-zookeeper:3.1.1
network_mode: host
environment:
ZOOKEEPER_SERVER_ID: 2
ZOOKEEPER_CLIENT_PORT: 32181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
zookeeper_3:
image: confluentinc/cp-zookeeper:3.1.1
network_mode: host
environment:
ZOOKEEPER_SERVER_ID: 3
ZOOKEEPER_CLIENT_PORT: 42181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
Der I Start a 4. auf die gleiche Weise:
---
version: '2'
services:
zookeeper_4:
image: confluentinc/cp-zookeeper:3.1.1
network_mode: host
environment:
ZOOKEEPER_SERVER_ID: 4
ZOOKEEPER_CLIENT_PORT: 52181
ZOOKEEPER_TICK_TIME: 2000
ZOOKEEPER_INIT_LIMIT: 5
ZOOKEEPER_SYNC_LIMIT: 2
ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
Das hat mich in die richtige Richtung geführt, danke! Ich werde meine Frage so bald wie möglich aktualisieren. – rocksteady