No se puede iniciar Zookeeper

Estás consultando la documentación de Apigee Edge.
Consulta 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 muestra 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
El myid de ZooKeeper está mal configurado Usuarios de la nube privada perimetral
Puerto de 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
Error en las elecciones de líder de ZooKeeper Usuarios de la nube privada perimetral

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

Configuración incorrecta de myid de ZooKeeper

En las siguientes secciones, se proporciona una descripción general del archivo myid y se describe cómo diagnosticar y resolver 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 IP para todos los nodos de ZooKeeper en el clúster.

    Por ejemplo, si /opt/apigee/apigee-zookeeper/conf/zoo.cfg contiene las IP de 3 nodos de ZooKeeper que forman parte del clúster, como se muestra a continuación:

    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 de servidor de ese nodo de ZooKeeper en particular. El myid del 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 de 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. Consulta el registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log de ZooKeeper para ver si hay errores.
  2. Si ves un mensaje WARN similar a “Connection failed for id #, my id = #”, como se muestra en la siguiente figura, entonces la posible causa de este problema podría ser que el servidor # en el archivo myid está mal configurado o 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. Verifica el archivo /opt/apigee/apigee-zookeeper/conf/zoo.cfg y anota el servidor.# para el nodo de ZooKeeper actual.
  4. Verifica el archivo /opt/apigee/data/apigee-zookeeper/data/myid y verifica si el texto de este archivo coincide con el servidor.# anotado en el paso 2.
  5. Si hay una discrepancia, identificaste la causa por la que ZooKeeper no se inicia.

Resolución

Si el archivo myid no está configurado correctamente, edita el archivo myid y reemplaza el valor por un texto correcto que represente el parámetro server.# en zoo.cfg.

Puerto de ZooKeeper en uso

Diagnóstico

  1. Verifica el registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log de ZooKeeper para ver si hay errores.
  2. Si observas la excepción java.net.BindException: Address already in use mientras se vincula al puerto #2181, como se muestra en la siguiente figura, esto indica que otro proceso está usando el puerto de ZooKeeper 2181. 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. Usa el siguiente comando netstat para confirmar que el puerto 2181 de ZooKeeper está siendo utilizado por otro proceso:
    netstat -an | grep 2181
    

Resolución

Si el puerto 2181 de ZooKeeper todavía está en uso, sigue estos pasos para solucionar este problema:

  1. Usa el comando netstat para encontrar el proceso que está reteniendo el puerto 2181. Cierra el proceso que usa 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. Limpia los archivos PID y de bloqueo que existan:
    /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 intentas detener o reiniciar ZooKeeper, es posible que falle, ya que el archivo apigee-zookeeper.pid contiene un PID antiguo o incorrecto y no el del proceso de ZooKeeper que se está ejecutando. Esto puede suceder si el proceso de ZooKeeper finalizó de forma inesperada o abrupta por algún motivo y no se borró el archivo apigee-zookeeper.pid.

Diagnóstico

  1. Para obtener el ID del proceso de ZooKeeper que se encuentra en ejecución, ejecuta el 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 tomados de los pasos 1 y 2. Si son diferentes, entonces la causa de este problema es tener un ID de proceso incorrecto en el apigee-zookeeper.pid file..

Resolución

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

Error en las elecciones de líder de ZooKeeper

Diagnóstico

Para diagnosticar el problema, sigue estos pasos:

  1. Consulta el registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log de ZooKeeper para ver si hay errores.
  2. Verifica si hubo algún cambio de configuración que pueda provocar que falle la elección de líder en ZooKeeper.
  3. Verifica el /opt/apigee/apigee-zookeeper/conf/zoo.cfg y asegúrate de que todos los ZooKeepers del clúster tengan el número y las direcciones IP adecuados para el parámetro server.#. Además, ten en cuenta que, para que la elección del líder tenga éxito, debe haber al menos 3 votantes y la cantidad de votantes debe ser impar. Si hay muy pocos votantes, como solo 2, no puede llegar a un quórum para decidir a un líder entre solo 2.

Resolución

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

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