Objaśnienie Apache ZooKeeper

Staram się zrozumieć, jak to działa i co robi. Czy jest jakaś aplikacja, która jest porównywalna do ZooKeeper?

Jeśli wiesz, to jak opisałbyś strażnika Zoologicznego laikowi?

Próbowałem Apache wiki, zookeeper sourceforge...ale nadal nie jestem w stanie się do tego odnieść.

I just read thru http://zookeeper.sourceforge.net/index.sf.shtml , więc nie ma więcej takich usług? Czy jest to tak proste, jak tylko replikacja obsługa serwera?

Author: codeforester, 2010-09-07

6 answers

W skrócie, ZooKeeper pomaga budować rozproszone aplikacje.

Jak to działa

Możesz opisać ZooKeeper jako replikowaną usługę synchronizacji z ewentualną konsekwencją. Jest solidny, ponieważ utrzymywane dane są dystrybuowane między wieloma węzłami (ten zestaw węzłów nazywa się "ensemble"), a jeden klient łączy się z każdym z nich (tj. konkretnym "serwerem"), migrując, jeśli jeden węzeł zawiedzie; tak długo, jak ścisła większość węzłów działa, ensemble ZooKeeper nodes żyje. W szczególności węzeł główny jest dynamicznie wybierany przez konsensus wewnątrz zespołu; jeśli węzeł główny zawiedzie, rola węzła głównego migruje do innego węzła.

Jak są obsługiwane zapisy

Master jest autorytetem dla zapisów: w ten sposób zapisy mogą być zagwarantowane, aby były utrzymywane w kolejności, tzn. zapisy są liniowe. Za każdym razem, gdy klient pisze do zespołu, większość węzłów przechowuje informacje: węzły te obejmują serwer dla klienta, a oczywiście mistrz. Oznacza to, że każdy zapis sprawia, że serwer jest na bieżąco z master. Oznacza to jednak również, że nie można mieć jednoczesnych zapisów.

Gwarancja zapisów liniowych jest powodem tego, że ZooKeeper nie działa dobrze dla obciążeń dominujących w zapisie. W szczególności nie należy go wykorzystywać do wymiany dużych danych, takich jak nośniki. Tak długo, jak twoja komunikacja obejmuje współdzielone dane, ZooKeeper ci pomaga. Kiedy dane mogą być zapisywane jednocześnie, ZooKeeper faktycznie staje na drodze, ponieważ nakłada ścisłe uporządkowanie operacji, nawet jeśli nie jest to ściśle konieczne z punktu widzenia pisarzy. Jego idealnym zastosowaniem jest koordynacja, gdzie wiadomości są wymieniane między klientami.

Jak odczyty są obsługiwane

To miejsce, w którym wyróżnia się ZooKeeper: odczyty są równoczesne, ponieważ są obsługiwane przez konkretny serwer, z którym łączy się klient. Jest to jednak również powód ewentualnej spójności: "Widok" klienta może być nieaktualne, ponieważ master aktualizuje odpowiedni serwer z ograniczonym, ale nieokreślonym opóźnieniem.

W szczegółach

Replikowana baza danych ZooKeeper składa się z drzewa znodes , które są encjami z grubsza reprezentującymi węzły systemu plików (traktuj je jak katalogi). Każdy znode może być wzbogacony o tablicę bajtów, która przechowuje dane. Ponadto, każdy znode może mieć pod sobą inne znode, praktycznie tworząc wewnętrzny system katalogów.

Sekwencyjny znodes

Co ciekawe, nazwa znode może być Sekwencyjna , co oznacza, że nazwa podana przez Klienta podczas tworzenia znode jest tylko prefiksem: pełna nazwa jest również podana przez numer sekwencyjny wybrany przez zespół. Jest to przydatne na przykład do celów synchronizacji: jeśli wielu klientów chce uzyskać blokadę zasobu, każdy może jednocześnie utworzyć sekwencyjny znode w lokalizacji: ktokolwiek otrzyma najniższy numer, ma prawo do zamek.

Efemeryczne znody

Również znode może być efemeryczny : oznacza to, że jest niszczony, gdy tylko klient, który go utworzył, rozłączy się. Jest to głównie przydatne, aby wiedzieć, kiedy klient zawiedzie, co może być istotne, gdy sam klient ma obowiązki, które powinny być podjęte przez nowego klienta. Na przykładzie blokady, gdy tylko klient ma blokadę rozłącza się, inni klienci mogą sprawdzić, czy są uprawnieni do zamek.

Zegarki

Przykład związany z odłączeniem klienta może być problematyczny, jeśli będziemy musieli okresowo sprawdzać stan znodes. Na szczęście ZooKeeper oferuje System zdarzeń, w którym zegarek może być ustawiony na znode. Zegarki te mogą być ustawione na wyzwalanie zdarzenia, jeśli kod znode jest specjalnie zmieniony lub usunięty lub nowe dzieci są tworzone pod nim. Jest to wyraźnie przydatne w połączeniu z sekwencyjnymi i efemerycznymi opcjami dla znodes.

Gdzie i jak to use it

Kanonicznym przykładem użycia Zookeeper jest obliczenia z rozproszoną pamięcią, gdzie niektóre dane są współdzielone między węzłami klienta i muszą być dostępne/aktualizowane w bardzo ostrożny sposób, aby uwzględnić synchronizację.

ZooKeeper oferuje bibliotekę do konstruowania prymitywów synchronizacji, podczas gdy możliwość uruchomienia rozproszonego serwera pozwala uniknąć problemu z pojedynczym punktem awarii podczas korzystania z scentralizowanego (podobnego do brokera) repozytorium wiadomości.

ZooKeeper jest cecha-światło, czyli takie mechanizmy jak wybory lidera, blokady, bariery itp. nie są już obecne, ale mogą być napisane powyżej naczelnych Zookeeper. Jeśli API C / Java jest zbyt nieporęczne do Twoich celów, powinieneś polegać na bibliotekach zbudowanych na Zookeeperze, takich jak cages, a zwłaszcza curator .

Gdzie przeczytać więcej

Oficjalna dokumentacja, która jest całkiem dobra, proponuję przeczytać rozdział 14 Hadoop: the Definitive Guide który ma ~35 stron wyjaśniających zasadniczo to, co robi ZooKeeper, a następnie przykład usługi konfiguracji.

 438
Author: Luca Geretti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-27 20:33:01

Zookeeper jest jednym z najlepszych serwerów i usług open source, który pomaga niezawodnie koordynować rozproszone procesy. Zookeeper jest systemem CP (Patrz twierdzenie CAP), który zapewnia spójność i tolerancję partycji. Replikacja stanu Zookeeper we wszystkich węzłach sprawia, że jest to ostatecznie spójna usługa rozproszona.

Co więcej, każdy nowo wybrany lider zaktualizuje swoich zwolenników o brakujące propozycje lub z migawką stanu, jeśli zwolennicy mają wiele propozycji zaginęła.

Zookeeper zapewnia również API, które jest bardzo łatwe w użyciu. Ten wpis na blogu, Zookeeper Java API examples , zawiera kilka przykładów, jeśli szukasz przykładów.

Więc gdzie tego używamy? Jeśli twoja rozproszona Usługa wymaga scentralizowanego, niezawodnego i spójnego zarządzania konfiguracją, blokadami, kolejkami itp., Zookeeper to niezawodny wybór.

 10
Author: Binu George,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-27 20:49:13

Ogólnie Rozumiem Zookeepera, ale miałem problemy z terminami "quorum" i "split brain", więc może podzielę się z wami swoimi odkryciami (uważam się też za laika).

Powiedzmy, że mamy Klaster ZooKeeper składający się z 5 serwerów. Jeden z serwerów stanie się liderem, a inni będą obserwatorami.

  • Te 5 serwerów tworzy kworum. Quorum oznacza po prostu "te serwery mogą głosować na to, kto powinien być liderem".

  • Więc głosowanie jest oparte na większości. Większość oznacza po prostu "więcej niż połowę", więc więcej niż połowa liczby serwerów musi zgodzić się na konkretny serwer, aby stać się liderem.

  • Jest więc taka zła rzecz, która może się zdarzyć, zwana "rozszczepionym mózgiem". Podział mózgu jest po prostu taki, o ile rozumiem: klaster 5 serwerów dzieli się na dwie części, lub nazwijmy to "zespołami serwerów", Z może jedną częścią 2, a drugą 3 serwerów. Jest to naprawdę zła sytuacja, jakby oba "zespoły serwerowe" musiały wykonać konkretna kolejność jak zdecydujesz, który zespół powinien być preferowany? Mogli otrzymać różne informacje od klientów. Tak więc naprawdę ważne jest, aby wiedzieć, co "zespół serwerów" jest nadal istotne i które można / powinny być ignorowane.

  • Większość jest również powodem, dla którego powinieneś używać nieparzystej liczby serwerów. Jeśli masz 4 serwery i rozszczepiony mózg, w którym rozdzielają się 2 serwery, obie " drużyny serwerów "mogą powiedzieć:" Hej, chcemy zdecydować, kto jest liderem!"ale jak powinieneś zdecyduj, które 2 serwery powinieneś wybrać? Z 5 serwerami jest to proste: zespół serwerów z 3 serwerami ma Większość i może wybrać nowego lidera.

  • Nawet jeśli masz tylko 3 serwery, a jeden z nich zawiedzie, pozostałe 2 nadal stanowią większość i mogą się zgodzić, że jeden z nich stanie się nowym liderem.

Zdaję sobie sprawę, że kiedy raz się nad tym zastanowisz i zrozumiesz terminy, to już nie jest takie skomplikowane. Mam nadzieję, że pomoże to również każdemu w zrozumienie tych warunków.

 7
Author: Invest,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-11 09:01:48

Zookeeper jest scentralizowanym serwerem open-source do przechowywania i zarządzania informacjami konfiguracyjnymi, konwencjami nazw i synchronizacją dla rozproszonego środowiska klastrowego. Zookeeper pomaga rozproszonym systemom zmniejszyć złożoność zarządzania, zapewniając niskie opóźnienia i wysoką dostępność. Zookeeper był początkowo podprojektem dla Hadoop, ale teraz jest to niezależny projekt najwyższego poziomu Apache Software Foundation.

Więcej Informacji

 1
Author: neel4soft,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-20 11:34:48

Proponuję następujące zasoby:

  1. Gazeta: https://pdos.csail.mit.edu/6.824/papers/zookeeper.pdf
  2. wykład wygłoszony przez MIT 6.824 od 36:00: https://youtu.be/pbmyrNjzdDk?t=2198

Sugerowałbym obejrzenie filmu, przeczytanie gazety, a następnie ponowne obejrzenie filmu. Byłoby łatwiej zrozumieć, jeśli znasz Raft wcześniej.

 1
Author: yyFred,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-03-25 16:49:02

Moje podejście do zrozumienia zookeeper było, bawić się z klientem CLI. jak opisano w Jak zacząć przewodnik i Command line interface

Z tego dowiedziałem się, że powierzchnia zookeepera wygląda bardzo podobnie do systemu plików, a klienci mogą tworzyć i usuwać obiekty oraz odczytywać lub zapisywać dane.

Przykładowe polecenia CLI

create /myfirstnode mydata
ls /
get /myfirstnode
delete /myfirstnode

Try yourself

Jak uruchomić środowisko zookeper w ciągu kilku minut na docker dla windows, linux lub mac:

Raz ustawiony:

docker network create dn

Uruchom serwer w oknie terminala:

docker run --network dn --name zook -d zookeeper
docker logs -f zookeeper

Uruchom klienta w drugim oknie terminala:

docker run -it --rm --network dn zookeeper zkCli.sh -server zook

Zobacz również dokumentacja obrazu na dockerhub

 1
Author: Michael S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-12-27 21:00:47