Erros de perda de conexão do Zookeeper

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Sintoma

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

  1. Erros de implantação do proxy de API
  2. As chamadas da API de gerenciamento 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

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

  1. O erro a seguir é 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 com 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 diferentes data centers Usuários da nuvem privada de borda
O nó do ZooKeeper não exibe solicitações Usuários da nuvem privada de borda

Clique em um link na tabela e consulte as possíveis soluções para essa 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 o ZooKeeper 6 como observador em DC-2.

Se a região DC-1 cair ou a conectividade de rede entre DC-1 e DC-2 for interrompida, Os nós do ZooKeeper não podem eleger um novo líder em DC-2 e não se comunicam com o líder nó. Os observadores do ZooKeeper não podem eleger um novo líder e os dois eleitores restantes na DC-2 não podem ter um quórum de pelo menos três votações para eleger um novo líder. Com isso, os ZooKeepers em DC-2 vão não poderá processar solicitações. Os nós do ZooKeeper restantes em DC-2 continuarão em loop tentando se conectar com os eleitores do ZooKeeper para encontrar o líder.

Resolução

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

Se você não conseguir resolver o problema depois de tentar essas soluções, entre em contato com o suporte da Apigee.

Solução 1

  1. Trabalhe com os administradores da rede para reparar o problema de conectividade da rede entre o data centers no local.
  2. Quando o conjunto do ZooKeeper consegue se comunicar entre os data centers e eleger um Líder do ZooKeeper, os nós deverão se tornar íntegros e ser capazes de processar solicitações.

Solução 2

  1. Se a conectividade de rede demorar para ser reparada, uma solução é reconfigurar Nós do ZooKeeper na região em que estão inativos. Por exemplo, reconfigure o ZooKeeper cluster em DC-2 para que os três nós do ZooKeeper nesta região sejam todos votantes e remova o server.# no zoo.cfg do ZooKeepers da região DC-1.
    1. No exemplo a seguir, zoo.cfg configura nós para duas regiões em que DC-1 usa us-ea nomes de host que indicam a região US-Leste e DC-2 usa nomes de host us-wo que representam a região US-Oeste. 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 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\
      

    Acima, os nós de US-East são removidos e os nós de Oeste são promovidos a os eleitores quando a anotação :observer é removida.

  2. Fazer backup de /opt/apigee/apigee-zookeeper/conf/zoo.cfg e arquivos antigos /opt/apigee/customer/application/zookeeper.properties.

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

  3. Desativa a notação do observador para o nó do observador. Para isso, Adicione a seguinte configuração à 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. Reiniciar os nós do ZooKeeper na região em que você reconfigurou o ZooKeeper aglomerado.
  6. Repita a configuração acima da etapa 1b até a etapa 5 em todos os nós do ZooKeeper em 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" seguido por "líder" se é o líder ou "seguidor" se for um seguidor.

    Quando a rede entre os data centers é restabelecida, as configurações do ZooKeeper alterações podem ser revertidas nos nós do ZooKeeper em 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ó ZooKeeper parou.

    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 envie o Registros do ZooKeeper para solucionar problemas da causa de qualquer nó do ZooKeeper que possa ter sido interrompido.

O nó do ZooKeeper não está exibindo solicitações

Um nó ZooKeeper no ensemble pode perder a integridade e não conseguir responder ao cliente solicitações. 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 falhasse ou se tornasse 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ó ZooKeeper é um líder ou seguidor.

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

      $ 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 lista as variáveis do ZooKeeper que podem ser usadas para verificar a integridade de do cluster 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 desempenho e 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
      

      Este comando fornece detalhes adicionais 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 qualquer um dos últimos três 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, ele indica que os nós do ZooKeeper específicos não estão exibindo solicitações.

  2. Verifique os registros do ZooKeeper no nó específico e tente localizar os erros que causam a que o ZooKeeper esteja inativo. 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 um por um.
  2. Execute novamente os comandos de verificação de integridade do ZooKeeper em cada nó e verifique se você obtém o resultado saída.

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