Vous consultez la documentation Apigee Edge.
Accédez à la
documentation**Apigee X**. info
Problème constaté
Impossible de démarrer 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 démarrer :
+ 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 |
|---|---|
| myid ZooKeeper mal configuré | Utilisateurs de Cloud privé Edge |
| Port ZooKeeper en cours d'utilisation | Utilisateurs de Cloud privé Edge |
| ID de processus incorrect dans le fichier apigee-zookeeper.pid | Utilisateurs de Cloud privé Edge |
| Échec de l'élection du responsable ZooKeeper | Utilisateurs de Cloud privé Edge |
Cliquez sur un lien du tableau pour afficher les solutions possibles à cette cause.
myid ZooKeeper mal configuré
Les sections suivantes présentent le fichier myid et expliquent comment diagnostiquer et résoudre les problèmes de configuration.
Présentation du fichier myid
Sur chaque nœud ZooKeeper, il existe deux fichiers :
- Le fichier
/opt/apigee/apigee-zookeeper/conf/zoo.cfgcontient une liste d' adresses IP pour tous les nœuds ZooKeeper du cluster.Par exemple, si le
/opt/apigee/apigee-zookeeper/conf/zoo.cfgcontient les adresses IP de trois nœuds ZooKeeper faisant partie du cluster, 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/myidcontient une seule ligne de texte qui correspond au numéro de serveur de ce nœud ZooKeeper particulier. Le myid du serveur 1 contient le texte "1" et rien d'autre. L'ID doit être unique dans l'ensemble et doit avoir une valeur comprise entre 1 et 255.Par exemple, sur le serveur ZooKeeper.1, le
/opt/apigee/data/apigee-zookeeper/data/myidfichier ne doit contenir que le texte 1 comme illustré ci-dessous :$ cat myid 1
Diagnostic
- Recherchez les erreurs dans le journal ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logpour erreurs. - Si vous voyez le message d'avertissement semblable à "Connection broken for id #, my id = #",
comme illustré dans la figure ci-dessous, la cause possible de ce problème peut être que le serveur #
du fichier myid est 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.cfget notez le serveur.# pour le nœud ZooKeeper actuel. - Vérifiez le fichier
/opt/apigee/data/apigee-zookeeper/data/myidet voyez si le texte de ce fichier correspond au serveur.# noté à l'étape 2. - En cas de non-concordance, vous avez identifié la cause de l'échec du démarrage de ZooKeeper.
Solution
Si le fichier myid est mal configuré, modifiez-le et remplacez la valeur par un texte correct représentant le paramètre server.# dans le fichier zoo.cfg.
Port ZooKeeper en cours d'utilisation
Diagnostic
- Recherchez les erreurs dans le journal ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logpour erreurs. - Si vous remarquez l'exception
java.net.BindException: Address already in uselors de la liaison au port #2181, comme illustré dans la figure ci-dessous, cela indique que le port ZooKeeper 2181 est utilisé par un autre processus. Par conséquent, ZooKeeper n'a pas pu démarrer.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 ZooKeeper 2181 est bien utilisé
par un autre processus :
netstat -an | grep 2181
Solution
Si le port ZooKeeper 2181 est toujours en cours d'utilisation, procédez comme suit pour résoudre ce problème :
- Utilisez la commande
netstatpour trouver le processus qui utilise le port 2181. Arrêtez le processus qui utilise le port ZooKeeper 2181 :$ 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 de verrouillage, 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/de redémarrer ZooKeeper, l'opération peut échouer, car le
apigee-zookeeper.pid fichier contient un pid plus 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
brutale pour une raison quelconque et que le fichier apigee-zookeeper.pid n'a pas été supprimé.
Diagnostic
- Obtenez l'ID de processus du processus ZooKeeper en cours d'exécution en exécutant la
pscommande :ps -ef | grep zookeeper
- Vérifiez si le fichier
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pidexiste. Si c'est le cas, notez l'ID de processus écrit dans ce fichier. - Comparez les ID de processus obtenus aux étapes 1 et 2. S'ils sont différents, la cause
de ce problème est que l'ID de processus est incorrect dans le
apigee-zookeeper.pid file.
Solution
- Modifiez le fichier apigee-zookeeper.pid et remplacez l'ID de processus incorrect par l'ID 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 effectuer un diagnostic :
- Recherchez les erreurs dans le journal ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logpour erreurs. - Vérifiez si des modifications de configuration ont pu entraîner l'échec de l'élection du responsable ZooKeeper.
- Vérifiez le
/opt/apigee/apigee-zookeeper/conf/zoo.cfget 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 réussisse, il doit y avoir au moins trois électeurs et que leur nombre doit être impair. S'il y a trop peu d'électeurs, par exemple seulement deux électeurs, il ne peut pas y avoir de quorum pour décider d'un responsable parmi seulement deux électeurs.
Solution
En règle générale, l'échec de l'élection ZooKeeper est dû à un myid mal configuré. Utilisez la solution décrite dans la section myid ZooKeeper mal configuré pour résoudre l'échec de l'élection.
Si le problème persiste et qu'un diagnostic plus approfondi est nécessaire, contactez l'assistance Apigee Edge.