Udostępnij za pośrednictwem


Serwer Apache ZooKeeper nie może utworzyć kworum w usłudze Azure HDInsight

W tym artykule opisano kroki rozwiązywania problemów i możliwe rozwiązania problemów związanych z usługą Zookeepers w klastrach usługi Azure HDInsight.

Objawy

  • Oba menedżerowie zasobów przechodzą do trybu wstrzymania
  • Węzły nazw są w trybie oczekiwania
  • Zadania Spark, Hive i Yarn lub zapytania Hive kończą się niepowodzeniem z powodu błędów połączenia Zookeeper.
  • Demony LLAP nie uruchamiają się na bezpiecznych klastrach Spark lub na bezpiecznym interaktywnym klastrze Hive.

Przykładowy dziennik

Może zostać wyświetlony komunikat o błędzie podobny do dzienników yarn (/var/log/hadoop-yarn/yarn/yarn-yarn*.log w węzłach głównych):

2020-05-05 03:17:18.3916720|Lost contact with Zookeeper. Transitioning to standby in 10000 ms if connection is not reestablished.
Message
2020-05-05 03:17:07.7924490|Received RMFatalEvent of type STATE_STORE_FENCED, caused by org.apache.zookeeper.KeeperException$NoAuthException: KeeperErrorCode = NoAuth
...
2020-05-05 03:17:08.3890350|State store operation failed 
2020-05-05 03:17:08.3890350|Transitioning to standby state
  • Usługi wysokiej dostępności, takie jak Yarn, Name Node i Livy, mogą z wielu powodów spaść.
  • Potwierdź z dzienników, że są związane z połączeniami Zookeeper
  • Upewnij się, że problem występuje wielokrotnie (nie używaj tych rozwiązań w przypadku jednorazowych przypadków)
  • Zadania mogą tymczasowo zakończyć się niepowodzeniem z powodu problemów z połączeniem usługi Zookeeper

Typowe przyczyny niepowodzenia usługi Zookeeper

  • Wysokie użycie procesora CPU na serwerach zookeeper
    • W interfejsie użytkownika systemu Ambari, jeśli na serwerach Zookeeper widać blisko 100% stałego zużycia CPU, sesje Zookeeper otwarte w tym czasie mogą wygasnąć i zakończyć się błędem timeout.
  • Klienci zookeeper zgłaszają częste przekroczenia limitu czasu
    • W dziennikach usługi Resource Manager, NameNode i innych widoczne są częste przekroczenia limitu czasu połączenia klienta.
    • Może to spowodować utratę kworum, częste awarie i inne problemy

Sprawdź stan Zookeepera

  • Znajdź serwery Zookeeper z pliku /etc/hosts lub z interfejsu użytkownika Ambari.
  • Uruchom następujące polecenie
    • echo stat | nc <ZOOKEEPER_HOST_IP> 2181 (lub 2182)
    • Port 2181 to wystąpienie usługi Apache Zookeeper
    • Port 2182 jest używany przez zookeeper HDInsight w celu zapewnienia wysokiej dostępności dla usług, które nie są natywnie przygotowane do wysokiej dostępności.
    • Jeśli polecenie nie wyświetla żadnych danych wyjściowych, oznacza to, że serwery zookeeper nie są uruchomione
    • Jeśli serwery są uruchomione, wynik zawiera statystyki połączeń klienta i inne statystyki.
Zookeeper version: 3.4.6-8--1, built on 12/05/2019 12:55 GMT
Clients:
 /10.2.0.57:50988[1](queued=0,recved=715,sent=715)
 /10.2.0.57:46632[1](queued=0,recved=138340,sent=138347)
 /10.2.0.34:14688[1](queued=0,recved=264653,sent=353420)
 /10.2.0.52:49680[1](queued=0,recved=134812,sent=134814)
 /10.2.0.57:50614[1](queued=0,recved=19812,sent=19812)
 /10.2.0.56:35034[1](queued=0,recved=2586,sent=2586)
 /10.2.0.52:63982[1](queued=0,recved=72215,sent=72217)
 /10.2.0.57:53024[1](queued=0,recved=19805,sent=19805)
 /10.2.0.57:45126[1](queued=0,recved=19621,sent=19621)
 /10.2.0.56:41270[1](queued=0,recved=1348743,sent=1348788)
 /10.2.0.53:59097[1](queued=0,recved=72215,sent=72217)
 /10.2.0.56:41088[1](queued=0,recved=788,sent=802)
 /10.2.0.34:10246[1](queued=0,recved=19575,sent=19575)
 /10.2.0.56:40944[1](queued=0,recved=717,sent=717)
 /10.2.0.57:45466[1](queued=0,recved=19861,sent=19861)
 /10.2.0.57:59634[0](queued=0,recved=1,sent=0)
 /10.2.0.34:14704[1](queued=0,recved=264622,sent=353355)
 /10.2.0.57:42244[1](queued=0,recved=49245,sent=49248)

Latency min/avg/max: 0/3/14865
Received: 238606078
Sent: 239139381
Connections: 18
Outstanding: 0
Zxid: 0x1004f99be
Mode: follower
Node count: 133212

Obciążenie procesora wzrasta co godzinę

  • Zaloguj się do serwera zookeeper i sprawdź /etc/crontab
  • Jeśli w tej chwili są uruchomione jakiekolwiek zadania godzinowe, należy losować czas rozpoczęcia na różnych serwerach Zookeeper.

Przeczyszczanie starych migawek

  • Zookeepers są skonfigurowane do automatycznego usuwania starych snapshotów
  • Domyślnie są zachowywane ostatnie 30 migawek
  • Liczba przechowywanych migawek kontrolowanych przez klucz konfiguracji autopurge.snapRetainCount. Tę właściwość można znaleźć w następujących plikach:
    • /etc/zookeeper/conf/zoo.cfg dla Zookeepera Hadoop
    • /etc/hdinsight-zookeeper/conf/zoo.cfg dla usługi Zookeeper w HDInsight
  • Ustaw autopurge.snapRetainCount wartość 3 i uruchom ponownie serwery zookeeper
    • Konfigurację usługi Hadoop zookeeper można zaktualizować, a usługę można uruchomić ponownie za pomocą narzędzia Ambari
    • Zatrzymywanie i ponowne uruchamianie usługi HDInsight zookeeper ręcznie
      • sudo lsof -i :2182 Udostępnia identyfikator procesu do zabicia
      • sudo python /opt/startup_scripts/startup_hdinsight_zookeeper.py
  • Nie przeczyszczaj migawek ręcznie — ręczne usuwanie migawek może spowodować utratę danych

CancelledKeyException w dzienniku serwera zookeeper nie wymaga czyszczenia migawki

  • Wyjątek ten jest widoczny na serwerach zookeeper w plikach /var/log/zookeeper/zookeeper-zookeeper-* lub /var/log/hdinsight-zookeeper/zookeeper*
  • Ten wyjątek zwykle oznacza, że klient nie jest już aktywny, a serwer nie może wysłać komunikatu
  • Ten wyjątek wskazuje również, że klient Zookeepera przedwcześnie kończy sesje.
  • Poszukaj innych objawów opisanych w tym dokumencie

Następne kroki

Jeśli nie widziałeś swojego problemu lub nie możesz go rozwiązać, odwiedź jeden z następujących kanałów, aby uzyskać dalszą pomoc:

  • Uzyskaj odpowiedzi od ekspertów platformy Azure za pośrednictwem pomocy technicznej społeczności platformy Azure.
  • Nawiąż połączenie z @AzureSupport — oficjalnym kontem platformy Microsoft Azure, aby ulepszyć środowisko klienta. Łączenie społeczności platformy Azure z odpowiednimi zasobami: odpowiedziami, pomocą techniczną i ekspertami.
  • Jeśli potrzebujesz dodatkowej pomocy, możesz przesłać wniosek o pomoc techniczną w witrynie Azure Portal. Wybierz pozycję Pomoc techniczna na pasku menu lub otwórz centrum Pomoc i obsługa techniczna . Aby uzyskać bardziej szczegółowe informacje, zapoznaj się z Jak utworzyć zgłoszenie do pomocy technicznej platformy Azure. Dostęp do pomocy technicznej dotyczącej zarządzania subskrypcjami i rozliczeniami jest oferowany w ramach subskrypcji platformy Microsoft Azure, a pomoc techniczna jest świadczona w ramach jednego z planów pomocy technicznej platformy Azure.