Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zu
Apigee X. info
Symptom
Der ZooKeeper-Prozess kann nicht gestartet werden.
Fehlermeldungen
Wenn Sie versuchen, den ZooKeeper-Prozess zu starten, wird die folgende Fehlermeldung zurückgegeben die darauf hinweist, dass ZooKeeper nicht gestartet werden konnte:
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
Mögliche Ursachen
In der folgenden Tabelle sind mögliche Ursachen für dieses Problem aufgeführt:
| Ursache | Für |
|---|---|
| Falsch konfigurierte ZooKeeper-myid | Nutzer von Edge Private Cloud |
| ZooKeeper-Port wird verwendet | Nutzer von Edge Private Cloud |
| Falsche Prozess-ID in der Datei „apigee-zookeeper.pid“ | Nutzer von Edge Private Cloud |
| Fehler bei der ZooKeeper-Leader-Auswahl | 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.
Falsch konfigurierte ZooKeeper-myid
In den folgenden Abschnitten finden Sie eine Übersicht über die Datei „myid“ und eine Beschreibung, wie Sie Probleme mit der Fehlkonfiguration diagnostizieren und beheben.
Übersicht über die Datei „myid“
Auf jedem ZooKeeper-Knoten gibt es zwei Dateien:
- Die Datei
/opt/apigee/apigee-zookeeper/conf/zoo.cfgenthält eine Liste der IPs für alle ZooKeeper-Knoten im Cluster.Wenn die Datei
/opt/apigee/apigee-zookeeper/conf/zoo.cfgbeispielsweise die IPs von drei ZooKeeper-Knoten enthält, die Teil des Clusters sind, sieht das so aus:server.1=11.11.11.11:2888:3888 server.2=22.22.22.22:2888:3888 server.3=33.33.33.33:2888:3888
- Die Datei
/opt/apigee/data/apigee-zookeeper/data/myidenthält eine einzelne Textzeile, die der Servernummer des jeweiligen ZooKeeper-Knotens entspricht. Die myid von Server 1 enthält den Text „1“ und nichts anderes. Die ID muss im Ensemble eindeutig sein und einen Wert zwischen 1 und 255 haben.Auf ZooKeeper-Server 1 sollte die Datei
/opt/apigee/data/apigee-zookeeper/data/myidbeispielsweise nur den Text „1“ enthalten, wie unten gezeigt:$ cat myid 1
Diagnose
- Prüfen Sie das ZooKeeper-Log
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logauf Fehler. - Wenn Sie die WARN-Meldung „Connection broken for id #, my id = #“ sehen,
wie in der Abbildung unten gezeigt, kann die Ursache für dieses Problem darin liegen, dass der Server #
in der Datei „myid“ falsch konfiguriert oder beschädigt ist.
[myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] - Connection broken for id 2, my id = 2, error = java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:375) at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker. run(QuorumCnxManager.java:747)
- Prüfen Sie die
/opt/apigee/apigee-zookeeper/conf/zoo.cfgDatei und notieren Sie sich den Wert für „server.#“ für den aktuellen ZooKeeper-Knoten. - Prüfen Sie die Datei
/opt/apigee/data/apigee-zookeeper/data/myidund sehen Sie nach, ob der Text in dieser Datei mit dem in Schritt 2 notierten Wert für „server.#“ übereinstimmt. - Wenn es eine Abweichung gibt, haben Sie die Ursache dafür gefunden, dass ZooKeeper nicht gestartet werden kann.
Auflösung
Wenn die Datei „myid“ falsch konfiguriert ist, bearbeiten Sie sie und ersetzen Sie den Wert durch den korrekten Text, der den Parameter „server.#“ in der Datei „zoo.cfg“ darstellt.
ZooKeeper-Port wird verwendet
Diagnose
- Prüfen Sie das ZooKeeper-Log
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logauf Fehler. - Wenn beim Binden an Port 2181 die Ausnahme
java.net.BindException: Address already in useauftritt, wie in der Abbildung unten gezeigt, wird der ZooKeeper Port 2181 von einem anderen Prozess verwendet. Daher konnte ZooKeeper nicht gestartet werden.2017-04-26 07:00:10,420 [myid:3] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:2181 2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67) at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95) at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
- Verwenden Sie den folgenden „netstat“-Befehl, um zu bestätigen, dass der ZooKeeper-Port 2181 tatsächlich von einem anderen Prozess verwendet wird:
netstat -an | grep 2181
Auflösung
Wenn der ZooKeeper-Port 2181 weiterhin verwendet wird, führen Sie die folgenden Schritte aus, um dieses Problem zu beheben:
- Verwenden Sie den Befehl
netstat, um den Prozess zu finden, der Port 2181 verwendet. Beenden Sie den Prozess, der den ZooKeeper-Port 2181 verwendet:$ netstat -antp | grep 2181 tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 28016/java <defunct> $ kill -9 28016
- Bereinigen Sie PID- und Sperrdateien, falls vorhanden:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- Starten Sie ZooKeeper neu:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Falsche Prozess-ID in der Datei „apigee-zookeeper.pid“
Wenn Sie versuchen, ZooKeeper zu beenden oder neu zu starten, kann dies fehlschlagen, weil die
apigee-zookeeper.pid Datei eine ältere oder falsche PID enthält und nicht die des aktuell
ausgeführten ZooKeeper-Prozesses. Das kann passieren, wenn der ZooKeeper-Prozess aus irgendeinem Grund unerwartet oder
abrupt beendet wurde und die apigee-zookeeper.pid Datei nicht gelöscht wurde.
Diagnose
- Rufen Sie die Prozess-ID des aktuell ausgeführten ZooKeeper-Prozesses mit dem
psBefehl ab:ps -ef | grep zookeeper
- Prüfen Sie, ob die
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pidDatei vorhanden ist. Wenn sie vorhanden ist, notieren Sie sich die Prozess-ID, die in diese Datei geschrieben wurde. - Vergleichen Sie die Prozess-IDs aus Schritt 1 und 2. Wenn sie sich unterscheiden, ist die Ursache
für dieses Problem die falsche Prozess-ID in der
apigee-zookeeper.pid file.
Auflösung
- Bearbeiten Sie die Datei „apigee-zookeeper.pid“ und ersetzen Sie die falsche Prozess-ID durch die richtige Prozess-ID, die Sie mit dem Befehl „ps“ abgerufen haben (Schritt 1 oben).
- Starten Sie ZooKeeper neu:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Fehler bei der ZooKeeper-Leader-Auswahl
Diagnose
So führen Sie die Diagnose durch:
- Prüfen Sie das ZooKeeper-Log
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logauf Fehler. - Prüfen Sie, ob Konfigurationsänderungen vorgenommen wurden, die dazu führen könnten, dass die ZooKeeper-Leader-Auswahl fehlschlägt.
- Prüfen Sie die Datei
/opt/apigee/apigee-zookeeper/conf/zoo.cfgund stellen Sie sicher, dass alle ZooKeeper im Cluster die richtige Anzahl und die richtigen IP-Adressen für den Parameter „server.#“ haben. Außerdem müssen mindestens drei Wähler vorhanden sein, damit die Leader-Auswahl erfolgreich ist. Die Anzahl der Wähler sollte eine ungerade Zahl sein. Wenn es zu wenige Wähler gibt, z. B. nur zwei Wähler, kann kein Quorum erreicht werden, um einen Leader unter nur zwei Wählern zu bestimmen.
Auflösung
In der Regel wird ein Fehler bei der ZooKeeper-Auswahl durch eine falsch konfigurierte myid verursacht. Verwenden Sie die Lösung unter Falsch konfigurierte ZooKeeper-myid, um den Fehler bei der Auswahl zu beheben.
Wenn das Problem weiterhin besteht und eine weitere Diagnose erforderlich ist, wenden Sie sich an den Apigee Edge-Support.