Wartung von ZooKeeper

ZooKeeper-Ensembles sind so konzipiert, dass sie trotz des Verlusts eines oder mehrerer ZooKeeper-Knoten ohne Datenverlust funktionsfähig bleiben. Diese Ausfallsicherheit kann effektiv genutzt werden, um Wartungsarbeiten an ZooKeeper-Knoten ohne Systemausfallzeiten durchzuführen.

Informationen zu ZooKeeper und Edge

In Edge enthalten ZooKeeper-Knoten Konfigurationsdaten zum Standort und zur Konfiguration der verschiedenen Edge-Komponenten und benachrichtigen die verschiedenen Komponenten über Konfigurationsänderungen. Alle unterstützten Edge-Topologien für ein Produktionssystem verwenden mindestens drei ZooKeeper-Knoten.

Verwenden Sie die Attribute ZK_HOSTS und ZK_CLIENT_HOSTS in der Edge-Konfigurationsdatei, um die ZooKeeper-Knoten anzugeben. Beispiel:

ZK_HOSTS="$IP1 $IP2 $IP3"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Wobei:

  • ZK_HOSTS gibt die IP-Adressen der ZooKeeper-Knoten an. Die IP-Adressen müssen auf allen ZooKeeper-Knoten in derselben Reihenfolge aufgeführt sein.

    Listen Sie in einer Umgebung mit mehreren Rechenzentren alle ZooKeeper-Knoten aus allen Rechenzentren auf.

  • ZK_CLIENT_HOSTS gibt die IP-Adressen der ZooKeeper-Knoten an, die nur von diesem Rechenzentrum verwendet werden. Die IP-Adressen müssen auf allen ZooKeeper-Knoten im Rechenzentrum in derselben Reihenfolge aufgeführt sein.

    In einer Installation mit einem einzelnen Rechenzentrum sind dies dieselben Knoten, die von ZK_HOSTS angegeben werden. In einer Umgebung mit mehreren Rechenzentren sollten in der Edge-Konfigurationsdatei für jedes Rechenzentrum nur die ZooKeeper-Knoten für dieses Rechenzentrum aufgeführt sein.

Standardmäßig sind alle ZooKeeper-Knoten als voter-Knoten festgelegt. Das bedeutet, dass alle Knoten an der Wahl des ZooKeeper-Leaders teilnehmen. Sie können den Modifikator :observer mit ZK_HOSTS einfügen, um anzugeben, dass der Knoten ein Beobachterknoten und kein Abstimmungsknoten ist. Ein Beobachterknoten nimmt nicht an der Wahl des Leaders teil.

In der Regel geben Sie den Modifikator :observer an, wenn Sie mehrere Edge-Rechenzentren erstellen oder wenn ein einzelnes Rechenzentrum eine große Anzahl von ZooKeeper-Knoten hat. In einer Edge-Installation mit 12 Hosts und zwei Rechenzentren ist ZooKeeper auf Knoten 9 in Rechenzentrum 2 beispielsweise der Beobachter:

Verwenden Sie dann die folgenden Einstellungen in Ihrer Konfigurationsdatei für Rechenzentrum 1:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

Und für Rechenzentrum 2:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

In den folgenden Abschnitten finden Sie weitere Informationen zu Leader-, Voter- und Observer-Knoten sowie Überlegungen zum Hinzufügen von Voter- und Observer-Knoten.

Informationen zu Leitern, Followern, Wählern und Beobachtern

In einer ZooKeeper-Installation mit mehreren Knoten wird einer der Knoten als Leader festgelegt. Alle anderen ZooKeeper-Knoten werden als Follower bezeichnet. Lesevorgänge können von jedem ZooKeeper-Knoten ausgeführt werden, alle Schreibanfragen werden jedoch an den Leader weitergeleitet. Beispiel: Edge wird ein neuer Message Processor hinzugefügt. Diese Informationen werden in den ZooKeeper-Leader geschrieben. Alle Follower replizieren dann die Daten.

Bei der Edge-Installation legen Sie jeden ZooKeeper-Knoten als Voter oder Beobachter fest. Der Leader wird dann von allen ZooKeeper-Knoten gewählt, die abstimmen dürfen. Die einzige Voraussetzung für die Wahl eines Leaders ist, dass ein Quorum von funktionierenden ZooKeeper-Wählerknoten verfügbar sein muss. Ein Quorum bedeutet, dass mehr als die Hälfte aller ZooKeeper-Abstimmungsknoten in allen Rechenzentren funktionsfähig sind.

Wenn kein Quorum von Abstimmungsknoten verfügbar ist, kann kein Leader ausgewählt werden. In diesem Szenario kann ZooKeeper keine Anfragen verarbeiten. Das bedeutet, dass Sie erst dann eine Anfrage an den Edge-Verwaltungsserver senden, API-Anfragen verarbeiten oder sich in der Edge-Benutzeroberfläche anmelden können, wenn das Quorum wiederhergestellt ist.

Beispiel für eine Installation in einem einzelnen Rechenzentrum:

  • Sie haben drei ZooKeeper-Knoten installiert.
  • Alle ZooKeeper-Knoten sind Voter
  • Das Quorum besteht aus zwei funktionierenden Abstimmungsknoten
  • Wenn nur ein Abstimmungsknoten verfügbar ist, kann das ZooKeeper-Ensemble nicht funktionieren.

In einer Installation mit zwei Rechenzentren:

  • Sie haben drei ZooKeeper-Knoten pro Rechenzentrum installiert, also insgesamt sechs Knoten.
  • Rechenzentrum 1 hat drei Abstimmungsknoten.
  • Rechenzentrum 2 hat zwei Abstimmungsknoten und einen Beobachterknoten.
  • Das Quorum basiert auf den fünf Abstimmungsknoten in beiden Rechenzentren und beträgt daher drei funktionierende Abstimmungsknoten.
  • Wenn nur zwei oder weniger Abstimmungsknoten verfügbar sind, kann das ZooKeeper-Ensemble nicht funktionieren.

Überlegungen zum Hinzufügen von Knoten als Wähler oder Beobachter

Ihre Systemanforderungen erfordern möglicherweise, dass Sie Ihrer Edge-Installation zusätzliche ZooKeeper-Knoten hinzufügen. In der Dokumentation ZooKeeper-Knoten hinzufügen wird beschrieben, wie Sie Edge zusätzliche ZooKeeper-Knoten hinzufügen. Wenn Sie ZooKeeper-Knoten hinzufügen, müssen Sie den Typ der hinzuzufügenden Knoten berücksichtigen: Voter oder Observer.

Sie sollten darauf achten, dass genügend Abstimmungsknoten vorhanden sind, damit das ZooKeeper-Ensemble auch dann noch funktioniert, wenn ein oder mehrere Abstimmungsknoten ausfallen. Das bedeutet, dass immer noch ein Quorum von Abstimmungsknoten verfügbar ist. Durch das Hinzufügen von Abstimmungsknoten erhöhen Sie die Größe des Quorums und können daher mehr ausgefallene Abstimmungsknoten tolerieren.

Das Hinzufügen zusätzlicher Abstimmungsknoten kann sich jedoch negativ auf die Schreibleistung auswirken, da für Schreibvorgänge das Quorum erforderlich ist, um sich auf den Leader zu einigen. Die Zeit, die für die Bestimmung des Leaders benötigt wird, hängt von der Anzahl der Abstimmungsknoten ab. Je mehr Abstimmungsknoten Sie hinzufügen, desto länger dauert es. Daher sollten Sie nicht alle Knoten zu Abstimmenden machen.

Anstatt Abstimmungsknoten hinzuzufügen, können Sie Beobachterknoten hinzufügen. Durch das Hinzufügen von Beobachterknoten wird die Gesamtleseleistung des Systems erhöht, ohne dass der Aufwand für die Auswahl eines Leaders steigt, da Beobachterknoten nicht abstimmen und die Quorumgröße nicht beeinflussen. Wenn ein Beobachterknoten ausfällt, hat dies keine Auswirkungen auf die Fähigkeit des Ensembles, einen Leader auszuwählen. Der Verlust von Beobachterknoten kann jedoch zu einer Verschlechterung der Leseleistung des ZooKeeper-Ensembles führen, da weniger Knoten für die Verarbeitung von Datenanfragen verfügbar sind.

Apigee empfiehlt, in einem einzelnen Rechenzentrum unabhängig von der Anzahl der Beobachterknoten nicht mehr als fünf Wähler zu haben. In zwei Rechenzentren empfiehlt Apigee, nicht mehr als neun Voter zu haben (fünf in einem Rechenzentrum und vier im anderen). Anschließend können Sie so viele Beobachterknoten hinzufügen, wie für Ihre Systemanforderungen erforderlich sind.

ZooKeeper-Knoten entfernen

Es gibt viele Gründe, warum Sie einen ZooKeeper-Knoten entfernen möchten. Beispielsweise wurde ein Knoten beschädigt oder der falschen Umgebung hinzugefügt.

In diesem Abschnitt wird beschrieben, wie Sie einen ZooKeeper-Knoten entfernen, wenn der Knoten ausgefallen und nicht erreichbar ist.

So entfernen Sie einen ZooKeeper-Knoten:

  1. Bearbeiten Sie die Konfigurationsdatei für die unbeaufsichtigte Installation und entfernen Sie die IP-Adresse des ZooKeeper-Knotens, den Sie entfernen möchten.
  2. Führen Sie den Befehl setup für Zookeeper noch einmal aus, um die verbleibenden ZooKeeper-Knoten neu zu konfigurieren:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. Starten Sie alle ZooKeeper-Knoten neu:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. Konfigurieren Sie den Management Server-Knoten neu:
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. Konfigurieren Sie alle Router neu:
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. Konfigurieren Sie alle Message Processors neu:
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. Konfigurieren Sie alle Qpid-Knoten neu:
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. Konfigurieren Sie alle Postgres-Knoten neu:
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

Überlegungen zur Wartung

Sie können ZooKeeper-Wartungsarbeiten an einem voll funktionsfähigen Ensemble ohne Ausfallzeiten durchführen, wenn Sie sie jeweils auf einem einzelnen Knoten ausführen. Wenn Sie dafür sorgen, dass immer nur ein ZooKeeper-Knoten ausgefallen ist, können Sie sicherstellen, dass immer ein Quorum von Abstimmungsknoten verfügbar ist, um einen Leader auszuwählen.

Wartung in mehreren Rechenzentren

Wenn Sie mit mehreren Rechenzentren arbeiten, beachten Sie, dass das ZooKeeper-Ensemble nicht zwischen Rechenzentren unterscheidet. ZooKeeper-Assemblys betrachten alle ZooKeeper-Knoten in allen Rechenzentren als ein Ensemble.

Der Standort der Abstimmungsknoten in einem bestimmten Rechenzentrum ist kein Faktor, wenn ZooKeeper Quorumberechnungen durchführt. Einzelne Knoten können in Rechenzentren ausfallen. Solange jedoch ein Quorum im gesamten Ensemble erhalten bleibt, bleibt ZooKeeper funktionsfähig.

Auswirkungen auf die Wartung

Gelegentlich müssen Sie einen ZooKeeper-Knoten für Wartungsarbeiten herunterfahren, entweder einen Voter-Knoten oder einen Observer-Knoten. Beispielsweise müssen Sie möglicherweise die Version von Edge auf dem Knoten aktualisieren, der Computer, auf dem ZooKeeper gehostet wird, fällt aus oder der Knoten ist aus einem anderen Grund, z. B. einem Netzwerkfehler, nicht verfügbar.

Wenn der ausgefallene Knoten ein Beobachterknoten ist, kann es zu einer leichten Beeinträchtigung der Leistung des ZooKeeper-Ensembles kommen, bis der Knoten wiederhergestellt ist. Wenn der Knoten ein Voter-Knoten ist, kann dies die Lebensfähigkeit des ZooKeeper-Ensembles beeinträchtigen, da ein Knoten verloren geht, der am Leader-Auswahlprozess teilnimmt. Unabhängig vom Grund für den Ausfall des Abstimmungsknotens ist es wichtig, ein Quorum verfügbarer Abstimmungsknoten aufrechtzuerhalten.

Wartungsverfahren

Führen Sie Wartungsverfahren erst durch, wenn Sie sichergestellt haben, dass ein ZooKeeper-Ensemble funktionsfähig ist. Dabei wird davon ausgegangen, dass die Beobachterknoten funktionsfähig sind und während der Wartung genügend Abstimmungsknoten verfügbar sind, um ein Quorum aufrechtzuerhalten.

Wenn diese Bedingungen erfüllt sind, kann ein ZooKeeper-Ensemble beliebiger Größe den Verlust eines einzelnen Knotens jederzeit ohne Datenverlust oder nennenswerte Auswirkungen auf die Leistung tolerieren. Das bedeutet, dass Sie Wartungsarbeiten an jedem Knoten im Ensemble durchführen können, solange dies jeweils nur an einem Knoten geschieht.

Im Rahmen der Wartung können Sie mit dem folgenden Verfahren den Typ eines ZooKeeper-Knotens (Leader, Voter oder Observer) ermitteln:

  1. Wenn es nicht auf dem ZooKeeper-Knoten installiert ist, installieren Sie nc:
    sudo yum install nc
  2. Führen Sie den folgenden nc-Befehl auf dem Knoten aus, wobei 2181 der ZooKeeper-Port ist:
    echo stat | nc localhost 2181

    Die Ausgabe sollte etwa so aussehen:

    Zookeeper version: 3.4.5-1392090,
    built on 09/30/2012 17:52 GMT
    Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0xc00000044
    Mode: follower
    Node count: 653

    In der Zeile Mode der Ausgabe für die Knoten sollte je nach Knotenkonfiguration observer, leader oder follower (ein Voter, der nicht der Leader ist) angezeigt werden.

  3. Wiederholen Sie die Schritte 1 und 2 auf jedem ZooKeeper-Knoten.

Zusammenfassung

Die beste Methode, um ein ZooKeeper-Ensemble zu warten, ist, einen Knoten nach dem anderen zu warten. Denk daran:

  • Sie müssen während der Wartung ein Quorum von Abstimmungsknoten aufrechterhalten, damit das ZooKeeper-Ensemble funktionsfähig bleibt.
  • Das Herunterfahren eines Beobachterknotens hat keine Auswirkungen auf das Quorum oder die Möglichkeit, einen Leader zu wählen.
  • Das Quorum wird für alle ZooKeeper-Knoten in allen Rechenzentren berechnet.
  • Fahren Sie mit der Wartung des nächsten Servers fort, nachdem der vorherige Server betriebsbereit ist.
  • Prüfen Sie den ZooKeeper-Knoten mit dem Befehl nc.