Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
Krótki opis problemu
Nie udało się rozpocząć procesu ZooKeeper.
Komunikaty o błędach
Przy próbie uruchomienia procesu ZooKeeper zwracany jest następujący komunikat o błędzie informujący, że nie udało się uruchomić aplikacji 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łędna konfiguracja identyfikatora ZooKeeper | Użytkownicy chmury Private Cloud |
Port ZooKeeper w użyciu | Użytkownicy chmury Private Cloud |
Nieprawidłowy identyfikator procesu w pliku apigee-zookeeper.pid | Użytkownicy chmury Private Cloud |
Nieudane wybory lidera ZooKeeper | Użytkownicy chmury Private Cloud |
Kliknij link w tabeli, aby wyświetlić możliwe rozwiązania tej przyczyny.
Błędna konfiguracja identyfikatora ZooKeeper
Poniższe sekcje zawierają omówienie pliku myid oraz sposoby diagnozowania i rozwiązywania problemów z nieprawidłową konfiguracją.
Omówienie pliku myid
W każdym węźle ZooKeeper znajdują się 2 pliki:
- Plik
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
zawierający listę adresów IP wszystkich węzłów ZooKeeper w klastrze.Jeśli na przykład
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
zawiera adresy IP 3 węzłów ZooKeeper, część klastra wygląda tak:server.1=11.11.11.11:2888:3888 server.2=22.22.22.22:2888:3888 server.3=33.33.33.33:2888:3888
- Plik
/opt/apigee/data/apigee-zookeeper/data/myid
zawiera jeden wiersz tekstu, który odpowiada numerowi serwera tego konkretnego węzła ZooKeeper. Myid serwera 1 będzie zawierał tekst „1” i nic więcej. Identyfikator musi być unikalny w obrębie zbioru i mieć wartość z zakresu od 1 do 255.Na przykład na serwerze ZooKeeper.1 plik
/opt/apigee/data/apigee-zookeeper/data/myid
powinien zawierać tylko tekst 1, jak w tym przykładzie:$ cat myid 1
Diagnostyka
- Sprawdź dziennik ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
pod kątem błędów. - Jeśli zobaczysz komunikat WARN podobne do „Połączenie przerwane, identyfikator = #”, jak pokazano na ilustracji poniżej, prawdopodobną przyczyną tego problemu może być niewłaściwa konfiguracja serwera o identyfikatorze myid w pliku myid.
[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)
- Sprawdź plik
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
i zanotuj parametr „server.#” bieżącego węzła ZooKeeper. - Sprawdź plik
/opt/apigee/data/apigee-zookeeper/data/myid
i zobacz, czy tekst w tym pliku jest zgodny z tekstem na serwerze.# wymienionym w kroku 2. - Występowanie rozbieżności oznacza, że udało Ci się określić przyczynę niepowodzenia uruchomienia aplikacji ZooKeeper.
Rozdzielczość
Jeśli plik myid jest nieprawidłowo skonfigurowany, zmodyfikuj go i zastąp wartość prawidłowym tekstem reprezentującym parametr „server.#” w zoo.cfg.
Używasz portu ZooKeeper
Diagnostyka
- Sprawdź błędy w logu ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
. - Jeśli zauważysz wyjątek
java.net.BindException: Address already in use
podczas wiązania z portem nr 2181 (jak pokazano na ilustracji poniżej), oznacza to, że port 2181 jest używany przez inny proces. Z tego powodu nie można uruchomić aplikacji 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)
- Użyj poniższego polecenia netstat, aby potwierdzić, że port ZooKeeper 2181 jest rzeczywiście używany przez inny proces:
netstat -an | grep 2181
Rozdzielczość
Jeśli port ZooKeeper 2181 jest nadal używany, wykonaj te czynności, aby rozwiązać ten problem:
- Za pomocą polecenia
netstat
znajdź proces, który trzyma się na porcie 2181. Zakończ proces, który korzysta z portu ZooKeeper 2181:$ netstat -antp | grep 2181 tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 28016/java <defunct> $ kill -9 28016
- Usuń pliki pid i zablokuj je, jeśli istnieją:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- 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 lub ponownego uruchomienia aplikacji ZooKeeper może się zakończyć niepowodzeniem, ponieważ plik apigee-zookeeper.pid
zawiera starszy/nieprawidłowy pid, a nie ten aktualnie uruchomiony proces ZooKeeper. Może się tak zdarzyć, jeśli proces ZooKeeper zakończy się nieoczekiwanie lub nagle z jakiegoś powodu, a plik apigee-zookeeper.pid
nie został usunięty.
Diagnostyka
- Uzyskaj identyfikator procesu obecnie uruchomionego procesu ZooKeeper, uruchamiając polecenie
ps
:ps -ef | grep zookeeper
- Sprawdź, czy plik
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
istnieje. Jeśli istnieje, zanotuj identyfikator procesu zapisany w tym pliku. - Porównaj identyfikatory procesów uzyskane w krokach 1 i 2. Jeśli są różne, przyczyną tego problemu jest nieprawidłowy identyfikator procesu w elemencie
apigee-zookeeper.pid file.
Rozdzielczość
- Edytuj plik apigee-zookeeper.pid i zastąp nieprawidłowy identyfikator procesu prawidłowym identyfikatorem procesu uzyskanym z polecenia ps (krok 1 powyżej).
- Ponownie uruchom ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Nieudany wybory lidera ZooKeeper
Diagnostyka
Aby zdiagnozować problem:
- Sprawdź dziennik ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
pod kątem błędów. - Sprawdź, czy nie wprowadzono żadnych zmian w konfiguracji, które mogły spowodować niepowodzenie wyboru lidera w przypadku ZooKeeper.
- Sprawdź
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
i upewnij się, że wszystkie ZooKeepers w klastrze mają prawidłowy numer i adresy IP dla parametruserver.#. Pamiętaj też, że aby wybory lidera zostały ocenione, wymagane są co najmniej 3 głosy, a liczba głosów powinna być nieparzysta. Jeśli głosujących jest zbyt mało, np. tylko 2 głosy, nie można uzyskać kworum, aby wyłonić lidera spośród jedynie 2 głosów.
Rozdzielczość
Nieudana próba wyborów ZooKeeper jest zwykle spowodowana nieprawidłową konfiguracją mojego identyfikatora. Aby rozwiązać problem z wyborami, skorzystaj z rozwiązania w artykule Błędna konfiguracja ZooKeeper myid.
Jeśli problem nie ustąpi i potrzebna jest dalsza diagnoza, skontaktuj się z zespołem pomocy Apigee Edge.