Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione
Documentazione di Apigee X. Informazioni
Sintomo
I problemi di connettività di ZooKeeper possono manifestarsi con diversi sintomi, tra cui:
- Errori di deployment del proxy API
- Le chiamate API di gestione non vanno a buon fine e vengono generati errori 5XX
- I router o i processori di messaggi non si avviano
- I componenti di analisi segnalano la perdita di connessione di ZooKeeper in system.logs
Messaggi di errore
Di seguito vengono forniti esempi di messaggi di errore che possono essere osservati in presenza di perdita di connessione con i nodi ZooKeeper.
- Quando viene eseguito un deployment di un proxy API, viene restituito il seguente errore nei log del server di gestione
non riesce a causa della perdita di connessione di 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 ci sono
di connettività con ZooKeeper, questi componenti non inizieranno con quanto segue
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'UI di Edge potrebbe visualizzare il seguente errore che indica che non è stato possibile controllare il
stato di deployment dei proxy API:
Error Fetching Deployments Error while checking path existence for path: path
Possibili cause
Nella tabella seguente sono elencate le possibili cause di questo problema:
Causa | Per |
---|---|
Problema di connettività di rete tra diversi data center | Utenti Edge Private Cloud |
Il nodo ZooKeeper non gestisce le richieste | Utenti Edge Private Cloud |
Fai clic su un link nella tabella per visualizzare le possibili soluzioni alla causa.
Problema di connettività di rete tra diversi data center
Diagnosi
Un cluster ZooKeeper può avere nodi distribuiti in più regioni/data center, DC-1 e DC-2. La tipica topologia DC Apigee Edge 2 avrà:
- ZooKeeper server 1, 2 e 3 come elettori in DC-1
- ZooKeeper 4 e 5 come elettori 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 viene interrotta, I nodi di ZooKeeper non possono eleggere un nuovo leader in DC-2 e non comunicano con il leader nodo. Gli osservatori di ZooKeeper non possono eleggere un nuovo leader e i due elettori rimanenti nel DC-2 no avere un quorum di almeno 3 nodi elettorali per eleggere un nuovo leader. Pertanto, ZooKeepers in DC-2 non sarà in grado di elaborare alcuna richiesta. I restanti nodi ZooKeeper in DC-2 continueranno a essere loop nuovo tentativo di ricontattare gli elettori 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 1
- Collabora con gli amministratori di rete per risolvere il problema di connettività di rete tra data center on-premise.
- Quando il gruppo ZooKeeper è in grado di comunicare tra i data center e di scegliere una Il leader di ZooKeeper, i nodi devono essere integri ed essere in grado di elaborare le richieste.
Soluzione 2
- Se la riparazione della connettività di rete richiede tempo, una soluzione alternativa è riconfigurare
Nodi ZooKeeper nella regione in cui sono inattivi. Ad esempio, riconfigura ZooKeeper
cluster in DC-2 in modo che i 3 nodi ZooKeeper in questa regione siano tutti elettori e rimuovi
server.#
nelzoo.cfg
dello ZooKeepers della regione DC-1.- Nell'esempio seguente,
zoo.cfg
configura i nodi per due regioni in cui DC-1 utilizzaus-ea
nomi host che indicano la regione US-East, mentre DC-2 utilizzaus-wo
nomi 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.cfg
come 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 codice con config,
crea un file
/opt/apigee/customer/application/zookeeper.properties
con quanto segue: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\
In precedenza, i nodi di Stati Uniti-Est vengono rimossi, mentre quelli di Stati Uniti-Ovest vengono promossi a votanti quando l'annotazione
:observer
viene rimossa. - Nell'esempio seguente,
- Backup di
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
e versioni precedenti/opt/apigee/customer/application/zookeeper.properties
.Questi file verranno utilizzati per ripristinare i valori predefiniti quando viene ripristinata la connettività di rete tra i data center.
Disabilita la notazione 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/myid
come segue:- Per
server.1
, modifica la voce all'interno dimyid
da 4 a 1. - Per
server.2
, modifica il valore dimyid
da 5 a 2. - Per
server.3
, modificamyid
da 6 a 3.
- Per
- Riavvia i nodi ZooKeeper nella regione in cui hai riconfigurato ZooKeeper in un cluster Kubernetes.
- Ripeti la configurazione precedente dal passaggio 1b al passaggio 5 su tutti i nodi ZooKeeper in DC-2.
- Verifica che i nodi corrispondano a una 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 la dicitura "mode" seguito da "leader" se è il leader o "follower" se è un follower.
Quando la rete tra i data center viene ristabilita, le configurazioni di ZooKeeper le modifiche possono essere annullate sui nodi ZooKeeper in DC-2.
Soluzione 3
- Se i nodi ZooKeeper nel cluster non vengono avviati, riavvialo.
- Controlla i log di ZooKeeper per determinare perché il nodo ZooKeeper si è arrestato.
I log di ZooKeeper sono disponibili nella directory seguente:
$ 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 il Log di ZooKeeper per risolvere i problemi relativi alla causa di qualsiasi nodo ZooKeeper che potrebbe essere stato interrotto.
Il nodo ZooKeeper non gestisce le richieste
Un nodo ZooKeeper nell'ensemble potrebbe diventare non integro e non essere in grado di rispondere al client richieste. Il motivo potrebbe essere uno dei 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 un arresto o uno stato non integro.
Diagnosi
- Esegui i seguenti comandi per il controllo di integrità di ZooKeeper su ciascuno dei nodi di ZooKeeper
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 singolo nodo ZooKeeper 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 verificare l'integrità nell'ammasso 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 sulle prestazioni e sui 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 tre comandi di controllo di integrità mostra il seguente messaggio:
$ echo stat | nc localhost 2181 This ZooKeeper instance is not currently serving requests
Indica quindi che uno o più nodi ZooKeeper non gestiscono le richieste.
-
- Controlla i log di ZooKeeper sul nodo specifico e prova a individuare eventuali errori che causano il
ZooKeeper sia inattivo. I log di ZooKeeper sono disponibili nella directory seguente:
$ 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 uno alla volta tutti gli altri nodi ZooKeeper nel cluster.
- Esegui di nuovo i comandi per il controllo di integrità di ZooKeeper su ciascun nodo e verifica se ottieni come output.
Contatta l'assistenza Apigee per risolvere la causa del se il problema persiste o se il riavvio non risolve il problema.