Errores de pérdida de conexión de Zookeeper

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

Síntoma

Los problemas de conectividad de ZooKeeper pueden manifestarse como diferentes síntomas, como los siguientes:

  1. Errores de implementación del proxy de API
  2. Las llamadas a la API de Management fallan con errores 5XX
  3. No se inician los routers o procesadores de mensajes
  4. Los componentes de Analytics informan sobre 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 pueden observarse cuando hay pérdida de conexión a los nodos de ZooKeeper.

  1. Se muestra el siguiente error en los registros del servidor de administración cuando se implementa un proxy de API. falla 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
    
  2. Durante el inicio, los routers y procesadores de mensajes se conectan a ZooKeeper. Si hay problemas de conectividad con ZooKeeper, estos componentes no comenzarán con lo 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]
    
  3. Es posible que la IU de Edge muestre el siguiente error, lo que indica que no pudo verificar el Deployment 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 perimetral
El nodo de ZooKeeper no entrega solicitudes Usuarios de la nube privada perimetral

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

Problema de conectividad de red entre 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 Apigee Edge 2 DC tendrá las siguientes características:

  • Los 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 falla o la conectividad de red entre DC-1 y DC-2 se rompe, entonces Los nodos de ZooKeeper no pueden elegir a un nuevo líder en DC-2 y no se comunican con el líder el nodo de inicio de sesión. Los observadores de ZooKeeper no pueden elegir a un nuevo líder y los dos votantes restantes en DC-2 no lo hacen tener un quórum de al menos 3 nodos votantes para elegir a un nuevo líder. Así, los ZooKeepers en DC-2 no podrá procesar ninguna solicitud. Los nodos restantes de ZooKeeper en DC-2 continuarán circulando en bucle y volvemos a intentar contactar con los votantes de ZooKeeper para encontrar al líder.

Solución

Aplica las siguientes soluciones para abordar este problema en el orden especificado.

Si no puedes resolver el problema luego de probar estas soluciones, comunícate con el equipo de asistencia de Apigee.

Solución 1

  1. Trabaja con tus administradores de red para reparar el problema de conectividad de red entre los a los centros de datos.
  2. Cuando el ensamble de ZooKeeper pueda comunicarse a través de los centros de datos y elija Líder de ZooKeeper, los nodos deben estar en buen estado y ser capaces de procesar solicitudes.

Solución 2

  1. Si se demora en reparar la conectividad de red, una solución alternativa es volver a configurar Nodos de ZooKeeper en la región en la que están inactivos. Por ejemplo, reconfigura ZooKeeper clúster en DC-2 para que los 3 nodos de ZooKeeper en esta región sean todos votantes y quita server.# en el zoo.cfg de ZooKeepers de la región DC-1.
    1. En el siguiente ejemplo, zoo.cfg configura nodos para 2 regiones en las que DC-1 usa us-ea. Los nombres de host que denotan la región US-East y DC-2 usa us-wo nombres de host que denotan la región US-West. (NOTA: Solo se muestran los parámetros de configuración 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.cfg de 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
      
    2. Mediante code with config, crea un archivo /opt/apigee/customer/application/zookeeper.properties con 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 de US-East y se ascienden los nodos US-West a los votantes cuando se quita la anotación :observer.

  2. Crear copias de seguridad del /opt/apigee/apigee-zookeeper/conf/zoo.cfg y de los anteriores /opt/apigee/customer/application/zookeeper.properties

    Estos archivos se usarán para restablecer los valores predeterminados cuando se cree una copia de seguridad de la conectividad de red entre los centros de datos.

  3. Inhabilita la notación del observador para el nodo del observador. Para ello, Agrega la siguiente configuración a la parte superior de /opt/apigee/customer/application/zookeeper.properties:

    conf_zoo_peertype=
  4. Edita el archivo /opt/apigee/data/apigee-zookeeper/data/myid de la siguiente manera:

    • Para server.1, cambia la entrada dentro de myid de 4 a 1.
    • Para server.2, cambia myid de 5 a 2.
    • Para server.3, cambia myid de 6 a 3.
  5. Reinicia los nodos de ZooKeeper en la región en la que reconfiguraste ZooKeeper clúster.
  6. Repite la configuración anterior desde el paso 1b hasta el paso 5 en todos los nodos de ZooKeeper en DC-2.
  7. Valida que los nodos estén arriba 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 "líder" si es el líder o "seguidor" si es un seguidor.

    Cuando se restablece la red entre los centros de datos, la configuración de ZooKeeper los cambios se pueden revertir en los nodos de ZooKeeper en DC-2.

Solución 3

  1. Si no se inician los nodos de ZooKeeper en el clúster, reinícialo.
  2. Verifica los registros de ZooKeeper para determinar por qué dejó de funcionar 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
    
  3. Comunícate con el equipo de asistencia de Apigee y proporciona la Registros de ZooKeeper para solucionar problemas relacionados con la causa de cualquier nodo de ZooKeeper que pueda haberse detenido.

El nodo de ZooKeeper no entrega solicitudes

Es posible que un nodo de ZooKeeper del ensamble se encuentre en mal estado y no pueda responder al cliente solicitudes. Esto podría deberse a lo siguiente:

  1. Se detuvo el nodo sin reiniciarse.
  2. Se reinició el nodo sin el inicio automático habilitado.
  3. La carga del sistema en el nodo provocó que fallara o que estuviera en mal estado.

Diagnóstico

  1. Ejecuta los siguientes comandos de verificación de estado de ZooKeeper en cada uno de los nodos de ZooKeeper y Verifica el resultado:
    1. $ echo "ruok" | nc localhost 2181
      

      Resultado de ejemplo:

      $ echo "ruok" | nc localhost 2181
      imok
      
    2. echo srvr | nc localhost 2181
      

      Comprueba el modo para determinar si el nodo de ZooKeeper es líder o seguidor.

      Resultado de ejemplo para un nodo de ZooKeeper 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
      
    3. $ echo mntr | nc localhost 2181
      

      Este comando enumera las variables de ZooKeeper que pueden utilizarse para comprobar 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
      
    4. $ echo stat | nc localhost 2181
      

      Este comando muestra 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
      
    5. $ echo cons | nc localhost 2181
      

      Este comando proporciona detalles adicionales 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
      

      Luego, indica que ciertos nodos de ZooKeeper no están entregando solicitudes.

  2. Comprueba los registros de ZooKeeper en el nodo específico e intenta localizar cualquier error que cause el ZooKeeper se caerá. 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

  1. Reinicia todos los demás nodos de ZooKeeper en el clúster, uno por uno.
  2. Vuelve a ejecutar los comandos de verificación de estado de ZooKeeper en cada nodo y observa si obtienes los resultados esperados. salida.

Comunícate con el equipo de asistencia de Apigee para solucionar la causa del problema el sistema si persiste o si los reinicios no resuelven el problema.