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 del proxy API
- Le chiamate all'API di gestione non riescono con errori 5XX
- I router o i processori di messaggi non riescono ad avviarsi
- I componenti di Analytics segnalano la perdita della connessione a ZooKeeper in system.logs
Messaggi di errore
Di seguito sono riportati 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 a 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]
- La nuova UI di 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 questa 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 funziona 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 di 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 di ZooKeeper per trovare il leader.
Risoluzione
Applica le seguenti soluzioni per risolvere il problema nell'ordine specificato.
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 di ZooKeeper è in grado di comunicare tra i data center ed eleggere un leader di 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 attivi. 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 Stati Uniti orientali e DC-2 utilizzaus-wonomi host che indicano la regione Stati Uniti occidentali. (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 Stati Uniti orientali vengono rimossi e i nodi di Stati Uniti occidentali 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 tra i data center sarà ripristinata.
Disattiva la notazione dell'osservatore per il nodo dell'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 ripristinata, 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 è attivo.
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 Apigee Assistenza e fornisci i log di ZooKeeper per risolvere i problemi relativi a 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 l'avvio automatico abilitato.
- 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 di 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 di 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 3 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 Apigee Assistenza per risolvere la causa del carico di sistema se persiste o se i riavvii non risolvono il problema.