Zookeeper kann nicht gestartet werden

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:

  1. Die Datei /opt/apigee/apigee-zookeeper/conf/zoo.cfg enthält eine Liste der IPs für alle ZooKeeper-Knoten im Cluster.

    Wenn die Datei /opt/apigee/apigee-zookeeper/conf/zoo.cfg beispielsweise 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
  2. Die Datei /opt/apigee/data/apigee-zookeeper/data/myid enthä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/myid beispielsweise nur den Text „1“ enthalten, wie unten gezeigt:

    $ 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 „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)
  3. Prüfen Sie die /opt/apigee/apigee-zookeeper/conf/zoo.cfg Datei und notieren Sie sich den Wert für „server.#“ für den aktuellen ZooKeeper-Knoten.
  4. Prüfen Sie die Datei /opt/apigee/data/apigee-zookeeper/data/myid und sehen Sie nach, ob der Text in dieser Datei mit dem in Schritt 2 notierten Wert für „server.#“ übereinstimmt.
  5. 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

  1. Prüfen Sie das ZooKeeper-Log /opt/apigee/var/log/apigee-zookeeper/zookeeper.log auf Fehler.
  2. Wenn beim Binden an Port 2181 die Ausnahme java.net.BindException: Address already in use auftritt, 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)
  3. 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:

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

  1. Rufen Sie die Prozess-ID des aktuell ausgeführten ZooKeeper-Prozesses mit dem ps Befehl ab:
    ps -ef | grep zookeeper
  2. Prüfen Sie, ob die /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid Datei vorhanden ist. Wenn sie vorhanden ist, notieren Sie sich die Prozess-ID, die in diese Datei geschrieben wurde.
  3. 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

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

  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önnten, dass die ZooKeeper-Leader-Auswahl fehlschlägt.
  3. Prüfen Sie die Datei /opt/apigee/apigee-zookeeper/conf/zoo.cfg und 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.