web-dev-qa-db-fra.com

Erreur Zookeeper: impossible d'ouvrir le canal vers X lors de l'élection

J'ai installé zookeeper sur 3 serveurs aws différents. Ce qui suit est la configuration dans tous les serveurs

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper
clientPort=2181
server.1=x.x.x.x:2888:3888
server.2=x.x.x.x:2888:3888
server.3=x.x.x.x:2888:3888

Les trois instances ont un fichier myid sur var/zookeeper avec l'identifiant approprié. Tous les trois serveurs ont tous les ports ouverts à partir de la console aws. Mais quand je lance le serveur zookeeper, j'obtiens l'erreur suivante dans toutes les instances.

2015-06-19 12:09:22,989 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382] 
  - Cannot open channel to 2 at election address /x.x.x.x:3888
Java.net.ConnectException: Connection refused
  at Java.net.PlainSocketImpl.socketConnect(Native Method)
  at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:339)
  at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:200)
  at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:182)
  at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
  at Java.net.Socket.connect(Socket.Java:579)
  at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.Java:368)
  at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.Java:402)
  at org.Apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.Java:840)
  at org.Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:762)
2015-06-19 12:09:23,170 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumCnxManager@382]
   - Cannot open channel to 3 at election address /x.x.x.x:3888
Java.net.ConnectException: Connection refused
  at Java.net.PlainSocketImpl.socketConnect(Native Method)
  at Java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.Java:339)
  at Java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.Java:200)
  at Java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.Java:182)
  at Java.net.SocksSocketImpl.connect(SocksSocketImpl.Java:392)
  at Java.net.Socket.connect(Socket.Java:579)
  at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.Java:368)
  at org.Apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.Java:402)
  at org.Apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.Java:840)
  at org.Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:762)
2015-06-19 12:09:23,170 [myid:1] - INFO  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@849] - Notification time out: 25600
41
Rahul

Comment définir l'adresse IP du serveur local dans chaque nœud? Si vous avez indiqué l'adresse IP publique, l'auditeur n'aurait pas réussi à se connecter au port. Vous devez spécifier 0.0.0.0 pour le nœud actuel

server.1=0.0.0.0:2888:3888
server.2=192.168.10.10:2888:3888
server.3=192.168.2.1:2888:3888

Ce changement doit également être effectué sur les autres nœuds.

79
espeirasbora

J'ai rencontré la question de sauvegarde et l'ai résolue.

assurez-vous que le myid est la sauvegarde avec votre configuration dans Zoo.cfg.

veuillez vérifier votre fichier Zoo.cfg dans votre répertoire conf, qui contient ce contenu.

server.1=zookeeper1:2888:3888  
server.2=zookeeper2:2888:3888  
server.3=zookeeper3:2888:3888  

et vérifiez le myid dans le répertoire dataDir de votre serveur. Par exemple:

disons que le dataDir défini sur le Zoo.cfg est '/home/admin/data'

puis sur zookeeper1, vous devez avoir un fichier nommé myid et avoir la valeur 1 pour ce fichier; sur zookeeper2, vous devez avoir un fichier nommé myid et avoir la valeur 2 sur ce fichier ; sur zookeeper3, vous devez avoir un fichier nommé myid et avoir la valeur 3 sur ce fichier.

si ce n'est pas le cas, le serveur écoutera sur une mauvaise adresse IP: port.

8
aluenkinglee

Si votre propre nom d'hôte résout en 127.0.0.1 (dans mon cas, le nom d'hôte se trouvait dans/etc/hosts), zookeeper ne démarrera pas sans que 0.0.0.0 ne soit présent dans le fichier Zoo.cfg, mais si votre nom d'hôte est résolu en réel IP de la machine, vous pouvez mettre son propre nom d’hôte dans le fichier de configuration.

4
Carles Figuerola

Voici quelques informations de modèle ansible jinja2 pour automatiser la création d'un cluster avec le nom d'hôte 0.0.0.0 dans Zoo.cfg.

{% for url in zookeeper_hosts_list %}
  {%- set url_Host = url.split(':')[0] -%}
  {%- if url_Host == ansible_fqdn or url_Host in     ansible_all_ipv4_addresses -%}
server.{{loop.index0}}=0.0.0.0:2888:3888
{% else %}
server.{{loop.index0}}={{url_Host}}:2888:3888
{% endif %}
{% endfor %}
3
slackey

C'est ce qui a fonctionné pour moi

Step 1:
Node 1:
Zoo.cfg
server.1= 0.0.0.0:<port>:<port2>
server.2= <IP>:<port>:<port2>
.
.
.
server.n= <IP>:<port>:<port2>

Node 2 :
server.1= <IP>:<port>:<port2>
server.2= 0.0.0.0:<port>:<port2>
.
.
.
server.n= <IP>:<port>:<port2>


Now in location defined by datadir on your Zoo.cfg
Node 1:
echo 1 > <datadir>/id

Node 2:
echo 2 > <datadir>/id

.
.
.


Node n:
echo n > <datadir>/id

Celui-ci m'a aidé à démarrer le gardien du zoo avec succès, mais j'en saurai plus une fois que je commencerai à jouer avec. J'espère que cela t'aides.

3
user5688074

Avait des problèmes similaires sur un ensemble de gardien de zoo à 3 nœuds. La solution a été conseillée par espeirasbora et a été redémarrée.

C'est donc ce que j'ai fait

zookeeper1, zookeeper2 et zookeeper3

A. Issue :: Les znodes de mon ensemble n'ont pas pu démarrer

B. Configuration du système :: 3 Znodes sur trois 3 machines

C. Erreur ::

Dans mon fichier de journal de zookeper, je pouvais voir les erreurs suivantes

2016-06-26 14:10:17,484 [myid:1] - WARN  [SyncThread:1:FileTxnLog@334] - fsync-ing the write ahead log in SyncThread:1 took 1340ms which will adversely effect operation latency. See the ZooKeeper troubleshooting guide
2016-06-26 14:10:17,847 [myid:1] - WARN  [RecvWorker:2:QuorumCnxManager$RecvWorker@810] - Connection broken for id 2, my id = 1, error = 
Java.io.EOFException
    at Java.io.DataInputStream.readInt(DataInputStream.Java:392)
    at org.Apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.Java:795)
2016-06-26 14:10:17,848 [myid:1] - WARN  [RecvWorker:2:QuorumCnxManager$RecvWorker@813] - Interrupting SendWorker
2016-06-26 14:10:17,849 [myid:1] - WARN  [SendWorker:2:QuorumCnxManager$SendWorker@727] - Interrupted while waiting for message on queue
Java.lang.InterruptedException
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.Java:2014)
    at Java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.Java:2088)
    at Java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.Java:418)
    at org.Apache.zookeeper.server.quorum.QuorumCnxManager.pollSendQueue(QuorumCnxManager.Java:879)
    at org.Apache.zookeeper.server.quorum.QuorumCnxManager.access$500(QuorumCnxManager.Java:65)
    at org.Apache.zookeeper.server.quorum.QuorumCnxManager$SendWorker.run(QuorumCnxManager.Java:715)
2016-06-26 14:10:17,851 [myid:1] - WARN  [SendWorker:2:QuorumCnxManager$SendWorker@736] - Send worker leaving thread
2016-06-26 14:10:17,852 [myid:1] - WARN  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@89] - Exception when following the leader
Java.io.EOFException
    at Java.io.DataInputStream.readInt(DataInputStream.Java:392)
    at org.Apache.jute.BinaryInputArchive.readInt(BinaryInputArchive.Java:63)
    at org.Apache.zookeeper.server.quorum.QuorumPacket.deserialize(QuorumPacket.Java:83)
    at org.Apache.jute.BinaryInputArchive.readRecord(BinaryInputArchive.Java:99)
    at org.Apache.zookeeper.server.quorum.Learner.readPacket(Learner.Java:153)
    at org.Apache.zookeeper.server.quorum.Follower.followLeader(Follower.Java:85)
    at org.Apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.Java:846)
2016-06-26 14:10:17,854 [myid:1] - INFO  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:Follower@166] - shutdown called
Java.lang.Exception: shutdown Follower

D. Actions & Resolution ::

Sur chaque znode a. J'ai modifié le fichier de configuration $ ZOOKEEPER_HOME/conf/Zoo.cfg pour définir l'IP de la machine sur "0.0.0.0" tout en conservant l'adresse IP des 2 autres znodes. b. redémarré le znode c. vérifié l'état d.Voila, j'étais ok

Voir ci-dessous

-------------------------------------------------

sur Zookeeper1

#Before modification 
[zookeeper1]$ tail -3   $ZOOKEEPER_HOME/conf/Zoo.cfg 
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888

#After  modification 
[zookeeper1]$ tail -3  $ZOOKEEPER_HOME/conf/Zoo.cfg 
server.1=0.0.0.0:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888

#Start the Zookeper (Stop and STart or restart )
[zookeeper1]$ $ZOOKEEPER_HOME/bin/zkServer.sh  start
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower

[zookeeper1]$ $ZOOKEEPER_HOME/bin/zkServer.sh  status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower

-------------------------------------------------- -------

sur Zookeeper2

#Before modification 
[zookeeper2]$ tail -3   $ZOOKEEPER_HOME/conf/Zoo.cfg 
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888

#After  modification 
[zookeeper2]$ tail -3  $ZOOKEEPER_HOME/conf/Zoo.cfg 
server.1=zookeeper1:2888:3888
server.2=0.0.0.0:2888:3888
server.3=zookeeper3:2888:3888

#Start the Zookeper (Stop and STart or restart )
[zookeeper2]$ $ZOOKEEPER_HOME/bin/zkServer.sh  start
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower

[zookeeper2]$ $ZOOKEEPER_HOME/bin/zkServer.sh  status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower

-------------------------------------------------- -------

sur Zookeeper3

#Before modification 
[zookeeper3]$ tail -3   $ZOOKEEPER_HOME/conf/Zoo.cfg 
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=zookeeper3:2888:3888

#After  modification 
[zookeeper3]$ tail -3  $ZOOKEEPER_HOME/conf/Zoo.cfg 
server.1=zookeeper1:2888:3888
server.2=zookeeper2:2888:3888
server.3=0.0.0.0:2888:3888

#Start the Zookeper (Stop and STart or restart )
[zookeeper3]$ $ZOOKEEPER_HOME/bin/zkServer.sh  start
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower

[zookeeper3]$ $ZOOKEEPER_HOME/bin/zkServer.sh  status
ZooKeeper JMX enabled by default
ZooKeeper remote JMX Port set to 52128
ZooKeeper remote JMX authenticate set to false
ZooKeeper remote JMX ssl set to false
ZooKeeper remote JMX log4j set to true
Using config: /opt/zookeeper-3.4.8/bin/../conf/Zoo.cfg
Mode: follower
2

Nous avons rencontré le même problème, dans notre cas, la cause fondamentale du problème est le nombre trop élevé de connexions client. La valeur par défaut ulimit sur une instance aws ec2 est 1024, ce qui empêche les nœuds de zookeeper de communiquer entre eux.

La solution à cela est de changer ulimit en un nombre plus élevé -> (> ulimit -n 20000), puis arrêtez zookeeper.

0
SureshKumar

J'ai eu un problème similaire. L'état de 2 de mes trois nœuds zookeeper était indiqué comme "autonome", même si le fichier Zoo.cfg indiquait qu'il devait être mis en cluster. Mon troisième noeud n'a pas pu démarrer, avec l'erreur que vous avez décrite. Je pense que ce qui a résolu le problème pour moi était de courir zkServer.sh start successivement sur mes trois nœuds, de telle sorte que zookeeper était en cours d’exécution avant l’initiation de Zoo.cfg initLimit. J'espère que cela fonctionne pour quelqu'un.

0
dyang

Dans mon cas, le problème était que je devais démarrer les trois serveurs de zookeeper. Seulement alors, je pouvais me connecter au serveur de zookeeper en utilisant ./zkCli.sh

0
Abdul Mohsin