Erros de perda de conexão do Zookeeper

Você está vendo a documentação do Apigee Edge.
Acesse a documentação da Apigee X.
informações

Sintoma

Os problemas de conectividade do ZooKeeper podem se manifestar como diferentes sintomas, como:

  1. Erros de implantação do proxy de API
  2. As chamadas da API Management falham com erros 5XX
  3. Falha ao iniciar roteadores ou processadores de mensagens
  4. Os componentes do Analytics informam a perda de conexão do ZooKeeper em system.logs

Mensagens de erro

Veja a seguir exemplos de mensagens de erro que podem ser observadas quando há perda de conexão com os nós do ZooKeeper.

  1. O seguinte erro é retornado nos registros do Servidor de gerenciamento quando uma implantação de proxy de API falha devido à perda de conexão do 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 a inicialização, os roteadores e os processadores de mensagens se conectam ao ZooKeeper. Se houver problemas de conectividade com o ZooKeeper, esses componentes não serão iniciados e mostrará o seguinte erro:
    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. A interface do Edge pode exibir o seguinte erro indicando que não foi possível verificar o status de implantação dos proxies de API:
    Error Fetching Deployments
    Error while checking path existence for path: path
    

Causas possíveis

A tabela a seguir lista as possíveis causas desse problema:

Causa Para
Problema de conectividade de rede em data centers diferentes Usuários da nuvem privada do Edge
O nó do ZooKeeper não está atendendo às solicitações Usuários da nuvem privada do Edge

Clique em um link na tabela para ver as possíveis soluções para a causa.

Problema de conectividade de rede em diferentes data centers

Diagnóstico

Um cluster do ZooKeeper pode ter nós que abrangem várias regiões/data centers, como DC-1 e DC-2. A topologia de DC típica do Apigee Edge 2 terá:

  • Os servidores do ZooKeeper 1, 2 e 3 como eleitores em DC-1
  • ZooKeeper 4 e 5 como eleitores e ZooKeeper 6 como um observador em DC-2.

Se a região DC-1 ficar inativa ou a conectividade de rede entre DC-1 e DC-2 for interrompida, os nós do ZooKeeper não poderão eleger um novo líder no DC-2 e falharão ao se comunicar com o nó líder. Os observadores do ZooKeeper não podem eleger um novo líder e os dois eleitores restantes no DC-2 não têm um quórum de pelo menos três nós de eleitores para eleger um novo líder. Assim, os ZooKeepers no DC-2 não poderão processar nenhuma solicitação. Os nós restantes do ZooKeeper no DC-2 continuarão em loop, tentando se conectar de volta aos eleitores do ZooKeeper para encontrar o líder.

Resolução

Aplique as soluções a seguir para resolver esse problema na ordem especificada.

Se não for possível resolver o problema depois dessas soluções, entre em contato com o suporte da Apigee.

Solução 1

  1. Trabalhe com seus administradores de rede para reparar o problema de conectividade de rede entre os data centers.
  2. Quando o conjunto do ZooKeeper conseguir se comunicar entre os data centers e eleger um líder do ZooKeeper, os nós estarão íntegros e poderão processar solicitações.

Solução 2

  1. Se o reparo da conectividade de rede demorar, uma solução alternativa é reconfigurar os nós do ZooKeeper na região em que eles estão inativos. Por exemplo, reconfigure o cluster do ZooKeeper em DC-2 para que os três nós do ZooKeeper nessa região sejam todos eleitores e remova o server.# em zoo.cfg dos ZooKeepers da região de DC-1.
    1. No exemplo a seguir, zoo.cfg configura nós para duas regiões em que o DC-1 usa nomes de host us-ea que indicam a região US-East, e o DC-2 usa nomes de host us-wo que indicam a região US-West. OBSERVAÇÃO: somente as configurações relevantes são exibidas:
      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
      

      No exemplo acima, reconfigure o zoo.cfg da seguinte maneira:

      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. Usando o código com configuração, crie um arquivo /opt/apigee/customer/application/zookeeper.properties com o seguinte:
      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\
      

    Na figura acima, os nós do US-Leste são removidos e os nós do US-Oeste são promovidos para os eleitores quando a anotação :observer é removida.

  2. Faça backup de /opt/apigee/apigee-zookeeper/conf/zoo.cfg e do /opt/apigee/customer/application/zookeeper.properties antigo.

    Esses arquivos serão usados para restaurar os padrões quando houver um backup de conectividade de rede entre os data centers.

  3. Desativar a notação do observador para o nó do observador. Para fazer isso, adicione a seguinte configuração na parte de cima de /opt/apigee/customer/application/zookeeper.properties:

    conf_zoo_peertype=
  4. Edite o arquivo /opt/apigee/data/apigee-zookeeper/data/myid da seguinte forma:

    • Para server.1, mude a entrada dentro de myid de 4 para 1.
    • Em server.2, mude myid de 5 para 2.
    • Para server.3, mude myid de 6 para 3.
  5. Reinicie os nós do ZooKeeper na região em que você reconfigurou o cluster do ZooKeeper.
  6. Repita a configuração acima das etapas 1b à 5 em todos os nós do ZooKeeper no DC-2.
  7. Valide se os nós estão ativos com um 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
    

    A saída desse comando vai conter uma linha que diz "mode" seguida de "leader" se ele for o líder ou "seguidor" se for um seguidor.

    Quando a rede entre os data centers é restabelecida, as alterações nas configurações do ZooKeeper podem ser revertidas nos nós do ZooKeeper no DC-2.

Solução 3

  1. Se os nós do ZooKeeper no cluster não forem iniciados, reinicie-o.
  2. Verifique os registros do ZooKeeper para determinar por que o nó do ZooKeeper falhou.

    Os registros do ZooKeeper estão disponíveis no seguinte diretório:

    $ 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. Entre em contato com o suporte da Apigee e forneça os registros do ZooKeeper para solucionar problemas de causa de qualquer nó do ZooKeeper que possa ter sido interrompido.

O nó do ZooKeeper não está atendendo às solicitações

Um nó do ZooKeeper no conjunto pode se tornar não íntegro e não conseguir responder às solicitações do cliente. Conheça os possíveis motivos:

  1. O nó foi interrompido sem ser reiniciado.
  2. O nó foi reinicializado sem o início automático ativado.
  3. A carga do sistema no nó fez com que ele ficasse inativo ou se tornou não íntegro.

Diagnóstico

  1. Execute os seguintes comandos de verificação de integridade do ZooKeeper em cada um dos nós do ZooKeeper e verifique a saída:
    1. $ echo "ruok" | nc localhost 2181
      

      Exemplo de saída:

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

      Verifique o modo para determinar se o nó do ZooKeeper é um líder ou um seguidor.

      Exemplo de saída para um nó único do ZooKeeper:

      $ 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
      

      Esse comando lista as variáveis do ZooKeeper que podem ser usadas para verificar a integridade do cluster do ZooKeeper.

      Exemplo de saída:

      $ 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
      

      Esse comando lista estatísticas sobre o desempenho e os clientes conectados.

      Exemplo de saída:

      $ 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
      

      Esse comando fornece mais detalhes sobre as conexões do ZooKeeper.

      Exemplo de saída:

      $ 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)
      

      Se algum dos três últimos comandos de verificação de integridade mostrar a seguinte mensagem:

      $ echo stat | nc localhost 2181
          This ZooKeeper instance is not currently serving requests
      

      Em seguida, isso indica que um ou mais nós do ZooKeeper não estão exibindo solicitações.

  2. Verifique os registros do ZooKeeper no nó específico e tente localizar os erros que estão causando a desativação do ZooKeeper. Os registros do ZooKeeper estão disponíveis no seguinte diretório:
    $ 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
    

Resolução

  1. Reinicie todos os outros nós do ZooKeeper no cluster.
  2. Execute novamente os comandos de verificação de integridade do ZooKeeper em cada nó e veja se você consegue a saída esperada.

Entre em contato com o suporte da Apigee para solucionar a causa da carga do sistema se ela persistir ou se as reinicializações não resolverem o problema.