Video: Evaluating installed HBase service 2024
Zookeeper ist ein verteiltes Cluster von Servern, das gemeinsam für koordinierte Anwendungen zuverlässige Koordinations- und Synchronisierungsdienste bereitstellt. Zugegeben, der Name "Zookeeper" mag auf den ersten Blick eine seltsame Wahl sein, aber wenn Sie verstehen, was es für einen HBase-Cluster tut, können Sie die Logik dahinter sehen. Wenn Sie verteilte Anwendungen erstellen und debuggen, "ist es ein Zoo da draußen", sollten Sie Zookeeper in Ihr Team aufnehmen.
HBase-Cluster können sehr groß sein, und die Koordination der Operationen der MasterServers, RegionServers und Clients kann eine schwierige Aufgabe sein, aber genau hier kommt der Zookeeper ins Bild. Wie in HBase werden Zookeeper-Cluster normalerweise auf kostengünstigen x86-Standard-Servern ausgeführt.
Jeder einzelne x86-Server führt einen einzigen Zookeeper-Softwareprozess aus (im Folgenden als Zookeeper-Server bezeichnet), wobei ein Zookeeper-Server von dem Ensemble als Leiter gewählt wird und der Rest der Server Follower sind. Tierpflegerensembles unterliegen dem Grundsatz eines Mehrheitsquorums.
Konfigurationen mit einem Zookeeper-Server werden zu Test- und Entwicklungszwecken unterstützt. Wenn Sie jedoch einen zuverlässigen Cluster benötigen, der Serverausfälle tolerieren kann, müssen Sie mindestens drei Zookeeper-Server bereitstellen, um ein Mehrheitsquorum zu erreichen.
Wie viele Zookeeper-Server benötigen Sie? Fünf ist das Minimum, das für die Produktion empfohlen wird, aber Sie wollen wirklich nicht mit dem absoluten Minimum gehen. Wenn Sie sich entscheiden, Ihr Zookeeper-Ensemble zu planen, folgen Sie dieser einfachen Formel: 2F + 1 = N wobei F die Anzahl der Fehler ist, die Sie in Ihrem Zookeeper-Cluster akzeptieren können und N die Gesamtanzahl der Zookeeper-Server ist, die Sie bereitstellen müssen.
Fünf wird empfohlen, da ein Server aus Wartungsgründen heruntergefahren werden kann, der Zookeeper-Cluster jedoch weiterhin einen Serverfehler tolerieren kann.
Zookeeper bietet Koordination und Synchronisation mit dem, was znodes genannt wird. Diese werden als Verzeichnisstruktur dargestellt und ähneln den Dateipfadnamen, die Sie in einem Unix-Dateisystem sehen würden. Znodes do speichern Daten, aber nicht viel, um zu sprechen - derzeit weniger als 1 MB standardmäßig.
Die Idee hierbei ist, dass Zookeeper Znodes im Speicher speichert und dass diese speicherbasierten Znodes schnellen Clientzugriff für Koordination, Status und andere wichtige Funktionen bieten, die von verteilten Anwendungen wie HBase benötigt werden. Der Zookeeper repliziert die Znodes im gesamten Ensemble. Wenn also Server ausfallen, sind die Znode-Daten weiterhin verfügbar, solange das Quorum der Server noch in Betrieb ist.
Ein anderes primäres Zookeeper-Konzept betrifft die Verarbeitung von Znode-Lesevorgängen (im Gegensatz zu Schreibvorgängen). Jeder Zookeeper-Server kann Lesezugriffe von einem Client verarbeiten, einschließlich des Leaders, aber nur der Leader gibt atomare Znode-Schreibvorgänge aus - Schreibvorgänge, die entweder vollständig erfolgreich sind oder vollständig fehlschlagen.
Wenn eine Znode-Schreibanforderung am Leader-Knoten ankommt, sendet der Leader die Schreibanforderung an die Follower-Knoten und wartet darauf, dass eine Mehrheit der Follower den Znode-Write-Complete bestätigt. Nach der Bestätigung gibt der Leiter den Znode-Schreibvorgang selbst aus und meldet dann den erfolgreichen Abschlussstatus an den Client.
Znodes bieten einige sehr mächtige Garantien. Wenn ein Zookeeper-Client (z. B. ein HBase-Regionsserver) einen Znode schreibt oder liest, ist der Vorgang atomisch . Es ist entweder vollständig erfolgreich oder schlägt fehl - es gibt keine partiellen Lese- oder Schreibvorgänge.
Kein anderer konkurrierender Client kann dazu führen, dass die Lese- oder Schreiboperation fehlschlägt. Darüber hinaus verfügt ein Znode über eine Zugriffssteuerungsliste (Access Control List, ACL), die ihm aus Sicherheitsgründen zugeordnet ist, und unterstützt Versionen, Zeitstempel und Benachrichtigungen an Clients, wenn diese sich ändern.
Zookeeper repliziert Znodes über das gesamte Ensemble. Wenn also Server ausfallen, sind die Znode-Daten weiterhin verfügbar, solange ein Großteil der Server noch in Betrieb ist. Dies bedeutet, dass Schreibvorgänge in einen beliebigen Znode von einem beliebigen Zookeeper-Server über das gesamte Ensemble weitergegeben werden müssen. Der Zookeeper-Leiter verwaltet diese Operation.
Dieser Znode-Schreibansatz kann dazu führen, dass Follower für kurze Zeit hinter den Leader fallen. Der Zookeeper löst dieses potenzielle Problem, indem er einen Synchronisierungsbefehl bereitstellt. Clients, die diesen temporären Mangel an Synchronisierung innerhalb des Zookeeper-Clusters nicht tolerieren können, entscheiden sich möglicherweise, vor dem Lesen von znodes einen Synchronisierungsbefehl auszugeben.