Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur
Dokumentation zuApigee X wechseln. info
Symptom
Probleme mit der ZooKeeper-Verbindung können sich in verschiedenen Symptomen äußern, z. B.:
- Fehler bei der Bereitstellung von API-Proxys
- Aufrufe der Management API schlagen mit 5XX-Fehlern fehl
- Router oder Nachrichtenprozessoren können nicht gestartet werden
- Analysekomponenten melden in system.logs einen Verlust der ZooKeeper-Verbindung
Fehlermeldungen
Im Folgenden finden Sie Beispiele für Fehlermeldungen, die auftreten können, wenn es zu Verbindungsverlusten zu ZooKeeper-Knoten kommt.
- Der folgende Fehler wird in den Management Server-Logs zurückgegeben, wenn die Bereitstellung eines API-Proxys
aufgrund eines Verlusts der ZooKeeper-Verbindung fehlschlägt:
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
- Beim Start stellen die Router und Nachrichtenprozessoren eine Verbindung zu ZooKeeper her. Wenn es Probleme mit der ZooKeeper-Verbindung gibt, können diese Komponenten nicht gestartet werden und der folgende
Fehler wird angezeigt:
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]
- In der Edge-UI wird möglicherweise der folgende Fehler angezeigt, der darauf hinweist, dass der
Bereitstellungsstatus der API-Proxys nicht geprüft werden konnte:
Error Fetching Deployments Error while checking path existence for path: path
Mögliche Ursachen
In der folgenden Tabelle sind mögliche Ursachen für dieses Problem aufgeführt:
| Ursache | Für |
|---|---|
| Probleme mit der Netzwerkverbindung zwischen verschiedenen Rechenzentren | Nutzer von Edge Private Cloud |
| ZooKeeper-Knoten verarbeitet keine Anfragen | Nutzer von Edge Private Cloud |
Klicken Sie in der Tabelle auf einen Link, um mögliche Lösungen für die jeweilige Ursache zu sehen.
Probleme mit der Netzwerkverbindung zwischen verschiedenen Rechenzentren
Diagnose
Ein ZooKeeper-Cluster kann Knoten haben, die sich in mehreren Regionen/Rechenzentren befinden, z. B. in Rechenzentrum 1 und Rechenzentrum 2. Die typische Apigee Edge-Topologie mit zwei Rechenzentren umfasst Folgendes:
- ZooKeeper-Server 1, 2 und 3 als Voter in Rechenzentrum 1
- ZooKeeper 4 und 5 als Voter und ZooKeeper 6 als Observer in Rechenzentrum 2
Wenn die Region von Rechenzentrum 1 ausfällt oder die Netzwerkverbindung zwischen Rechenzentrum 1 und Rechenzentrum 2 unterbrochen wird, können die ZooKeeper-Knoten in Rechenzentrum 2 keinen neuen Leader auswählen und nicht mit dem Leader Knoten kommunizieren. ZooKeeper-Observer können keinen neuen Leader auswählen und die beiden verbleibenden Voter in Rechenzentrum 2 haben kein Quorum von mindestens drei Voter-Knoten, um einen neuen Leader auszuwählen. Daher können die ZooKeeper in Rechenzentrum 2 keine Anfragen verarbeiten. Die verbleibenden ZooKeeper-Knoten in Rechenzentrum 2 versuchen weiterhin, eine Verbindung zu den ZooKeeper-Votern herzustellen, um den Leader zu finden.
Auflösung
Wenden Sie die folgenden Lösungen in der angegebenen Reihenfolge an, um dieses Problem zu beheben.
Wenn Sie das Problem nach dem Ausprobieren dieser Lösungen nicht beheben können, wenden Sie sich bitte an den Apigee-Support.
Lösung 1
- Wenden Sie sich an Ihre Netzwerkadministratoren, um das Problem mit der Netzwerkverbindung zwischen den Rechenzentren zu beheben.
- Wenn das ZooKeeper-Ensemble über die Rechenzentren hinweg kommunizieren und einen ZooKeeper-Leader auswählen kann, sollten die Knoten fehlerfrei sein und Anfragen verarbeiten können.
Lösung 2
- Wenn die Reparatur der Netzwerkverbindung einige Zeit in Anspruch nimmt, können Sie als Problemumgehung die
ZooKeeper-Knoten in der Region neu konfigurieren, in der sie ausgefallen sind. Konfigurieren Sie beispielsweise den ZooKeeper
Cluster in Rechenzentrum 2 so, dass alle drei ZooKeeper-Knoten in dieser Region Voter sind, und entfernen Sie die
server.#in derzoo.cfgder ZooKeeper aus der Region von Rechenzentrum 1.- Im folgenden Beispiel konfiguriert
zoo.cfgKnoten für zwei Regionen, wobei Rechenzentrum 1us-eaHostnamen verwendet, die die Region „USA, Osten“ angeben, und Rechenzentrum 2us-woHostnamen verwendet, die die Region „USA, Westen“ angeben. HINWEIS: Es werden nur relevante Konfigurationen angezeigt.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
Konfigurieren Sie im obigen Beispiel
zoo.cfgso: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
- Erstellen Sie mit Code und Konfiguration eine Datei
/opt/apigee/customer/application/zookeeper.propertiesmit folgendem Inhalt: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\
Im obigen Beispiel werden die Knoten aus der Region „USA, Osten“ entfernt und die Knoten aus der Region „USA, Westen“ werden zu Votern befördert, wenn die
:observerAnnotation entfernt wird. - Im folgenden Beispiel konfiguriert
- Sichern Sie
/opt/apigee/apigee-zookeeper/conf/zoo.cfgund die alte Datei/opt/apigee/customer/application/zookeeper.properties.Diese Dateien werden verwendet, um die Standardeinstellungen wiederherzustellen, wenn die Netzwerkverbindung zwischen den Rechenzentren wiederhergestellt ist.
Deaktivieren Sie die Observer-Notation für den Observer-Knoten. Fügen Sie dazu die folgende Konfiguration oben in
/opt/apigee/customer/application/zookeeper.propertiesein:conf_zoo_peertype=
-
Bearbeiten Sie die Datei
/opt/apigee/data/apigee-zookeeper/data/myidso:- Ändern Sie für
server.1den Eintrag inmyidvon 4 in 1. - Ändern Sie für
server.2den Eintrag inmyidvon 5 in 2. - Ändern Sie für
server.3den Eintrag inmyidvon 6 in 3.
- Ändern Sie für
- Starten Sie die ZooKeeper-Knoten in der Region neu, in der Sie den ZooKeeper Cluster neu konfiguriert haben.
- Wiederholen Sie die obige Konfiguration von Schritt 1b bis Schritt 5 auf allen ZooKeeper-Knoten in Rechenzentrum 2.
- Prüfen Sie, ob die Knoten mit einem Leader aktiv sind:
$ 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
Die Ausgabe dieses Befehls enthält eine Zeile mit „mode“ gefolgt von „leader“, wenn es sich um den Leader handelt, oder „follower“, wenn es sich um einen Follower handelt.
Wenn die Netzwerkverbindung zwischen den Rechenzentren wiederhergestellt ist, können die Änderungen an der ZooKeeper-Konfiguration auf den ZooKeeper-Knoten in Rechenzentrum 2 rückgängig gemacht werden.
Lösung 3
- Wenn ein oder mehrere ZooKeeper-Knoten im Cluster nicht gestartet wurden, starten Sie sie neu.
- Prüfen Sie die ZooKeeper-Logs, um festzustellen, warum der ZooKeeper-Knoten ausgefallen ist.
ZooKeeper-Logs sind im folgenden Verzeichnis verfügbar:
$ 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
- Wenden Sie sich an den Apigee-Support und stellen Sie die ZooKeeper-Logs zur Verfügung, um die Ursache für den Ausfall eines ZooKeeper-Knotens zu ermitteln.
ZooKeeper-Knoten verarbeitet keine Anfragen
Ein ZooKeeper-Knoten im Ensemble kann fehlerhaft werden und nicht auf Client Anfragen reagieren. Mögliche Gründe:
- Der Knoten wurde gestoppt, aber nicht neu gestartet.
- Der Knoten wurde neu gestartet, ohne dass der automatische Start aktiviert war.
- Die Systemlast auf dem Knoten hat dazu geführt, dass er ausgefallen oder fehlerhaft geworden ist.
Diagnose
- Führen Sie die folgenden ZooKeeper-Systemdiagnosebefehle auf jedem der ZooKeeper-Knoten aus und
prüfen Sie die Ausgabe:
-
$ echo "ruok" | nc localhost 2181
Beispielausgabe:
$ echo "ruok" | nc localhost 2181 imok
-
echo srvr | nc localhost 2181
Prüfen Sie den Modus, um festzustellen, ob der ZooKeeper-Knoten ein Leader oder ein Follower ist.
Beispielausgabe für einen einzelnen ZooKeeper-Knoten:
$ 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
Dieser Befehl listet die ZooKeeper-Variablen auf, mit denen Sie den Status des ZooKeeper-Clusters prüfen können.
Beispielausgabe:
$ 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
Dieser Befehl listet Statistiken zur Leistung und zu verbundenen Clients auf.
Beispielausgabe:
$ 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
Dieser Befehl enthält erweiterte Details zu ZooKeeper-Verbindungen.
Beispielausgabe:
$ 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)
Wenn bei einem der letzten drei Systemdiagnosebefehle die folgende Meldung angezeigt wird:
$ echo stat | nc localhost 2181 This ZooKeeper instance is not currently serving requests
bedeutet das, dass der entsprechende ZooKeeper-Knoten keine Anfragen verarbeitet.
-
- Prüfen Sie die ZooKeeper-Logs auf dem entsprechenden Knoten und suchen Sie nach Fehlern, die dazu führen, dass der
ZooKeeper ausgefallen ist. ZooKeeper-Logs sind im folgenden Verzeichnis verfügbar:
$ 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
Auflösung
- Starten Sie alle anderen ZooKeeper-Knoten im Cluster einzeln neu.
- Führen Sie die ZooKeeper-Systemdiagnosebefehle auf jedem Knoten noch einmal aus und prüfen Sie, ob die erwartete Ausgabe angezeigt wird.
Wenden Sie sich an den Apigee-Support, um die Ursache für die Systemlast zu ermitteln, wenn das Problem weiterhin besteht oder wenn das Problem durch Neustarts nicht behoben werden kann.