Zookeeper kann nicht gestartet werden

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie 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. , was 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 Edge Private Cloud-Nutzer
ZooKeeper-Port wird verwendet Edge Private Cloud-Nutzer
Falsche Prozess-ID in der Datei apigee-zookeeper.pid Edge Private Cloud-Nutzer
ZooKeeper-Leader – Wahlfehler Edge Private Cloud-Nutzer

Klicken Sie auf einen Link in der Tabelle, um mögliche Lösungen zu sehen.

Falsch konfigurierte ZooKeeper-Myid

In den folgenden Abschnitten erhalten Sie einen Überblick über die Datei myid und beschreiben, wie Sie Diagnosen stellen und Probleme mit der Konfiguration zu beheben.

Übersicht über die myid-Datei

Auf jedem ZooKeeper-Knoten befinden sich zwei Dateien:

  1. Die Datei /opt/apigee/apigee-zookeeper/conf/zoo.cfg mit einer Liste von IP-Adressen für alle ZooKeeper-Knoten im Cluster.

    Wenn beispielsweise /opt/apigee/apigee-zookeeper/conf/zoo.cfg den Parameter IP-Adressen von drei ZooKeeper-Knoten des Clusters:

    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 Zeile mit Text, der der Servernummer des jeweiligen ZooKeeper-Knotens entspricht. Das Myid von Server 1 enthält den Text „1“ und sonst nichts. Die ID muss innerhalb des Ensembles eindeutig sein. und sollte einen Wert zwischen 1 und 255 haben.

    Auf ZooKeeper server.1 wird z. B. der Parameter Die Datei „/opt/apigee/data/apigee-zookeeper/data/myid“ sollte nur den Text „1“ enthalten wie unten dargestellt:

    $ cat myid
    1
    

Diagnose

  1. Prüfen Sie das ZooKeeper-Protokoll /opt/apigee/var/log/apigee-zookeeper/zookeeper.log auf Fehler.
  2. Wenn Sie die WARN-Meldung „Verbindung unterbrochen für ID #, meine ID = #“ sehen, wie in der Abbildung unten gezeigt, könnte das Problem dadurch verursacht werden, dass der Server # in der myid-Datei 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. Sehen Sie sich die Datei /opt/apigee/apigee-zookeeper/conf/zoo.cfg an und notieren Sie die server.# für den aktuellen ZooKeeper-Knoten.
  4. Sehen Sie in der Datei /opt/apigee/data/apigee-zookeeper/data/myid nach, ob der Text in dieser Datei mit dem Server.# übereinstimmt, der in Schritt 2 angegeben ist.
  5. Wenn es eine Abweichung gibt, haben Sie die Ursache dafür ermittelt, dass ZooKeeper beginnen.

Auflösung

Wenn die Datei „myid“ falsch konfiguriert ist, bearbeiten Sie die Datei „myid“ und ersetzen Sie den Wert durch einen korrekten Text für den Parameter server.# in der Datei "zoo.cfg".

ZooKeeper-Port wird verwendet

Diagnose

  1. ZooKeeper-Protokoll /opt/apigee/var/log/apigee-zookeeper/zookeeper.log prüfen auf Fehler.
  2. Wenn Sie die Ausnahme java.net.BindException: Address already in use während der Bindung an Port Nr. 2181, wie in der nachfolgenden Abbildung gezeigt, an, dass der ZooKeeper von einem anderen Prozess verwendet wird. ZooKeeper konnte daher 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 verwendet wird. durch einen anderen Prozess:
    netstat -an | grep 2181
    

Auflösung

Wenn der ZooKeeper-Port 2181 noch verwendet wird, gehen Sie wie unten beschrieben vor, um dieses Problem zu beheben. Problem:

  1. Verwenden Sie den Befehl netstat, um den Prozess zu finden, der Port 2181 blockiert. 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 und sperren Sie vorhandene Dateien:
    /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

Beim Versuch, ZooKeeper zu stoppen oder neu zu starten, kann dies scheitern, da der apigee-zookeeper.pid Datei enthält eine ältere/falsche PID und nicht die der aktuellen den ZooKeeper-Prozess ausführt. Dies kann passieren, wenn der ZooKeeper-Prozess unerwartet beendet wurde oder abrupt aus irgendeinem Grund nicht gelöscht wurde und die Datei apigee-zookeeper.pid nicht gelöscht wurde.

Diagnose

  1. Rufen Sie die Prozess-ID des derzeit ausgeführten ZooKeeper-Prozesses ab, indem Sie den Befehl ps:
    ps -ef | grep zookeeper
    
  2. Prüfen Sie, ob die Datei /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid existiert. Falls vorhanden, notieren Sie sich die in diese Datei geschriebene Prozess-ID.
  3. Vergleichen Sie die Prozess-IDs aus Schritt 1 und Schritt 2. Sind sie unterschiedlich, hat die Ursache für dieses Problem ist die falsche Prozess-ID in 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 mit dem ps-Befehl abgerufen wurde (Schritt 1 oben).
  2. Starten Sie ZooKeeper neu:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

ZooKeeper-Leader – Wahlfehler

Diagnose

Zur Diagnose:

  1. Prüfen Sie das ZooKeeper-Protokoll /opt/apigee/var/log/apigee-zookeeper/zookeeper.log auf Fehler.
  2. Überprüfen Sie, ob Konfigurationsänderungen vorgenommen wurden, die dazu führen können, dass ZooKeeper die führen könnte.
  3. Prüfen Sie, ob alle /opt/apigee/apigee-zookeeper/conf/zoo.cfg ZooKeepers im Cluster haben die richtige Nummer und IP-Adressen für den Parameter server.#. Damit eine Wahl zum Spitzenreiter erfolgreich werden kann, muss die Mindestanzahl von drei Wählern enthalten sein. und die Anzahl der Wähler sollte ungerade sein. Wenn es zu wenige Wähler gibt, zum Beispiel Wähler können nicht beschlossen werden, dass nur zwei Wähler einen Vorsitzenden wählen.

Auflösung

In der Regel wird das Fehlschlagen von ZooKeeper-Wahlen durch eine falsch konfigurierte myid verursacht. Verwenden Sie die Auflösung in Falsch konfigurierte ZooKeeper-myid zum Beheben des Wahlfehlers.

Wenn das Problem weiterhin besteht und eine weitere Diagnose erforderlich ist, wenden Sie sich an den Apigee Edge-Support.