Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację
Apigee X. info
Krótki opis problemu
Nie można uruchomić procesu ZooKeeper.
Komunikaty o błędach
Gdy próbujesz uruchomić proces ZooKeeper, pojawia się ten komunikat o błędzie wskazujący, że nie udało się uruchomić 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 |
|---|---|
| Nieprawidłowo skonfigurowany identyfikator ZooKeeper | Użytkownicy Edge Private Cloud |
| Port ZooKeeper jest używany | Użytkownicy Edge Private Cloud |
| Nieprawidłowy identyfikator procesu w pliku apigee-zookeeper.pid | Użytkownicy Edge Private Cloud |
| Nie udało się wybrać lidera ZooKeeper | Użytkownicy Edge Private Cloud |
Kliknij link w tabeli, aby zobaczyć możliwe rozwiązania tego problemu.
Nieprawidłowo skonfigurowany identyfikator ZooKeeper
W sekcjach poniżej znajdziesz omówienie pliku myid oraz informacje o tym, jak zdiagnozować i rozwiązać problemy 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.cfgzawierający listę adresów IP wszystkich węzłów ZooKeeper w klastrze.Jeśli na przykład plik
/opt/apigee/apigee-zookeeper/conf/zoo.cfgzawiera adresy IP 3 węzłów ZooKeeper należących do klastra w ten 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
- Plik
/opt/apigee/data/apigee-zookeeper/data/myidzawiera 1 wiersz tekstu, który odpowiada numerowi serwera danego węzła ZooKeeper. Identyfikator myid serwera 1 będzie zawierać tekst „1” i nic więcej. Identyfikator musi być unikalny w obrębie zespołu i mieć wartość od 1 do 255.Na przykład na serwerze ZooKeeper.1 plik
/opt/apigee/data/apigee-zookeeper/data/myidpowinien zawierać tylko tekst 1 jak pokazano poniżej:$ cat myid 1
Diagnostyka
- Sprawdź, czy w dzienniku ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.lognie ma błędów. - Jeśli widzisz komunikat ostrzegawczy podobny do „Connection broken for id #, my id = #”,
jak pokazano na ilustracji poniżej, przyczyną tego problemu może być nieprawidłowa konfiguracja lub uszkodzenie serwera #
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.cfgi zanotuj serwer.# dla bieżącego węzła ZooKeeper. - Sprawdź plik
/opt/apigee/data/apigee-zookeeper/data/myidi zobacz, czy tekst w tym pliku pasuje do serwera.# zanotowanego w kroku 2. - Jeśli występuje niezgodność, oznacza to, że udało Ci się zidentyfikować przyczynę niepowodzenia uruchomienia ZooKeeper.
Rozwiązanie
Jeśli plik myid jest nieprawidłowo skonfigurowany, otwórz go do edycji i zastąp wartość a prawidłowym tekstem reprezentującym parametr serwer.# w pliku zoo.cfg.
Port ZooKeeper jest używany
Diagnostyka
- Sprawdź, czy w dzienniku ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.lognie ma błędów. - Jeśli podczas wiązania z portem 2181 zauważysz wyjątek
java.net.BindException: Address already in use, jak pokazano na ilustracji poniżej, oznacza to, że port ZooKeeper 2181 jest używany przez inny proces. W związku z tym nie można uruchomić 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)
- Aby potwierdzić, że port ZooKeeper 2181 jest rzeczywiście używany
przez inny proces, użyj tego polecenia netstat:
netstat -an | grep 2181
Rozwiązanie
Jeśli port ZooKeeper 2181 jest nadal używany, wykonaj te czynności, aby rozwiązać ten problem:
- Użyj polecenia
netstat, aby znaleźć proces, który korzysta z portu 2181. Zakończ proces, który używa 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
- Wyczyść pliki pid i lock, jeśli istnieją:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- Uruchom ponownie ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Nieprawidłowy identyfikator procesu w pliku apigee-zookeeper.pid
Gdy próbujesz zatrzymać lub ponownie uruchomić ZooKeeper, może się to nie udać, ponieważ plik
apigee-zookeeper.pid zawiera starszy lub nieprawidłowy identyfikator pid, a nie identyfikator aktualnie
działającego procesu ZooKeeper. Może się tak zdarzyć, jeśli proces ZooKeeper z jakiegoś powodu niespodziewanie lub
nagle się zakończył, a plik apigee-zookeeper.pid nie został usunięty.
Diagnostyka
- Aby uzyskać identyfikator procesu aktualnie działającego procesu ZooKeeper, uruchom polecenie
ps:ps -ef | grep zookeeper
- Sprawdź, czy istnieje plik
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid. 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 pliku
apigee-zookeeper.pid file.
Rozwiązanie
- Otwórz do edycji plik apigee-zookeeper.pid i zastąp nieprawidłowy identyfikator procesu prawidłowym identyfikatorem uzyskanym za pomocą polecenia ps (krok 1 powyżej).
- Uruchom ponownie ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Nie udało się wybrać lidera ZooKeeper
Diagnostyka
Aby przeprowadzić diagnostykę:
- Sprawdź, czy w dzienniku ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.lognie ma błędów. - Sprawdź, czy nie wprowadzono żadnych zmian w konfiguracji, które mogą spowodować niepowodzenie wyboru lidera ZooKeeper.
- Sprawdź plik
/opt/apigee/apigee-zookeeper/conf/zoo.cfgi upewnij się, że wszystkie ZooKeeper w klastrze mają prawidłową liczbę i adresy IP dla parametru serwer.#. Pamiętaj też, że aby wybór lidera się powiódł, musi być co najmniej 3 głosujących a ich liczba powinna być nieparzysta. Jeśli jest zbyt mało głosujących, np. tylko 2 głosujących, nie można osiągnąć kworum, aby wybrać lidera spośród tylko 2 głosujących.
Rozwiązanie
Zwykle przyczyną niepowodzenia wyboru lidera ZooKeeper jest nieprawidłowo skonfigurowany identyfikator myid. Aby rozwiązać problem z wyborem, skorzystaj z rozwiązania opisanego w sekcji Nieprawidłowo skonfigurowany identyfikator ZooKeeper.
Jeśli problem będzie się powtarzał i konieczna będzie dalsza diagnostyka, skontaktuj się z zespołem pomocy Apigee Edge.