Impossible de démarrer Zookeeper

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

Symptôme

Impossible de démarrer le processus ZooKeeper.

Messages d'erreur

Lorsque vous tentez de démarrer le processus ZooKeeper, le message d'erreur suivant est renvoyé 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
Myid ZooKeeper mal configuré Utilisateurs de cloud privé Edge
Port ZooKeeper utilisé Utilisateurs de cloud privé Edge
ID de processus incorrect dans le fichier apigee-zookeeper.pid Utilisateurs de cloud privé Edge
Échec de l'élection des leaders de 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 pour résoudre les problèmes de configuration.

Présentation du fichier myid

Chaque nœud ZooKeeper comporte deux fichiers:

  1. Le fichier /opt/apigee/apigee-zookeeper/conf/zoo.cfg, qui contient une liste de Adresses IP de tous les nœuds ZooKeeper du cluster.

    Par exemple, si /opt/apigee/apigee-zookeeper/conf/zoo.cfg contient le 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
    
  2. Le fichier /opt/apigee/data/apigee-zookeeper/data/myid contient une seule ligne de qui correspond au numéro de serveur de ce nœud ZooKeeper spécifique. Le myid de le serveur 1 contiendra le texte "1" et rien d'autre. L'ID doit être unique au sein de l'ensemble et doit avoir une valeur comprise entre 1 et 255.

    Par exemple, sur le serveur 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 dans le journal ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log les erreurs.
  2. Si un message d'avertissement semblable à "Connexion interrompue pour ID #, mon identifiant = #" s'affiche, comme le montre la figure ci-dessous, ce problème est peut-être dû au fait que le serveur n° dans le 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)
    
  3. Vérifiez le fichier /opt/apigee/apigee-zookeeper/conf/zoo.cfg et notez la server.# pour le nœud ZooKeeper actuel.
  4. Vérifiez le fichier /opt/apigee/data/apigee-zookeeper/data/myid et voyez si le texte dans ce fichier correspond au serveur.# noté à l'étape 2.
  5. En cas de non-concordance, cela signifie que vous avez identifié la cause de l'échec de l'exécution de ZooKeeper. démarrer.

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 dans le journal ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log les erreurs.
  2. Si vous remarquez l'exception java.net.BindException: Address already in use tout en étant lié au port #2181, comme illustré dans la figure ci-dessous, indique que le ZooKeeper le port 2181 est utilisé par un autre processus. Par conséquent, ZooKeeper n'a pas pu être démarré.
    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
    

Solution

Si le port 2181 ZooKeeper est toujours utilisé, suivez la procédure ci-dessous pour résoudre ce problème. problème:

  1. Utilisez la commande netstat pour rechercher le processus qui se trouve sur le port 2181. Interrompez le processus qui utilise le port 2181 de 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, le cas échéant:
    /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 essayez d'arrêter/redémarrer ZooKeeper, l'opération peut échouer, car la classe Le fichier apigee-zookeeper.pid contient un pid plus ancien/incorrect, et non celui de l'actuel de l'exécution du processus ZooKeeper. Cela peut se produire si le processus ZooKeeper s'est arrêté de manière inattendue ou brusquement pour une raison quelconque, et 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 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'ID de processus écrit dans ce fichier.
  3. Comparez les identifiants de processus issus des étapes 1 et 2. Si elles sont différentes, la cause pour ce problème est l'identifiant de processus incorrect dans apigee-zookeeper.pid file.

Solution

  1. Modifiez le fichier apigee-zookeeper.pid et remplacez l'identifiant de processus incorrect par le bon. ID de processus obtenu à l'aide 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 des responsables ZooKeeper

Diagnostic

Pour diagnostiquer un problème:

  1. Recherchez dans le journal ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log les erreurs.
  2. Vérifiez si des modifications de configuration ont pu entraîner l'élection de ZooKeeper par à l'échec.
  3. Vérifiez le /opt/apigee/apigee-zookeeper/conf/zoo.cfg et assurez-vous que tous ZooKeepers du cluster dispose du nombre et des adresses IP appropriés pour le paramètre server.#. Notez également que pour que l'élection du chef soit une réussite, elle doit compter au moins trois votants. et le nombre d'électeurs doit être composé de nombres impairs. S'il n'y a pas assez d'électeurs, par exemple électeurs, il ne peut pas atteindre un quorum pour choisir un leader parmi deux électeurs seulement.

Solution

En règle générale, l'échec d'une élection pour ZooKeeper est dû à un myid mal configuré. Utiliser la résolution de Une mauvaise configuration de ZooKeeper myid permet de 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.