No se puede iniciar Zookeeper

Estás viendo la documentación de Apigee Edge.
Ve a la Documentación de Apigee X.
información

Síntoma

No se puede iniciar el proceso de ZooKeeper.

Mensajes de error

Cuando intentas iniciar el proceso de ZooKeeper, se devuelve el siguiente mensaje de error. que indica que no se pudo iniciar ZooKeeper:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

Causas posibles

En la siguiente tabla, se enumeran las posibles causas de este problema:

Causa Para
Miid de ZooKeeper mal configurado Usuarios de la nube privada perimetral
Puerto ZooKeeper en uso Usuarios de la nube privada perimetral
ID de proceso incorrecto en el archivo apigee-zookeeper.pid Usuarios de la nube privada perimetral
Fracaso de las elecciones de líderes de ZooKeeper Usuarios de la nube privada perimetral

Haz clic en un vínculo de la tabla para ver las posibles soluciones de esa causa.

Miid de ZooKeeper mal configurado

Las siguientes secciones proporcionan una descripción general del archivo myid y describen cómo diagnosticar e resolver los problemas de configuración incorrecta.

Descripción general del archivo myid

En cada nodo de ZooKeeper, hay dos archivos:

  1. El archivo /opt/apigee/apigee-zookeeper/conf/zoo.cfg, que contiene una lista de Las IP para todos los nodos de ZooKeeper en el clúster.

    Por ejemplo, si /opt/apigee/apigee-zookeeper/conf/zoo.cfg contiene el elemento Las IP de 3 nodos de ZooKeeper forman parte del clúster de la siguiente manera:

    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. El archivo /opt/apigee/data/apigee-zookeeper/data/myid contiene una sola línea de texto que corresponde al número del servidor de ese nodo de ZooKeeper en particular. El myid de el servidor 1 contendrá el texto "1" y nada más. El ID debe ser único dentro del ensamble y debe tener un valor entre 1 y 255.

    Por ejemplo, en el servidor ZooKeeper.1, El archivo /opt/apigee/data/apigee-zookeeper/data/myid solo debe contener el texto 1 como se muestra a continuación:

    $ cat myid
    1
    

Diagnóstico

  1. Comprueba el registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log de ZooKeeper para errores.
  2. Si ves un mensaje de advertencia similar a “No se pudo establecer la conexión para el número de ID, mi ID es el número de ID”, como se muestra en la siguiente imagen, la posible causa de este problema podría ser que el servidor (#) en el archivo myid está mal configurado o está dañado.
    [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. Revisa el archivo /opt/apigee/apigee-zookeeper/conf/zoo.cfg y toma nota server.# para el nodo de ZooKeeper actual.
  4. Revisa el archivo /opt/apigee/data/apigee-zookeeper/data/myid y comprueba si el texto de este archivo coincida con el servidor.# que se indica en el paso 2.
  5. Si hay una discrepancia, entonces identificaste la causa por la que ZooKeeper no pudo comenzar.

Solución

Si el archivo myid está configurado de forma incorrecta, modifíquelo y reemplace el valor por texto correcto que representa el parámetro server.# en zoológico.cfg.

Puerto de ZooKeeper en uso

Diagnóstico

  1. Comprobar el registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log de ZooKeeper para errores.
  2. Si ves la excepción java.net.BindException: Address already in use mientras se vincula al puerto #2181, como se muestra en la siguiente figura, indica que ZooKeeper el puerto 2181 está siendo utilizado por otro proceso. Por lo tanto, no se pudo iniciar ZooKeeper.
    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. Utiliza el siguiente comando netstat para confirmar que el puerto 2181 de ZooKeeper se está utilizando por otro proceso:
    netstat -an | grep 2181
    

Solución

Si el puerto 2181 de ZooKeeper sigue en uso, sigue estos pasos para solucionar esto: problema:

  1. Usa el comando netstat para encontrar el proceso que se retiene en el puerto 2181. Elimina el proceso que está utilizando el puerto 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. Borra archivos PID y de bloqueo si los hay:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. Reinicia ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

ID de proceso incorrecto en el archivo apigee-zookeeper.pid

Cuando intentes detener o reiniciar ZooKeeper, es posible que falle debido a El archivo apigee-zookeeper.pid contiene un pid anterior o incorrecto, y no el del valor actual ejecutando el proceso de ZooKeeper. Esto puede suceder si el proceso de ZooKeeper finaliza de forma inesperada o de forma abrupta por algún motivo y no se borró el archivo apigee-zookeeper.pid.

Diagnóstico

  1. Obtén el ID del proceso de ZooKeeper en ejecución actualmente ejecutando la Comando ps:
    ps -ef | grep zookeeper
    
  2. Verifica si el archivo /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid existe. Si existe, anota el ID del proceso escrito en este archivo.
  3. Compara los ID de proceso de los pasos 1 y 2. Si son diferentes, entonces la causa para este problema es tener un ID de proceso incorrecto en apigee-zookeeper.pid file.

Solución

  1. Edita el archivo apigee-zookeeper.pid y reemplaza el ID de proceso incorrecto por el ID del proceso obtenido del comando ps (paso n.o 1 anterior).
  2. Reinicia ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Falla en las elecciones de líderes de ZooKeeper

Diagnóstico

Para diagnosticar, haz lo siguiente:

  1. Comprueba el registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log de ZooKeeper para errores.
  2. Comprueba si hubo algún cambio en la configuración que pueda provocar la elección de ZooKeeper de la a fracasar.
  3. Revisa el /opt/apigee/apigee-zookeeper/conf/zoo.cfg y asegúrate de que todos Los ZooKeepers en el clúster tienen el número y las direcciones IP correctos para el parámetro server.#. Además, ten en cuenta que para que la elección de líder tenga éxito, se necesita un mínimo de 3 votantes. y el número de votantes debe ser impar. Si hay muy pocos votantes, como solo 2. votantes, no puede llegar a un quórum para elegir un líder entre solo 2 votantes.

Solución

Por lo general, el error en las elecciones de ZooKeeper se debe a un myid mal configurado. Usa la resolución en Miid de ZooKeeper mal configurado para solucionar el error electoral.

Si el problema persiste y se necesita un diagnóstico más detallado, comunícate con el equipo de asistencia de Apigee Edge.