Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Symptom
ZooKeeper-Verbindungsprobleme können sich in verschiedenen Symptomen äußern, zum Beispiel:
- Fehler bei der API-Proxy-Bereitstellung
- Verwaltungs-API-Aufrufe schlagen mit 5XX-Fehlern fehl
- Router oder Message Processor können nicht gestartet werden
- Analytics-Komponenten melden ZooKeeper-Verbindungsverlust in system.logs.
Fehlermeldungen
Im Folgenden finden Sie Beispiele für Fehlermeldungen, die auftreten können, wenn die Verbindung zu ZooKeeper-Knoten unterbrochen wird.
- Der folgende Fehler wird in Management Server-Logs zurückgegeben, wenn eine API-Proxy-Bereitstellung 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
- Während des Starts stellen die Router und Message Processor eine Verbindung zu ZooKeeper her. Wenn es Verbindungsprobleme mit ZooKeeper gibt, werden diese Komponenten nicht mit dem folgenden Fehler gestartet:
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]
- Die Edge-Benutzeroberfläche zeigt möglicherweise den folgenden Fehler an, 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 die möglichen Ursachen dieses Problems aufgeführt:
Ursache | Für |
---|---|
Netzwerkverbindungsproblem zwischen verschiedenen Rechenzentren | Edge Private Cloud-Nutzer |
ZooKeeper-Knoten verarbeitet keine Anfragen | Edge Private Cloud-Nutzer |
Klicken Sie auf einen Link in der Tabelle, um mögliche Lösungen für diese Ursache zu sehen.
Netzwerkverbindungsproblem zwischen verschiedenen Rechenzentren
Diagnose
Ein ZooKeeper-Cluster kann Knoten haben, die sich über mehrere Regionen/Rechenzentren erstrecken, z. B. DC-1 und DC-2. Die typische Apigee Edge 2-DC-Topologie hat folgende Eigenschaften:
- ZooKeeper server 1, 2 und 3 als Wähler in DC-1
- ZooKeeper 4 und 5 als Wähler und ZooKeeper 6 als Beobachter in DC-2.
Wenn die DC-1-Region ausfällt oder die Netzwerkverbindung zwischen DC-1 und DC-2 unterbrochen wird, können ZooKeeper-Knoten keinen neuen Leader in DC-2 auswählen und sie nicht mit dem Leader-Knoten kommunizieren. ZooKeeper-Beobachter können keinen neuen Vorsitzenden wählen und die beiden verbleibenden Wähler in DC-2 haben kein Quorum von mindestens drei Wählerknoten, um einen neuen Vorsitzenden zu wählen. Daher können die ZooKeepers in DC-2 keine Anfragen verarbeiten. Die verbleibenden ZooKeeper-Knoten in DC-2 werden weiterhin wiederholt, um eine Verbindung zu den ZooKeeper-Wählern herzustellen, um den Leader zu finden.
Auflösung
Wenden Sie die folgenden Lösungen an, um dieses Problem in der angegebenen Reihenfolge zu beheben.
Wenn Sie das Problem mit diesen Lösungen nicht beheben können, wenden Sie sich an den Apigee-Support.
Lösung Nr. 1
- Arbeiten Sie mit Ihren Netzwerkadministratoren zusammen, 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 Nr. 2
- Wenn die Reparatur der Netzwerkverbindung einige Zeit in Anspruch nimmt, können Sie das Problem umgehen, indem Sie ZooKeeper-Knoten in der Region neu konfigurieren, in der sie ausgefallen sind. Konfigurieren Sie beispielsweise den ZooKeeper-Cluster in DC-2 so neu, dass die drei ZooKeeper-Knoten in dieser Region alle Wähler sind, und entfernen Sie
server.#
imzoo.cfg
der ZooKeeper aus der Region DC-1.- Im folgenden Beispiel konfiguriert
zoo.cfg
Knoten für 2 Regionen, in denen DC-1us-ea
-Hostnamen verwendet, die die US-Ostregion angeben, und DC-2,us-wo
-Hostnamen, die die US-West-Region angeben. (HINWEIS: Nur relevante Konfigurationen werden 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 den
zoo.cfg
so neu: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 mithilfe von Code mit der Konfiguration eine Datei
/opt/apigee/customer/application/zookeeper.properties
mit folgenden Elementen: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 den USA mit Osten entfernt und die US-West-Knoten werden zu Wählern hochgestuft, wenn die Annotation
:observer
entfernt wird. - Im folgenden Beispiel konfiguriert
- Sichere
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
und die alte/opt/apigee/customer/application/zookeeper.properties
.Diese Dateien werden verwendet, um die Standardwerte wiederherzustellen, wenn die Netzwerkverbindung zwischen Rechenzentren wieder hergestellt ist.
Deaktivieren Sie die Beobachternotation für den Beobachterknoten. Fügen Sie dazu die folgende Konfiguration oben in
/opt/apigee/customer/application/zookeeper.properties
ein:conf_zoo_peertype=
-
Bearbeiten Sie die Datei
/opt/apigee/data/apigee-zookeeper/data/myid
so:- Ändern Sie für
server.1
den Eintrag innerhalb vonmyid
von 4 in 1. - Ändern Sie für
server.2
den Wertmyid
von 5 in 2. - Ändern Sie für
server.3
denmyid
von 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 DC-2.
- Prüfen Sie, ob die Knoten eine führende Variante haben:
$ 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 dem Namen "mode" gefolgt von "leader", wenn es der Leader ist, oder "follower", wenn es sich um einen Follower handelt.
Wenn das Netzwerk zwischen Rechenzentren wiederhergestellt ist, können die ZooKeeper-Konfigurationen auf den ZooKeeper-Knoten in DC-2 rückgängig gemacht werden.
Lösung Nr. 3
- Wenn ZooKeeper-Knoten im Cluster nicht gestartet werden, starten Sie ihn neu.
- Prüfen Sie die ZooKeeper-Protokolle, um festzustellen, warum der ZooKeeper-Knoten ausgefallen ist.
ZooKeeper-Protokolle 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-Protokolle zur Verfügung, damit Sie die Ursache für einen etwaigen ZooKeeper-Knoten beheben können, der möglicherweise angehalten wurde.
ZooKeeper-Knoten stellt keine Anfragen bereit
Ein ZooKeeper-Knoten im Ensemble kann möglicherweise fehlerhaft werden und nicht mehr auf Clientanfragen antworten. Mögliche Gründe:
- Der Knoten wurde angehalten, ohne neu gestartet zu werden.
- Der Knoten wurde ohne aktivierten automatischen Start neu gestartet.
- Die Systemlast auf dem Knoten hat dazu geführt, dass dieser ausgefallen oder fehlerhaft geworden ist.
Diagnose
- Führen Sie auf allen ZooKeeper-Knoten die folgenden Befehle für die ZooKeeper-Systemdiagnose 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
Mit diesem Befehl werden die ZooKeeper-Variablen aufgelistet, mit denen der Status des ZooKeeper-Clusters geprüft werden kann.
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 den 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 liefert 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 einer der letzten drei Befehle für die Systemdiagnose die folgende Meldung anzeigt:
$ echo stat | nc localhost 2181 This ZooKeeper instance is not currently serving requests
Dann wird angezeigt, dass bestimmte ZooKeeper-Knoten keine Anfragen verarbeiten.
-
- Prüfen Sie die ZooKeeper-Protokolle auf dem jeweiligen Knoten und versuchen Sie, alle Fehler zu finden, die zum Ausfall des ZooKeeper führen. 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 nacheinander alle anderen ZooKeeper-Knoten im Cluster neu.
- Führen Sie die ZooKeeper-Befehle für die Systemdiagnose auf jedem Knoten aus und prüfen Sie, ob Sie die erwartete Ausgabe erhalten.
Wenden Sie sich an den Apigee-Support, um die Ursache der Systemlast zu beheben, wenn diese bestehen bleibt oder wenn ein Neustart das Problem nicht löst.