Stai visualizzando la documentazione di Apigee Edge.
Consulta la
documentazione di Apigee X. info
Sintomo
I problemi di connettività di ZooKeeper possono manifestarsi con diversi sintomi, ad esempio:
- Errori di deployment dei proxy API
- Chiamate API di gestione che generano errori 5XX
- Impossibilità di avviare router o processori di messaggi
- Componenti di analisi che segnalano la perdita della connessione ZooKeeper in system.logs
Messaggi di errore
Di seguito sono riportati alcuni esempi di messaggi di errore che potrebbero essere visualizzati in caso di perdita della connessione ai nodi ZooKeeper.
- Il seguente errore viene restituito nei log del server di gestione quando il deployment di un proxy API
non riesce a causa della perdita della connessione 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 l'avvio, i router e i processori di messaggi si connettono a ZooKeeper. Se si verificano
problemi di connettività con ZooKeeper, questi componenti non verranno avviati e verrà visualizzato il seguente
errore:
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]
- L'interfaccia utente Edge potrebbe mostrare il seguente errore che indica che non è stato possibile controllare lo
stato di deployment dei proxy API:
Error Fetching Deployments Error while checking path existence for path: path
Possibili cause
La tabella seguente elenca le possibili cause di questo problema:
| Causa | Per |
|---|---|
| Problema di connettività di rete tra diversi data center | Utenti di Edge Private Cloud |
| Il nodo ZooKeeper non gestisce le richieste | Utenti di Edge Private Cloud |
Fai clic su un link nella tabella per visualizzare le possibili soluzioni per la causa.
Problema di connettività di rete tra diversi data center
Diagnosi
Un cluster ZooKeeper può avere nodi che si estendono su più regioni/data center, ad esempio DC-1 e DC-2. La topologia tipica di Apigee Edge 2 DC avrà:
- Server ZooKeeper 1, 2 e 3 come votanti in DC-1
- ZooKeeper 4 e 5 come votanti e ZooKeeper 6 come osservatore in DC-2.
Se la regione DC-1 non è disponibile o la connettività di rete tra DC-1 e DC-2 è interrotta, allora i nodi ZooKeeper non possono eleggere un nuovo leader in DC-2 e non riescono a comunicare con il nodo leader. Gli osservatori ZooKeeper non possono eleggere un nuovo leader e i due votanti rimanenti in DC-2 non hanno un quorum di almeno 3 nodi votanti per eleggere un nuovo leader. Di conseguenza, gli ZooKeeper in DC-2 non saranno in grado di elaborare le richieste. I nodi ZooKeeper rimanenti in DC-2 continueranno a eseguire un loop di tentativi di riconnessione ai votanti ZooKeeper per trovare il leader.
Risoluzione
Applica le seguenti soluzioni nell'ordine specificato per risolvere il problema.
Se non riesci a risolvere il problema dopo aver provato queste soluzioni, contatta l'assistenza Apigee.
Soluzione n. 1
- Collabora con gli amministratori di rete per risolvere il problema di connettività di rete tra i data center.
- Quando l'insieme ZooKeeper è in grado di comunicare tra i data center ed eleggere un leader ZooKeeper, i nodi dovrebbero diventare integri ed essere in grado di elaborare le richieste.
Soluzione n. 2
- Se la riparazione della connettività di rete richiede tempo, una soluzione alternativa consiste nel riconfigurare
i nodi ZooKeeper nella regione in cui non sono disponibili. Ad esempio, riconfigura il cluster ZooKeeper
in DC-2 in modo che i 3 nodi ZooKeeper in questa regione siano tutti votanti e rimuovi
server.#inzoo.cfgdegli ZooKeeper dalla regione DC-1.- Nell'esempio seguente,
zoo.cfgconfigura i nodi per 2 regioni in cui DC-1 utilizzaus-eanomi host che indicano la regione US-East e DC-2 utilizzaus-wonomi host che indicano la regione US-West. (NOTA: vengono visualizzate solo le configurazioni pertinenti):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
Nell'esempio precedente, riconfigura
zoo.cfgcome segue: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
- Utilizzando il codice con la configurazione,
crea un file
/opt/apigee/customer/application/zookeeper.propertiescon i seguenti contenuti: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\
Nell'esempio precedente, i nodi di US-East vengono rimossi e i nodi di US-West vengono promossi a votanti quando viene rimossa l'annotazione
:observer. - Nell'esempio seguente,
- Esegui il backup di
/opt/apigee/apigee-zookeeper/conf/zoo.cfge del vecchio/opt/apigee/customer/application/zookeeper.properties.Questi file verranno utilizzati per ripristinare le impostazioni predefinite quando la connettività di rete sarà di nuovo attiva tra i data center.
Disattiva la notazione dell'osservatore per il nodo osservatore. Per farlo, aggiungi la seguente configurazione all'inizio di
/opt/apigee/customer/application/zookeeper.properties:conf_zoo_peertype=
-
Modifica il file
/opt/apigee/data/apigee-zookeeper/data/myidcome segue:- Per
server.1, modifica la voce all'interno dimyidda 4 a 1. - Per
server.2, modificamyidda 5 a 2. - Per
server.3, modificamyidda 6 a 3.
- Per
- Riavvia i nodi ZooKeeper nella regione in cui hai riconfigurato il cluster ZooKeeper cluster.
- Ripeti la configurazione precedente dal passaggio 1b al passaggio 5 su tutti i nodi ZooKeeper in DC-2.
- Verifica che i nodi siano attivi con un leader:
$ 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
L'output di questo comando conterrà una riga con "mode" seguito da "leader" se è il leader o "follower" se è un follower.
Quando la rete tra i data center viene ristabilita, le modifiche alle configurazioni di ZooKeeper possono essere ripristinate sui nodi ZooKeeper in DC-2.
Soluzione n. 3
- Se i nodi ZooKeeper nel cluster non sono stati avviati, riavviali.
- Controlla i log di ZooKeeper per determinare perché il nodo ZooKeeper non è disponibile.
I log di ZooKeeper sono disponibili nella seguente directory:
$ 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
- Contatta l'assistenza Apigee e fornisci i log di ZooKeeper per risolvere la causa di eventuali nodi ZooKeeper che potrebbero essere stati arrestati.
Il nodo ZooKeeper non gestisce le richieste
Un nodo ZooKeeper nell'insieme potrebbe diventare non integro e non essere in grado di rispondere alle richieste dei client. I motivi potrebbero essere i seguenti:
- Il nodo è stato arrestato senza essere riavviato.
- Il nodo è stato riavviato senza che l'avvio automatico fosse attivato.
- Il carico di sistema sul nodo ha causato l'arresto o la perdita di integrità.
Diagnosi
- Esegui i seguenti comandi di controllo dell'integrità di ZooKeeper su ciascuno dei nodi ZooKeeper e
controlla l'output:
-
$ echo "ruok" | nc localhost 2181
Output di esempio:
$ echo "ruok" | nc localhost 2181 imok
-
echo srvr | nc localhost 2181
Controlla la modalità per determinare se il nodo ZooKeeper è un leader o un follower.
Output di esempio per un nodo ZooKeeper singolo e all-in-one:
$ 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
Questo comando elenca le variabili ZooKeeper che possono essere utilizzate per controllare l'integrità del cluster ZooKeeper.
Output di esempio:
$ 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
Questo comando elenca le statistiche relative al rendimento e ai client connessi.
Output di esempio:
$ 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
Questo comando fornisce dettagli estesi sulle connessioni ZooKeeper.
Output di esempio:
$ 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 uno degli ultimi tre comandi di controllo dell'integrità mostra il seguente messaggio:
$ echo stat | nc localhost 2181 This ZooKeeper instance is not currently serving requests
Indica che i nodi ZooKeeper specifici non gestiscono le richieste.
-
- Controlla i log di ZooKeeper sul nodo specifico e prova a individuare eventuali errori che causano l'
arresto di ZooKeeper. I log di ZooKeeper sono disponibili nella seguente directory:
$ 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
Risoluzione
- Riavvia tutti gli altri nodi ZooKeeper nel cluster uno alla volta.
- Esegui di nuovo i comandi di controllo dell'integrità di ZooKeeper su ogni nodo e verifica se ottieni l'output previsto.
Contatta l'assistenza Apigee per risolvere la causa del carico di sistema se persiste o se i riavvii non risolvono il problema.