Você está lendo a documentação do Apigee Edge.
Acesse a
documentação da Apigee X.info
Sintoma
Os problemas de conectividade do ZooKeeper podem se manifestar como diferentes sintomas, como:
- Erros de implantação de proxy de API
- As chamadas da API Management falham com erros 5XX
- Os roteadores ou processadores de mensagens não são iniciados
- Os componentes do Analytics informam a perda de conexão do ZooKeeper em system.logs
Mensagens de erro
A seguir, apresentamos exemplos de mensagens de erro que podem ser observadas quando há perda de conexão com os nós do ZooKeeper.
- 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
- Durante a inicialização, os roteadores e 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]
- A interface do Edge pode mostrar 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 do Edge |
| O nó do ZooKeeper não está atendendo a solicitações | Usuários da nuvem privada do Edge |
Clique em um link na tabela para conferir possíveis resoluçõ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 típica do Apigee Edge 2 DC terá:
- Servidores do ZooKeeper 1, 2 e 3 como eleitores no DC-1
- ZooKeeper 4 e 5 como eleitores e ZooKeeper 6 como observador no DC-2.
Se a região DC-1 ficar inativa ou a conectividade de rede entre DC-1 e DC-2 for interrompida, então os nós do ZooKeeper não poderão eleger um novo líder no DC-2 e não poderão 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 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 tentando se conectar 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 você não conseguir resolver o problema depois de tentar essas soluções, entre em contato com o suporte da Apigee.
Solução nº 1
- Trabalhe com os administradores de rede para corrigir o problema de conectividade de rede entre os data centers.
- Quando o conjunto do ZooKeeper puder se comunicar entre os data centers e eleger um líder do ZooKeeper, os nós ficarão íntegros e poderão processar solicitações.
Solução nº 2
- Se a conectividade de rede levar tempo para ser reparada, uma solução alternativa será reconfigurar
nós do ZooKeeper na região em que eles estão inativos. Por exemplo, reconfigure o cluster do ZooKeeper
no DC-2 para que os três nós do ZooKeeper nessa região sejam todos eleitores e remova o
server.#nozoo.cfgdos ZooKeepers da região DC-1.- No exemplo a seguir,
zoo.cfgconfigura nós para duas regiões em que o DC-1 usaus-eanomes de host que denotam a região US-East e o DC-2 usaus-wonomes de host que denotam a região US-West. OBSERVAÇÃO: somente as configurações relevantes são mostradas: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.cfgda 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
- Usando código com a configuração,
crie um arquivo
/opt/apigee/customer/application/zookeeper.propertiescom 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\
No exemplo acima, os nós do US-East são removidos, e os nós do US-West são promovidos a eleitores quando a
:observeranotação é removida. - No exemplo a seguir,
- Faça backup de
/opt/apigee/apigee-zookeeper/conf/zoo.cfge do antigo/opt/apigee/customer/application/zookeeper.properties.Esses arquivos serão usados para restaurar os padrões quando a conectividade de rede for restaurada entre os data centers.
Desative a notação do observador para o nó do observador. Para fazer isso, adicione a seguinte configuração à parte de cima de
/opt/apigee/customer/application/zookeeper.properties:conf_zoo_peertype=
-
Edite o arquivo
/opt/apigee/data/apigee-zookeeper/data/myidda seguinte forma:- Para
server.1, mude a entrada dentro demyidde 4 para 1. - Para
server.2, mude omyidde 5 para 2. - Para
server.3, mude omyidde 6 para 3.
- Para
- Reinicie os nós do ZooKeeper na região em que você reconfigurou o cluster do ZooKeeper.
- Repita a configuração acima da etapa 1b até a etapa 5 em todos os nós do ZooKeeper no DC-2.
- 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 for o líder ou "follower" se for um seguidor.
Quando a rede entre os data centers for restabelecida, as mudanças de configuração do ZooKeeper poderão ser revertidas nos nós do ZooKeeper no DC-2.
Solução nº 3
- Se os nós do ZooKeeper no cluster não forem iniciados, reinicie-os.
- Verifique os registros do ZooKeeper para determinar por que o nó do ZooKeeper ficou 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
- Entre em contato com o suporte da Apigee e forneça os registros do ZooKeeper para solucionar a causa de qualquer nó do ZooKeeper que possa ter sido interrompido.
O nó do ZooKeeper não está atendendo a solicitações
Um nó do ZooKeeper no conjunto pode ficar inativo e não conseguir responder às solicitações do cliente Conheça os possíveis motivos:
- O nó foi interrompido sem ser reiniciado.
- O nó foi reinicializado sem a inicialização automática ativada.
- A carga do sistema no nó fez com que ele ficasse inativo ou inativo.
Diagnóstico
- Execute os comandos de verificação de integridade do ZooKeeper a seguir em cada um dos nós do ZooKeeper e
verifique a saída:
-
$ echo "ruok" | nc localhost 2181
Exemplo de saída:
$ echo "ruok" | nc localhost 2181 imok
-
echo srvr | nc localhost 2181
Verifique o modo para determinar se o nó do ZooKeeper é um líder ou seguidor.
Exemplo de saída para um nó do ZooKeeper único e completo:
$ 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
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
-
$ 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
-
$ echo cons | nc localhost 2181
Esse comando fornece detalhes estendidos 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
Isso indica que nós específicos do ZooKeeper não estão atendendo a solicitações.
-
- Verifique os registros do ZooKeeper no nó específico e tente localizar erros que causem a
inatividade 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
- Reinicie todos os outros nós do ZooKeeper no cluster um por um.
- Execute novamente os comandos de verificação de integridade do ZooKeeper em cada nó e confira se você recebe 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.