Estás viendo la documentación de Apigee Edge.
Ir a la
documentación de Apigee X. info
Síntoma
Los problemas de conectividad de ZooKeeper pueden manifestarse como diferentes síntomas, como los siguientes:
- Errores de implementación del proxy de API
- Llamadas a la API de administración que fallan con errores 5XX
- Los routers o los procesadores de mensajes no se inician
- Los componentes de estadísticas informan la pérdida de conexión de ZooKeeper en system.logs
Mensajes de error
A continuación, se proporcionan ejemplos de mensajes de error que se pueden observar cuando se pierde la conexión con los nodos de ZooKeeper.
- El siguiente error se muestra en los registros del servidor de administración cuando falla la implementación de un proxy de API
debido a la pérdida de conexión de ZooKeeper:
org: env: main INFO ZOOKEEPER - ZooKeeperServiceImpl.exists() : Retry path existence path: /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable, reason: KeeperErrorCode = ConnectionLoss org: env: main ERROR ZOOKEEPER - ZooKeeperServiceImpl.exists() : Could not detect existence of path: /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable , reason: KeeperErrorCode = ConnectionLoss org: env: main ERROR KERNEL.DEPLOYMENT - ServiceDeployer.startService() : ServiceDeployer.deploy() : Got a life cycle exception while starting service [ServerRegistrationService, Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable] : com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorCheckingPathExis tence, message = Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable, associated contexts = []} 2015-03-25 10:22:39,811 org: env: main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() : Error in deploying the deployment : EventService com.apigee.zookeeper.ZooKeeperException: Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:339) ~[zookeeper-1.0.0.jar:na] at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists( ZooKeeperServiceImpl.java:323) ~[zookeeper-1.0.0.jar:na] at ... snipped
- Durante el inicio, los routers y los procesadores de mensajes se conectan a ZooKeeper. Si hay
problemas de conectividad con ZooKeeper, estos componentes no se iniciarán con el siguiente
error:
2017-08-01 23:20:00,404 CuratorFramework-0 ERROR o.a.c.f.i.CuratorFrameworkImpl - CuratorFrameworkImpl.logError() : Background operation retry gave up org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965] at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkBackgroundRetry(CuratorFrameworkImpl.java:710) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:827) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275) [curator-framework-2.5.0.jar:na] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
- La IU de Edge puede mostrar el siguiente error que indica que no pudo verificar el
estado de implementación de los proxies de API:
Error Fetching Deployments Error while checking path existence for path: path
Causas posibles
En la siguiente tabla, se enumeran las posibles causas de este problema:
| Causa | Para |
|---|---|
| Problema de conectividad de red en diferentes centros de datos | Usuarios de la nube privada de Edge |
| El nodo de ZooKeeper no entrega solicitudes | Usuarios de la nube privada de Edge |
Haz clic en un vínculo de la tabla para ver las posibles soluciones a esa causa.
Problema de conectividad de red en diferentes centros de datos
Diagnóstico
Un clúster de ZooKeeper puede tener nodos que abarcan varias regiones o centros de datos, como DC-1 y DC-2. La topología típica de 2 centros de datos de Apigee Edge tendrá lo siguiente:
- Servidores de ZooKeeper 1, 2 y 3 como votantes en DC-1
- ZooKeeper 4 y 5 como votantes y ZooKeeper 6 como observador en DC-2
Si la región DC-1 deja de funcionar o se interrumpe la conectividad de red entre DC-1 y DC-2, entonces los nodos de ZooKeeper no podrán elegir un nuevo líder en DC-2 y no podrán comunicarse con el nodo líder. Los observadores de ZooKeeper no pueden elegir un nuevo líder, y los dos votantes restantes en DC-2 no tienen un quórum de al menos 3 nodos votantes para elegir un nuevo líder. Por lo tanto, los ZooKeepers en DC-2 no podrán procesar ninguna solicitud. Los nodos de ZooKeeper restantes en DC-2 seguirán intentando conectarse de nuevo a los votantes de ZooKeeper para encontrar el líder.
Solución
Aplica las siguientes soluciones para abordar este problema en el orden especificado.
Si no puedes resolver el problema después de probar estas soluciones, comunícate con el equipo de asistencia de Apigee.
Solución 1
- Trabaja con los administradores de red para reparar el problema de conectividad de red entre los centros de datos.
- Cuando el conjunto de ZooKeeper pueda comunicarse entre los centros de datos y elegir un líder de ZooKeeper, los nodos deberían estar en buen estado y poder procesar solicitudes.
Solución 2
- Si la conectividad de red tarda en repararse, una solución alternativa es volver a configurar
ZooKeeper nodes en la región en la que están inactivos. Por ejemplo, vuelve a configurar el clúster de ZooKeeper
en DC-2 para que los 3 nodos de ZooKeeper en esta región sean todos votantes y quita el
server.#en elzoo.cfgde los ZooKeepers de la región DC-1.- En el siguiente ejemplo,
zoo.cfgconfigura nodos para 2 regiones en las que DC-1 usaus-eanombres de host que denotan la región del este de EE.UU. y DC-2 usaus-wonombres de host que denotan la región del oeste de EE.UU. (NOTA: Solo se muestran las configuraciones relevantes):server.1=zk01ea.us-ea.4.apigee.com:2888:3888 server.2=zk02ea.us-ea.4.apigee.com:2888:3888 server.3=zk03ea.us-ea.4.apigee.com:2888:3888 server.4=zk04wo.us-wo.4.apigee.com:2888:3888 server.5=zk05wo.us-wo.4.apigee.com:2888:3888 server.6=zk06wo.us-wo.4.apigee.com:2888:3888:observer
En el ejemplo anterior, vuelve a configurar
zoo.cfgde la siguiente manera:server.1=zk04wo.us-wo.4.apigee.com:2888:3888 server.2=zk05wo.us-wo.4.apigee.com:2888:3888 server.3=zk06wo.us-wo.4.apigee.com:2888:3888
- Con el código con la configuración,
crea un archivo
/opt/apigee/customer/application/zookeeper.propertiescon lo siguiente:conf_zoo_quorum=server.1=zk04wo.us-wo.4.apigee.com:2888:3888\ \nserver.2=zk05wo.us-wo.4.apigee.com:2888:3888\ \nserver.3=zk06wo.us-wo.4.apigee.com:2888:3888\
En el ejemplo anterior, se quitan los nodos del este de EE.UU. y los nodos del oeste de EE.UU. se promueven a votantes cuando se quita la
:observeranotación. - En el siguiente ejemplo,
- Crea una copia de seguridad de
/opt/apigee/apigee-zookeeper/conf/zoo.cfgy del archivo anterior/opt/apigee/customer/application/zookeeper.properties.Estos archivos se usarán para restablecer los valores predeterminados cuando se restablezca la conectividad de red entre los centros de datos.
Inhabilita la notación de observador para el nodo observador. Para ello, agrega la siguiente configuración en la parte superior de
/opt/apigee/customer/application/zookeeper.properties:conf_zoo_peertype=
-
Edita el archivo
/opt/apigee/data/apigee-zookeeper/data/myidde la siguiente manera:- Para
server.1, cambia la entrada dentro demyidde 4 a 1. - Para
server.2, cambia elmyidde 5 a 2. - Para
server.3, cambia elmyidde 6 a 3.
- Para
- Reinicia los nodos de ZooKeeper en la región en la que volviste a configurar el clúster de ZooKeeper.
- Repite la configuración anterior desde el paso 1b hasta el paso 5 en todos los nodos de ZooKeeper en DC-2.
- Valida que los nodos estén activos con un líder:
$ echo srvr | nc zk04wo.us-wo.4.apigee.com 2181 > echo srvr | nc zk05wo.us-wo.4.apigee.com 2181 > echo srvr | nc zk06wo.us-wo.4.apigee.com 2181
El resultado de este comando contendrá una línea que dice "mode" seguida de "leader" si es el líder o "follower" si es un seguidor.
Cuando se restablezca la red entre los centros de datos, se podrán revertir los cambios de configuración de ZooKeeper en los nodos de ZooKeeper en DC-2.
Solución 3
- Si no se inicia el nodo de ZooKeeper en el clúster, reinícialo.
- Consulta los registros de ZooKeeper para determinar por qué se inhabilitó el nodo de ZooKeeper.
Los registros de ZooKeeper están disponibles en el siguiente directorio:
$ cd /opt/apigee/var/log/apigee-zookeeper $ ls -l total 188 -rw-r--r--. 1 apigee apigee 2715 Jul 22 19:51 apigee-zookeeper.log -rw-r--r--. 1 apigee apigee 10434 Jul 17 19:51 config.log -rw-r--r--. 1 apigee apigee 169640 Aug 1 19:51 zookeeper.log
- Comunícate con el equipo de asistencia de Apigee y proporciona los registros de ZooKeeper para solucionar la causa de cualquier nodo de ZooKeeper que se haya detenido.
El nodo de ZooKeeper no entrega solicitudes
Un nodo de ZooKeeper en el conjunto puede dejar de estar en buen estado y no poder responder a las solicitudes del cliente Esto podría deberse a lo siguiente:
- El nodo se detuvo sin reiniciarse.
- El nodo se reinició sin que se habilitara el inicio automático.
- La carga del sistema en el nodo hizo que se inhabilitara o dejara de estar en buen estado.
Diagnóstico
- Ejecuta los siguientes comandos de verificación de estado de ZooKeeper en cada uno de los nodos de ZooKeeper y
verifica el resultado:
-
$ echo "ruok" | nc localhost 2181
Resultado de ejemplo:
$ echo "ruok" | nc localhost 2181 imok
-
echo srvr | nc localhost 2181
Verifica el modo para determinar si el nodo de ZooKeeper es un líder o un seguidor.
Resultado de ejemplo para un nodo de ZooKeeper único y todo en uno:
$ echo srvr | nc localhost 2181 ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Latency min/avg/max: 0/0/88 Received: 4206601 Sent: 4206624 Connections: 8 Outstanding: 0 Zxid: 0x745 Mode: standalone Node count: 282
-
$ echo mntr | nc localhost 2181
Este comando enumera las variables de ZooKeeper que se pueden usar para verificar el estado de el clúster de ZooKeeper.
Resultado de ejemplo:
$ echo mntr | nc localhost 2181 zk_version 3.4.5-1392090, built on 09/30/2012 17:52 GMT zk_avg_latency 0 zk_max_latency 88 zk_min_latency 0 zk_packets_received 4206750 zk_packets_sent 4206773 zk_num_alive_connections 8 zk_outstanding_requests 0 zk_server_state standalone zk_znode_count 282 zk_watch_count 194 zk_ephemerals_count 1 zk_approximate_data_size 22960 zk_open_file_descriptor_count 34 zk_max_file_descriptor_count 4096
-
$ echo stat | nc localhost 2181
Este comando enumera las estadísticas sobre el rendimiento y los clientes conectados.
Resultado de ejemplo:
$ echo stat | nc localhost 2181 ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Clients: /10.128.0.8:54152[1](queued=0,recved=753379,sent=753385) /10.128.0.8:53944[1](queued=0,recved=980269,sent=980278) /10.128.0.8:54388[1](queued=0,recved=457094,sent=457094) /10.128.0.8:54622[1](queued=0,recved=972938,sent=972938) /10.128.0.8:54192[1](queued=0,recved=150843,sent=150843) /10.128.0.8:44564[1](queued=0,recved=267332,sent=267333) /127.0.0.1:40820[0](queued=0,recved=1,sent=0) /10.128.0.8:53960[1](queued=0,recved=150844,sent=150844) Latency min/avg/max: 0/0/88 Received: 4206995 Sent: 4207018 Connections: 8 Outstanding: 0 Zxid: 0x745 Mode: standalone Node count: 282
-
$ echo cons | nc localhost 2181
Este comando proporciona detalles extendidos sobre las conexiones de ZooKeeper.
Resultado de ejemplo:
$ echo cons | nc localhost 2181 /127.0.0.1:40864[0](queued=0,recved=1,sent=0) /10.128.0.8:54152[1](queued=0,recved=753400,sent=753406,sid=0x15d521a96d40007, lop=PING,est=1500321588647,to=40000,lcxid=0x972e9,lzxid=0x745,lresp=1502334173174, llat=0,minlat=0,avglat=0,maxlat=26) /10.128.0.8:53944[1](queued=0,recved=980297,sent=980306,sid=0x15d521a96d40005, lop=PING,est=1500321544896,to=40000,lcxid=0xce92a,lzxid=0x745,lresp=1502334176055, llat=0,minlat=0,avglat=0,maxlat=23) /10.128.0.8:54388[1](queued=0,recved=457110,sent=457110,sid=0x15d521a96d4000a, lop=PING,est=1500321673852,to=40000,lcxid=0x4dbe3,lzxid=0x745,lresp=1502334174245, llat=0,minlat=0,avglat=0,maxlat=22) /10.128.0.8:54622[1](queued=0,recved=972967,sent=972967,sid=0x15d521a96d4000b, lop=PING,est=1500321890175,to=40000,lcxid=0xccc9d,lzxid=0x745,lresp=1502334182417, llat=0,minlat=0,avglat=0,maxlat=88) /10.128.0.8:54192[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40008, lop=PING,est=1500321591985,to=40000,lcxid=0x8,lzxid=0x745,lresp=1502334184475, llat=3,minlat=0,avglat=0,maxlat=19) /10.128.0.8:44564[1](queued=0,recved=267354,sent=267355,sid=0x15d521a96d4000d, lop=PING,est=1501606633426,to=40000,lcxid=0x356e2,lzxid=0x745,lresp=1502334182315, llat=0,minlat=0,avglat=0,maxlat=35) /10.128.0.8:53960[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40006, lop=PING,est=1500321547138,to=40000,lcxid=0x5,lzxid=0x745,lresp=1502334177036, llat=1,minlat=0,avglat=0,maxlat=20)
Si alguno de los últimos 3 comandos de verificación de estado muestra el siguiente mensaje:
$ echo stat | nc localhost 2181 This ZooKeeper instance is not currently serving requests
Indica que los nodos de ZooKeeper específicos no entregan solicitudes.
-
- Consulta los registros de ZooKeeper en el nodo específico y trata de ubicar los errores que causan que el
ZooKeeper esté inactivo. Los registros de ZooKeeper están disponibles en el siguiente directorio:
$ cd /opt/apigee/var/log/apigee-zookeeper $ ls -l total 188 -rw-r--r--. 1 apigee apigee 2715 Jul 22 19:51 apigee-zookeeper.log -rw-r--r--. 1 apigee apigee 10434 Jul 17 19:51 config.log -rw-r--r--. 1 apigee apigee 169640 Aug 1 19:51 zookeeper.log
Solución
- Reinicia todos los demás nodos de ZooKeeper en el clúster de a uno.
- Vuelve a ejecutar los comandos de verificación de estado de ZooKeeper en cada nodo y verifica si obtienes el resultado esperado output.
Comunícate con el equipo de asistencia de Apigee para solucionar la causa de la carga del sistema si persiste o si los reinicios no resuelven el problema.