Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
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 |
|---|---|
| myid de ZooKeeper mal configurado | Usuarios de la nube privada de Edge |
| Puerto de ZooKeeper en uso | Usuarios de la nube privada de Edge |
| ID de proceso incorrecto en el archivo apigee-zookeeper.pid | Usuarios de la nube privada de Edge |
| Falla en la elección del líder de ZooKeeper | Usuarios de la nube privada de Edge |
Haz clic en un vínculo de la tabla para ver las posibles soluciones a esa causa.
myid de ZooKeeper mal configurado
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:
- El archivo
/opt/apigee/apigee-zookeeper/conf/zoo.cfgque contiene una lista de IPs para todos los nodos de ZooKeeper en el clúster.Por ejemplo, si
/opt/apigee/apigee-zookeeper/conf/zoo.cfgcontiene las IPs de 3 nodos de ZooKeeper que 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
- El archivo
/opt/apigee/data/apigee-zookeeper/data/myidcontiene una sola línea de texto que corresponde al número de servidor de ese nodo de ZooKeeper en particular. El myid de servidor 1 contendría el texto "1" y nada más. El ID debe ser único dentro del conjunto y debe tener un valor entre 1 y 255.Por ejemplo, en el servidor.1 de ZooKeeper, el
/opt/apigee/data/apigee-zookeeper/data/myidarchivo solo debe contener el texto 1 como se muestra a continuación:$ cat myid 1
Diagnóstico
- Revisa el registro de ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logen busca de errores. - Si ves el mensaje WARN similar a “Connection broken for id #, my id = #”,
como se muestra en la siguiente figura, 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)
- Revisa el archivo
/opt/apigee/apigee-zookeeper/conf/zoo.cfgy anota el server.# para el nodo de ZooKeeper actual. - Revisa el archivo
/opt/apigee/data/apigee-zookeeper/data/myidy comprueba si el texto de este archivo coincide con el server.# que se anotó en el paso #2. - Si hay una falta de coincidencia, identificaste la causa por la que ZooKeeper no se inicia.
Solución
Si el archivo myid está configurado de forma incorrecta, 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
- Revisa el registro de ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logen busca de errores. - Si observas la excepción
java.net.BindException: Address already in usemientras se vincula al puerto #2181, como se muestra en la siguiente figura, indica que otro proceso está usando el puerto 2181 de ZooKeeper. 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)
- Usa el siguiente comando netstat para confirmar que otro proceso está usando el puerto 2181 de ZooKeeper:
netstat -an | grep 2181
Solución
Si el puerto 2181 de ZooKeeper aún está en uso, sigue los pasos que se indican a continuación para solucionar este problema:
- Usa el comando
netstatpara encontrar el proceso que está reteniendo el puerto 2181. Finaliza 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
- Limpia los archivos pid y de bloqueo si existen:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- 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 porque el
apigee-zookeeper.pid archivo contiene un pid anterior o incorrecto, y no el del proceso de ZooKeeper que se ejecuta actualmente. 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
- Para obtener el ID del proceso de ZooKeeper que se ejecuta actualmente, ejecuta el
pscomando:ps -ef | grep zookeeper
- Verifica si existe el archivo
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid. Si existe, anota el ID del proceso escrito en este archivo. - Compara los IDs de proceso tomados de los pasos #1 y #2. Si son diferentes, la causa
de este problema es tener el ID de proceso incorrecto en el
apigee-zookeeper.pid file.
Solución
- 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).
- Reinicia ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Falla en la elección del líder de ZooKeeper
Diagnóstico
Para diagnosticar:
- Revisa el registro de ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logen busca de errores. - Verifica si hubo cambios de configuración que puedan causar que falle la elección del líder de ZooKeeper.
- Revisa
/opt/apigee/apigee-zookeeper/conf/zoo.cfgy asegúrate de que todos los ZooKeepers del clúster tengan el número y las direcciones IP correctos para el parámetro server.#. También ten en cuenta que, para que la elección del líder se realice correctamente, debe haber al menos 3 votantes y la cantidad de votantes debe ser impar. Si hay muy pocos votantes, como solo 2 votantes, no se puede llegar a un quórum para decidir un líder entre solo 2 votantes.
Solución
Por lo general, la falla en la elección de ZooKeeper se debe a un myid mal configurado. Usa la resolución en myid de ZooKeeper mal configurado para solucionar la falla en la elección.
Si el problema persiste y se necesita un diagnóstico adicional, comunícate con la Asistencia de Apigee Edge.