Vous consultez la documentation d'Apigee Edge.
Consultez la
documentation Apigee X. en savoir plus
Problème constaté
Impossible de lancer le processus ZooKeeper.
Messages d'erreur
Lorsque vous tentez de démarrer le processus ZooKeeper, le message d'erreur suivant s'affiche, indiquant que ZooKeeper n'a pas pu être démarré:
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
Causes possibles
Le tableau suivant répertorie les causes possibles de ce problème:
Cause | Pour |
---|---|
La valeur myid de ZooKeeper est mal configurée | Utilisateurs de cloud privé périphérique |
Port ZooKeeper utilisé | Utilisateurs de cloud privé périphérique |
ID de processus incorrect dans le fichier apigee-zookeeper.pid | Utilisateurs de cloud privé périphérique |
Échec électoral du responsable ZooKeeper | Utilisateurs de cloud privé périphérique |
Cliquez sur un lien du tableau pour afficher les solutions possibles à cette cause.
La valeur myid de ZooKeeper est mal configurée.
Les sections suivantes présentent le fichier myid et décrivent comment diagnostiquer et résoudre les problèmes de configuration incorrecte.
Présentation du fichier myid
Chaque nœud ZooKeeper comporte deux fichiers:
- Le fichier
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
, qui contient la liste des adresses IP de tous les nœuds ZooKeeper du cluster.Par exemple, si
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
contient les adresses IP de trois nœuds ZooKeeper du cluster, procédez comme suit:server.1=11.11.11.11:2888:3888 server.2=22.22.22.22:2888:3888 server.3=33.33.33.33:2888:3888
- Le fichier
/opt/apigee/data/apigee-zookeeper/data/myid
contient une seule ligne de texte qui correspond au numéro de serveur de ce nœud ZooKeeper. L'identifiant myid du serveur 1 contient le texte "1" et rien d'autre. L'ID doit être unique au sein de l'ensemble et sa valeur doit être comprise entre 1 et 255.Par exemple, sur ZooKeeper server.1, le fichier
/opt/apigee/data/apigee-zookeeper/data/myid
ne doit contenir que le texte 1, comme indiqué ci-dessous:$ cat myid 1
Diagnostic
- Recherchez les erreurs éventuelles dans le journal ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
. - Si un message d'avertissement semblable à "Connexion interrompue pour l'ID #, mon ID = #" s'affiche, comme illustré ci-dessous, il est possible que le numéro de serveur présent dans le fichier myid soit mal configuré ou corrompu.
[myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] - Connection broken for id 2, my id = 2, error = java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:375) at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker. run(QuorumCnxManager.java:747)
- Vérifiez le fichier
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
et notez la valeur "server.#" correspondant au nœud ZooKeeper actuel. - Vérifiez le fichier
/opt/apigee/data/apigee-zookeeper/data/myid
et vérifiez si le texte qu'il contient correspond au texte "server.#" noté à l'étape 2. - En cas d'incohérence, cela signifie que vous avez identifié la cause de l'échec du démarrage de ZooKeeper.
Résolution
Si le fichier myid n'est pas configuré correctement, modifiez-le et remplacez la valeur par un texte correct représentant le paramètre server.# dans le fichier zoo.cfg.
Port ZooKeeper utilisé
Diagnostic
- Recherchez les erreurs éventuelles dans le journal ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
. - Si vous remarquez l'exception
java.net.BindException: Address already in use
lors de la liaison au port 2181 (comme illustré dans la figure ci-dessous), cela signifie que le port 2181 de ZooKeeper est utilisé par un autre processus. Par conséquent, ZooKeeper n'a pas pu être lancé.2017-04-26 07:00:10,420 [myid:3] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:2181 2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67) at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95) at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
- Utilisez la commande netstat ci-dessous pour vérifier que le port 2181 de ZooKeeper est bien utilisé par un autre processus :
netstat -an | grep 2181
Résolution
Si le port 2181 de ZooKeeper est toujours utilisé, procédez comme suit pour résoudre ce problème:
- Utilisez la commande
netstat
pour trouver le processus qui contient le port 2181. Arrêtez le processus qui utilise le port 2181 ZooKeeper :$ netstat -antp | grep 2181 tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 28016/java <defunct> $ kill -9 28016
. - Nettoyez les fichiers PID et verrouillez-les s'ils existent :
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- Redémarrez ZooKeeper :
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
ID de processus incorrect dans le fichier apigee-zookeeper.pid
Lorsque vous tentez d'arrêter ou de redémarrer ZooKeeper, celui-ci peut échouer, car le fichier apigee-zookeeper.pid
contient un pid ancien/incorrect, et non celui du processus ZooKeeper en cours d'exécution. Cela peut se produire si le processus ZooKeeper s'est arrêté de manière inattendue ou soudaine pour une raison quelconque et que le fichier apigee-zookeeper.pid
n'a pas été supprimé.
Diagnostic
- Obtenez l'identifiant du processus ZooKeeper en cours d'exécution en exécutant la commande
ps
:ps -ef | grep zookeeper
- Vérifiez si le fichier
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
existe. S'il existe, notez l'identifiant de processus écrit dans ce fichier. - Comparez les ID de processus des étapes 1 et 2. S'ils sont différents, le problème est dû à un ID de processus incorrect dans
apigee-zookeeper.pid file.
.
Résolution
- Modifiez le fichier apigee-zookeeper.pid et remplacez l'identifiant de processus incorrect par l'identifiant de processus correct obtenu à partir de la commande ps (étape 1 ci-dessus).
- Redémarrez ZooKeeper :
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Échec de l'élection du responsable ZooKeeper
Diagnostic
Pour diagnostiquer:
- Recherchez les erreurs éventuelles dans le journal ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
. - Vérifiez si des modifications de configuration ont pu entraîner l'échec de l'élection du responsable par ZooKeeper.
- Vérifiez
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
et assurez-vous que tous les ZooKeepers du cluster disposent du nombre et des adresses IP appropriés pour le paramètre server.#. Notez également que pour que l'élection du responsable soit réussie, il doit y avoir au moins trois votants et le nombre d'électeurs doit être impair. S'il n'y a pas assez d'électeurs (deux votants seulement, par exemple), il n'est pas possible de se joindre à un quorum pour désigner un meneur parmi seulement deux votants.
Résolution
En général, l'échec d'une élection ZooKeeper est dû à un identifiant myid mal configuré. Utilisez la résolution de l'élément Mas configuration ZooKeeper myid pour résoudre l'échec de l'élection.
Si le problème persiste et qu'un diagnostic plus poussé est nécessaire, contactez l'assistance Apigee Edge.