1

Vous trouverez ci-dessous les fichiers docker-compose.yml.Changement de la direction du cluster de zookeeper lorsque le leader meurt

Pré-requis:

Je commence à 3 serveurs Zookeeper en tant que cluster à l'aide docker-Compose (docker-compose.yml, 3 zookeepers), puis-je ajouter un 4. un (un autre docker- compose.yml, 1 zookeeper) au cluster. L'un des 3 premiers zookeepers est le leader, le 4. est un suiveur, comme prévu.

Problème:

Quand j'arrête les trois premiers (zookeepers au moyen de docker-compose down), je « perdre » le leader et je me attends le 4. Zookeeper de prendre la direction.

La seule chose qui arrive est que Zookeeper montre des erreurs, .: par exemple

WARN Cannot open channel to 3 at election address localhost/127.0.0.1:43888 
java.net.ConnectException: Connection refused 

Faire echo stat | nc localhost 52181 | grep Mode précédemment retourné le mode follower pour ce dernier Zookeeper et retourne maintenant rien.

Le serveur Zookeeper encore runnng dit que, par exemple:

INFO Closed socket connection for client /127.0.0.1:43548 (no session established for client) (org.apache.zookeeper.server.NIOServerCnxn) 

Solution 1:

  • L'augmentation des délais n'a pas aidé, même résultat:

    ZOOKEEPER_TICK_TIME: 4000

    ZOOKEEPER_INIT_LIMIT: 30

    ZOOKEEPER_SYNC_LIMIT: 15

Solution 2:

  • L'autre façon aorund:

Quand je démarre le serveur Zookeeper seul au premier (sans les autres déjà en cours d'exécution), il retourne juste des messages d'erreur (voir les erreurs ci-dessus) et n'est évidemment pas runni ng correctement puisque echo stat | nc localhost 52181 | grep Mode ne renvoie rien à nouveau.

Lorsque j'ajoute ensuite les 3 autres zookeepers au cluster, tout fonctionne bien et le premier serveur zookeeper est le leader.

Tuer le premier gardien de zoo laisse 3 en marche et l'un d'eux est le nouveau leader.

Question:

  • Je pense que laisser un seul Zookeeper du cluster en fait le 'leader'.
  • Il fonctionne "dans l'autre sens" comme décrit dans la solution 2 (mais pas un, mais trois gardiens de zoo sont laissés en marche, un seul est tué).
  • Pourquoi cela ne fonctionne-t-il pas comme décrit dans le problème, en laissant le zookeeper unique en tant que leader ou en tant que serveur de zookeeper travaillant seul, respectivement?

fichiers docker-compose.yml:

Je commence à 3 serveurs Zookeeper avec docker-Compose et le docker-compose.yml suivante:

--- 
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 

Le départ I un 4. de la même manière:

--- 
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 

Répondre

2

une chose à garder à l'esprit: zookeeper ne viendra que si la majorité des serveurs sont en cours d'exécution. Donc, si vous avez 4 serveurs et en abattre 3, zookeeper ne sera disponible que si vous en lancez deux de plus.

quelle version de zookeeper utilisez-vous? si elle est antérieure à 3.5 ou (vous utilisez 3.5 et n'utilisez pas les commandes reconfig), vous devrez redémarrer les serveurs lorsque vous changez de configuration.

+0

Cela m'a conduit dans la bonne direction, merci! Je vais mettre à jour ma question dès que possible. – rocksteady