Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation weitere Informationen
Symptom
ZooKeeper-Prozess kann nicht gestartet werden.
Fehlermeldungen
Wenn Sie versuchen, den ZooKeeper-Prozess zu starten, wird die folgende Fehlermeldung zurückgegeben, die besagt, 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 die möglichen Ursachen dieses Problems aufgeführt:
Ursache | Für |
---|---|
Falsch konfigurierte ZooKeeper-MyID | Edge Private Cloud-Nutzer |
ZooKeeper-Port wird genutzt | Edge Private Cloud-Nutzer |
Falsche Prozess-ID in apigee-zookeeper.pid-Datei | Edge Private Cloud-Nutzer |
Fehler bei der Wahl des ZooKeeper-Vorsitzenden | Edge Private Cloud-Nutzer |
Klicken Sie auf einen Link in der Tabelle, um mögliche Lösungen für diese Ursache zu sehen.
Falsch konfigurierte ZooKeeper-MyID
In den folgenden Abschnitten erhalten Sie einen Überblick über die myid-Datei und erfahren, wie Sie fehlerhafte Konfigurationen diagnostizieren und beheben.
Übersicht über die myid-Datei
Auf jedem ZooKeeper-Knoten sind zwei Dateien vorhanden:
- Die Datei
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
, die eine Liste von IP-Adressen für alle ZooKeeper-Knoten im Cluster enthält.Beispiel:
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
enthält die IP-Adressen von drei ZooKeeper-Knoten im Cluster: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/myid
enthält eine einzelne Textzeile, die der Servernummer dieses bestimmten ZooKeeper-Knotens entspricht. Die myid von Server 1 enthält ausschließlich den Text „1“. Die ID muss innerhalb der Gruppe eindeutig sein und sollte einen Wert zwischen 1 und 255 haben.Auf ZooKeeper-Server.1 sollte die Datei
/opt/apigee/data/apigee-zookeeper/data/myid
beispielsweise nur den Text 1 enthalten, wie unten dargestellt:$ cat myid 1
Diagnose
- Prüfen Sie das ZooKeeper-Log
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
auf Fehler. - Wenn Sie die WARN-Meldung „Verbindung für ID #, meine ID = #“ ähnlich wie in der Abbildung unten sehen, könnte die mögliche Ursache für dieses Problem darin bestehen, dass die Servernummer 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 Datei
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
und notieren Sie sich „server.#“ für den aktuellen ZooKeeper-Knoten. - Prüfen Sie die Datei
/opt/apigee/data/apigee-zookeeper/data/myid
und prüfen Sie, ob der Text in dieser Datei mit dem in Schritt 2 notierten server.# übereinstimmt. - Wenn es eine Abweichung gibt, haben Sie die Ursache dafür ermittelt, dass ZooKeeper nicht gestartet werden kann.
Auflösung
Wenn die Datei „myid“ falsch konfiguriert ist, bearbeiten Sie sie und ersetzen Sie den Wert durch einen 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.log
auf Fehler. - Wenn Sie während der Bindung an Port 2181 die Ausnahme
java.net.BindException: Address already in use
feststellen (siehe Abbildung unten), weist dies darauf hin, dass der ZooKeeper-Port 2181 von einem anderen Prozess verwendet wird. 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)
- Prüfen Sie mit dem folgenden netstat-Befehl, ob der ZooKeeper-Port 2181 tatsächlich von einem anderen Prozess verwendet wird:
netstat -an | grep 2181
Auflösung
Wenn der ZooKeeper-Port 2181 noch verwendet wird, gehen Sie so vor, um das Problem zu beheben:
- Verwenden Sie den Befehl
netstat
, um den Prozess zu ermitteln, der Port 2181 festhält. 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 die pid-Dateien und sperren Sie sie, 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 apigee-zookeeper.pid-Datei
Wenn Sie versuchen, ZooKeeper zu beenden oder neu zu starten, kann dies fehlschlagen, da die Datei apigee-zookeeper.pid
eine ältere/falsche PID und nicht die des aktuell ausgeführten ZooKeeper-Prozesses enthält. Dies kann passieren, wenn der ZooKeeper-Prozess unerwartet oder plötzlich aus irgendeinem Grund beendet wurde und die Datei apigee-zookeeper.pid
nicht gelöscht wurde.
Diagnose
- Rufen Sie die Prozess-ID des derzeit ausgeführten ZooKeeper-Prozesses mit dem Befehl
ps
ab:ps -ef | grep zookeeper
- Prüfen Sie, ob die Datei
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
vorhanden ist. Falls vorhanden, notieren Sie sich die Prozess-ID in dieser Datei. - Vergleichen Sie die Prozess-IDs aus Schritt 1 und 2. Wenn sie sich unterscheiden, liegt die Ursache für dieses Problem darin, dass die falsche Prozess-ID im
apigee-zookeeper.pid file.
angegeben ist.
Auflösung
- Bearbeiten Sie die Datei apigee-zookeeper.pid und ersetzen Sie die falsche Prozess-ID durch die korrekte Prozess-ID aus dem ps-Befehl (Schritt 1 oben).
- Starten Sie ZooKeeper neu:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Misserfolg der Wahl unter dem Leader in ZooKeeper
Diagnose
Zur Diagnose:
- Prüfen Sie das ZooKeeper-Log
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
auf Fehler. - Prüfen Sie, ob Konfigurationsänderungen vorgenommen wurden, die dazu führen können, dass die ZooKeeper-Auswahl des Leaders fehlschlägt.
- Prüfen Sie
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
und sorgen Sie dafür, dass alle ZooKeeper im Cluster die richtige Nummer und IP-Adressen für den Parameter „server.#“ haben. Damit die Wahl des Leaders erfolgreich ist, müssen mindestens drei Wähler vorhanden sein und die Anzahl der Wähler muss ungerade sein. Wenn zu wenige Wähler vorhanden sind, z. B. nur zwei Wähler, kann ein Beschlussergebnis nicht erreicht werden, um unter nur zwei Wählern einen Führenden zu bestimmen.
Auflösung
Normalerweise wird das Fehlschlagen von ZooKeeper-Wahlen durch eine falsch konfigurierte myid verursacht. Verwenden Sie die Lösung in Falsch konfigurierte ZooKeeper-myid, um das Fehlschlagen der Wahl zu beheben.
Wenn das Problem weiterhin besteht und eine weitere Diagnose erforderlich ist, wenden Sie sich an den Apigee Edge-Support.