Zookeeper kann nicht gestartet werden

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:

  1. 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
    
  2. 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

  1. Prüfen Sie das ZooKeeper-Log /opt/apigee/var/log/apigee-zookeeper/zookeeper.log auf Fehler.
  2. 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)
    
  3. Prüfen Sie die Datei /opt/apigee/apigee-zookeeper/conf/zoo.cfg und notieren Sie sich „server.#“ für den aktuellen ZooKeeper-Knoten.
  4. 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.
  5. 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

  1. Prüfen Sie das ZooKeeper-Log /opt/apigee/var/log/apigee-zookeeper/zookeeper.log auf Fehler.
  2. 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)
    
  3. 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:

  1. 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
    
  2. 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
    
  3. 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

  1. Rufen Sie die Prozess-ID des derzeit ausgeführten ZooKeeper-Prozesses mit dem Befehl ps ab:
    ps -ef | grep zookeeper
    
  2. 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.
  3. 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

  1. 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).
  2. 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:

  1. Prüfen Sie das ZooKeeper-Log /opt/apigee/var/log/apigee-zookeeper/zookeeper.log auf Fehler.
  2. Prüfen Sie, ob Konfigurationsänderungen vorgenommen wurden, die dazu führen können, dass die ZooKeeper-Auswahl des Leaders fehlschlägt.
  3. 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.