Impossible de démarrer Zookeeper

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:

  1. 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
    
  2. 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

  1. Recherchez les erreurs éventuelles dans le journal ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log.
  2. 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)
    
  3. Vérifiez le fichier /opt/apigee/apigee-zookeeper/conf/zoo.cfg et notez la valeur "server.#" correspondant au nœud ZooKeeper actuel.
  4. 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.
  5. 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

  1. Recherchez les erreurs éventuelles dans le journal ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log.
  2. 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)
    
  3. 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:

  1. 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
    
    .
  2. 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
    
  3. 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

  1. Obtenez l'identifiant du processus ZooKeeper en cours d'exécution en exécutant la commande ps :
    ps -ef | grep zookeeper
    
  2. 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.
  3. 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

  1. 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).
  2. Redémarrez ZooKeeper :
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Échec de l'élection du responsable ZooKeeper

Diagnostic

Pour diagnostiquer:

  1. Recherchez les erreurs éventuelles dans le journal ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log.
  2. Vérifiez si des modifications de configuration ont pu entraîner l'échec de l'élection du responsable par ZooKeeper.
  3. 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.