Nie udało się uruchomić aplikacji Zookeeper

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

Krótki opis problemu

Nie można uruchomić procesu ZooKeeper.

Komunikaty o błędach

Przy próbie uruchomienia procesu ZooKeeper zwracany jest następujący komunikat o błędzie: wskazujący, że nie można uruchomić programu ZooKeeper:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

Możliwe przyczyny

W tabeli poniżej znajdziesz możliwe przyczyny tego problemu:

Przyczyna Dla:
Błędnie skonfigurowany identyfikator ZooKeeper Użytkownicy Edge Private Cloud
Port ZooKeeper w użyciu Użytkownicy Edge Private Cloud
Nieprawidłowy identyfikator procesu w pliku apigee-zookeeper.pid Użytkownicy Edge Private Cloud
Niepowodzenie w wyborach na lidera zoologicznego Użytkownicy Edge Private Cloud

Kliknij odpowiedni link w tabeli, aby zobaczyć możliwe rozwiązania problemu.

Błędnie skonfigurowany identyfikator ZooKeeper

Poniższe sekcje zawierają omówienie pliku myid oraz sposoby diagnozowania i diagnozowania i rozwiązywać problemy z błędami konfiguracji.

Omówienie pliku myid

W każdym węźle ZooKeeper są dwa pliki:

  1. Plik /opt/apigee/apigee-zookeeper/conf/zoo.cfg, który zawiera listę Adresy IP wszystkich węzłów ZooKeeper w klastrze.

    Jeśli na przykład /opt/apigee/apigee-zookeeper/conf/zoo.cfg zawiera parametr Adresy IP 3 węzłów ZooKeeper należących do klastra w następujący sposób:

    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. Plik /opt/apigee/data/apigee-zookeeper/data/myid zawiera jeden wiersz odpowiadający numerowi serwera tego konkretnego węzła ZooKeeper. Myid firmy serwer 1 będzie zawierał tekst „1” i nic więcej. Identyfikator musi być niepowtarzalny w obrębie zestawu i powinny mieć wartość od 1 do 255.

    Na przykład w pliku ZooKeeper server.1 parametr /opt/apigee/data/apigee-zookeeper/data/myid plik powinien zawierać tylko tekst 1 jak poniżej:

    $ cat myid
    1
    

Diagnostyka

  1. Sprawdź dziennik ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log pod kątem .
  2. Jeśli pojawi się komunikat z ostrzeżeniem podobny do „Połączenie przerwane dla identyfikatora nr, mój identyfikator = #”, jak widać na ilustracji poniżej, prawdopodobną przyczyną problemu może być to, że serwer # w pliku myid jest nieprawidłowo skonfigurowany lub uszkodzony.
    [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. Sprawdź plik /opt/apigee/apigee-zookeeper/conf/zoo.cfg i zanotuj server.# dla bieżącego węzła ZooKeeper.
  4. Sprawdź, czy w pliku /opt/apigee/data/apigee-zookeeper/data/myid znajduje się tekst jest zgodny z serwerem.# podanym w kroku 2.
  5. Jeśli informacje są nieprawidłowe, oznacza to, że zostały już przez Ciebie określone przyczyny niepowodzenia aplikacji ZooKeeper. i rozpoczęcia odtwarzania.

Rozdzielczość

Jeśli plik myid jest nieprawidłowo skonfigurowany, zmodyfikuj plik myid i zastąp jego wartość poprawny tekst reprezentujący parametr server.# w zoo.cfg.

Używany port ZooKeeper

Diagnostyka

  1. Sprawdź dziennik ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log dla .
  2. Jeśli zauważysz wyjątek java.net.BindException: Address already in use z portem 2181, jak widać na ilustracji poniżej, wskazuje, że ZooKeeper Port 2181 jest używany przez inny proces. Dlatego nie mogliśmy uruchomić programu ZooKeeper.
    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. Użyj poniższego polecenia netstat, aby potwierdzić, że port 2181 ZooKeeper jest rzeczywiście używany. w inny sposób:
    netstat -an | grep 2181
    

Rozdzielczość

Jeśli port 2181 ZooKeeper jest nadal używany, wykonaj poniższe czynności, aby rozwiązać ten problem problem:

  1. Za pomocą polecenia netstat znajdź proces, który blokuje port 2181. Wyłącz proces, który używa portu 2181 ZooKeeper:
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
    
  2. Wyczyść pid i zablokuj pliki, jeśli istnieją:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. Ponownie uruchom ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Nieprawidłowy identyfikator procesu w pliku apigee-zookeeper.pid

Próba zatrzymania/ponownego uruchomienia programu ZooKeeper może się zakończyć niepowodzeniem, ponieważ Plik apigee-zookeeper.pid zawiera starszy/nieprawidłowy pid, a nie plik z aktualnie i uruchomić proces ZooKeeper. Może się tak zdarzyć, jeśli proces ZooKeeper został nieoczekiwanie zakończony lub nagle z jakiegoś powodu plik apigee-zookeeper.pid nie został usunięty.

Diagnostyka

  1. Uzyskaj identyfikator aktualnie uruchomionego procesu ZooKeeper, uruchamiając polecenie Polecenie ps:
    ps -ef | grep zookeeper
    
  2. Sprawdź, czy plik /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid istnieje. Jeśli proces istnieje, zapisz identyfikator procesu zapisany w tym pliku.
  3. Porównaj identyfikatory procesów uzyskane w krokach 1 i 2. Jeśli są różne, przyczyna w przypadku tego problemu ma nieprawidłowy identyfikator procesu w apigee-zookeeper.pid file.

Rozdzielczość

  1. Edytuj plik apigee-zookeeper.pid i zastąp nieprawidłowy identyfikator procesu prawidłowym. identyfikator procesu uzyskany z polecenia ps (krok 1 powyżej).
  2. Ponownie uruchom ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Niepowodzenie wyborów lidera ZooKeeper

Diagnostyka

Aby zdiagnozować:

  1. Sprawdź dziennik ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log pod kątem .
  2. Sprawdź, czy nie nastąpiły zmiany w konfiguracji, które mogłyby spowodować wybór programu ZooKeeper do na porażkę.
  3. Sprawdź /opt/apigee/apigee-zookeeper/conf/zoo.cfg i upewnij się, że wszystkie Obiekty ZooKeepers w klastrze mają odpowiednią liczbę i adresy IP dla parametru server.#. Pamiętaj też, że aby wybory na lidera zakończą się sukcesem, musisz mieć co najmniej 3 głosów a liczba głosujących powinna być liczbą nieparzystą. Jeśli jest zbyt mało wyborców, np. tylko 2 wyborców nie może dojść do kworum, aby wyłonić lidera spośród zaledwie 2 głosujących.

Rozdzielczość

Zwykle niepowodzenie wyborów w ZooKeeper jest spowodowane nieprawidłowo skonfigurowanym identyfikatorem myid. Użyj rozdzielczości w Nieprawidłowo skonfigurowany identyfikator myid ZooKeeper w odpowiedzi na niepowodzenie wyborów.

Jeśli problem nie ustąpi i potrzebna jest dalsza diagnoza, skontaktuj się z zespołem pomocy Apigee Edge.