À propos de la maintenance de ZooKeeper

Edge for Private Cloud v4.19.01

Les ensembles ZooKeeper sont conçus pour rester fonctionnels, sans perte de données, malgré la perte d'un ou plusieurs nœuds ZooKeeper. Cette résilience peut être utilisée efficacement pour effectuer la maintenance des nœuds ZooKeeper sans temps d'arrêt du système.

À propos de ZooKeeper et Edge

Dans Edge, les nœuds ZooKeeper contiennent des données de configuration sur l'emplacement et la configuration des différents composants Edge, et notifient les différents composants des modifications de configuration. Toutes les topologies Edge compatibles avec un système de production utilisent au moins trois nœuds ZooKeeper.

Utilisez les propriétés ZK_HOSTS et ZK_CLIENT_HOSTS du fichier de configuration Edge pour spécifier les nœuds ZooKeeper. Exemple :

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

Où :

  • ZK_HOSTS spécifie les adresses IP des nœuds ZooKeeper. Les adresses IP doivent être répertoriées dans le même ordre sur tous les nœuds ZooKeeper.

    Dans un environnement comportant plusieurs centres de données, répertoriez tous les nœuds ZooKeeper de tous les centres de données.

  • ZK_CLIENT_HOSTS spécifie uniquement les adresses IP des nœuds ZooKeeper utilisés par ce centre de données. Les adresses IP doivent être répertoriées dans le même ordre sur tous les nœuds ZooKeeper du centre de données.

    Dans une installation de centre de données unique, il s'agit des mêmes nœuds que spécifié par ZK_HOSTS. Dans un environnement multi-centres de données, le fichier de configuration Edge de chaque centre de données ne doit répertorier que les nœuds ZooKeeper correspondants.

Par défaut, tous les nœuds ZooKeeper sont désignés comme nœuds voter. Cela signifie que les nœuds participent tous à l'élection du leader ZooKeeper. Vous pouvez inclure le modificateur :observer avec ZK_HOSTS pour indiquer que le nœud est un nœud d'observateur et non un électeur. Un nœud d'observateur ne participe pas à l'élection du chef.

Vous spécifiez généralement le modificateur :observer lorsque vous créez plusieurs centres de données périphériques ou lorsqu'un seul centre de données dispose d'un grand nombre de nœuds ZooKeeper. Par exemple, dans une installation Edge à 12 hôtes avec deux centres de données, ZooKeeper sur le nœud 9 du centre de données 2 joue le rôle d'observateur:

Vous utiliserez ensuite les paramètres suivants dans votre fichier de configuration pour le Centre de données 1:

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

Et pour le Centre de données 2:

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

Les sections suivantes contiennent plus de détails sur les nœuds "leader", "électeur" et "observateur", et décrivent les points à prendre en compte concernant l'ajout de nœuds d'électeur et d'observateur.

À propos des dirigeants, des followers, des électeurs et des observateurs

Dans une installation ZooKeeper multinœud, l'un des nœuds est désigné comme étant principal. Tous les autres nœuds ZooKeeper sont tous désignés comme followers. Bien que les lectures puissent avoir lieu à partir de n'importe quel nœud ZooKeeper, toutes les requêtes d'écriture sont transmises à l'instance principale. Par exemple, un nouveau processeur de messages est ajouté à Edge. Cette information est écrite pour le responsable ZooKeeper. Tous les followers répliquent ensuite les données.

Au moment de l'installation d'Edge, vous désignez chaque nœud ZooKeeper en tant qu'électeur ou en tant qu'observateur. Le chef est ensuite élu par tous les nœuds des électeurs ZooKeeper. Pour élire un dirigeant, la seule condition requise est qu'il existe un quorum de nœuds d'électeur ZooKeeper opérationnels. Un quorum signifie que plus de la moitié de tous les nœuds ZooKeeper des électeurs sont fonctionnels dans l'ensemble des centres de données.

Si le nombre de nœuds d'électeurs n'est pas suffisant, aucun chef ne peut être élu. Dans ce scénario, Zookeeper ne peut pas traiter les requêtes. Cela signifie que vous ne pouvez pas envoyer de requête au serveur de gestion Edge, traiter les requêtes de l'API de gestion ou vous connecter à l'interface utilisateur Edge tant que le quorum n'a pas été restauré.

Par exemple, dans une installation de centre de données unique:

  • Vous avez installé trois nœuds ZooKeeper.
  • Tous les nœuds ZooKeeper sont des votants
  • Le quorum est constitué de deux nœuds électeurs fonctionnels
  • Si un seul nœud d'électeur est disponible, l'ensemble ZooKeeper ne peut pas fonctionner.

Dans une installation avec deux centres de données:

  • Vous avez installé trois nœuds ZooKeeper par centre de données, soit six nœuds au total.
  • Le centre de données 1 compte trois nœuds d'électeur.
  • Le centre de données 2 comporte deux nœuds d'électeur et un nœud d'observateur
  • Le quorum est basé sur les cinq votants des deux centres de données. Il correspond donc à trois nœuds électeurs opérationnels.
  • Si seulement deux nœuds d'électeur ou moins sont disponibles, l'ensemble ZooKeeper ne peut pas fonctionner

Éléments à prendre en compte avant d'ajouter des nœuds en tant qu'électeurs ou observateurs

La configuration système requise peut nécessiter l'ajout de nœuds ZooKeeper supplémentaires à votre installation Edge. La documentation Ajouter des nœuds ZooKeeper explique comment ajouter des nœuds ZooKeeper supplémentaires à Edge. Lorsque vous ajoutez des nœuds ZooKeeper, vous devez prendre en compte le type de nœuds à ajouter: votant ou observateur.

Vous devez vous assurer d'avoir suffisamment de nœuds d'électeur afin que, si un ou plusieurs nœuds d'électeur sont en panne, l'ensemble ZooKeeper puisse toujours fonctionner. Cela signifie qu'il existe toujours un quorum de nœuds d'électeur disponible. En ajoutant des nœuds d'électeurs, vous augmentez la taille du quorum, et vous pouvez donc tolérer qu'un plus grand nombre de nœuds d'électeur soient indisponibles.

Toutefois, l'ajout de nœuds votants supplémentaires peut affecter négativement les performances d'écriture, car les opérations d'écriture nécessitent que le quorum s'accorde sur la variante optimale. Le temps nécessaire pour déterminer la variante optimale dépend du nombre de nœuds de vote qui augmente à mesure que vous ajoutez des nœuds. Par conséquent, il ne faut pas que tous les nœuds votent.

Plutôt que d'ajouter des nœuds d'électeur, vous pouvez ajouter des nœuds d'observateur. L'ajout de nœuds d'observateur augmente les performances globales de lecture du système sans augmenter la surcharge due à l'élection d'un responsable, car les nœuds d'observateur ne votent pas et n'affectent pas la taille du quorum. Par conséquent, si un nœud d'observateur tombe en panne, cela n'affecte pas la capacité de l'ensemble à élire un chef. Toutefois, la perte de nœuds d'observateur peut entraîner une dégradation des performances de lecture de l'ensemble ZooKeeper, car il y a moins de nœuds disponibles pour les requêtes de données de service.

Dans un seul centre de données, Apigee recommande de ne pas avoir plus de cinq votants, quel que soit le nombre de nœuds d'observateur. Dans deux centres de données, Apigee recommande de ne pas avoir plus de neuf votants (cinq dans un centre de données et quatre dans l'autre). Vous pouvez ensuite ajouter autant de nœuds d'observateur que nécessaire pour votre configuration système.

Supprimer un nœud Zookeeper

La suppression d'un nœud ZooKeeper peut être utile pour de nombreuses raisons. Par exemple, un nœud a été corrompu ou a été ajouté au mauvais environnement.

Cette section explique comment supprimer un nœud Zookeeper lorsque celui-ci est arrêté et inaccessible.

Pour supprimer un nœud ZooKeeper:

  1. Modifiez votre fichier de configuration silencieuse et supprimez l'adresse IP du nœud Zookeeper à supprimer.
  2. Exécutez à nouveau la commande setup pour que Zookeeper reconfigure les nœuds ZooKeeper restants :
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. Redémarrez tous les nœuds ZooKeeper :
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. Reconfigurez le nœud du serveur de gestion :
    /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. Reconfigurez tous les routeurs :
    /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. Reconfigurez tous les processeurs de messages :
    /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. Reconfigurez tous les nœuds Qpid :
    /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. Reconfigurez tous les nœuds Postgres :
    /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

Remarques concernant la maintenance

Vous pouvez effectuer la maintenance de ZooKeeper sur un ensemble entièrement fonctionnel sans temps d'arrêt si vous l'avez effectuée sur un seul nœud à la fois. En vous assurant qu'un seul nœud ZooKeeper est indisponible à la fois, vous avez la garantie qu'un quorum de nœuds d'électeur est toujours disponible pour élire un leader.

Maintenance dans plusieurs centres de données

Lorsque vous travaillez avec plusieurs centres de données, n'oubliez pas que l'ensemble ZooKeeper ne fait pas de distinction entre les centres de données. Les assemblys ZooKeeper voient tous les nœuds ZooKeeper de tous les centres de données comme un seul ensemble.

L'emplacement des nœuds d'électeur dans un centre de données donné n'est pas pris en compte pour les calculs du quorum par ZooKeeper. Les nœuds individuels peuvent être défaillants d'un centre de données à l'autre, mais tant qu'un quorum est préservé dans l'ensemble de l'ensemble, ZooKeeper reste fonctionnel.

Conséquences en termes de maintenance

À différents moments, vous devrez arrêter un nœud ZooKeeper pour des raisons de maintenance, qu'il s'agisse d'un nœud d'électeur ou d'un nœud d'observateur. Par exemple, vous devrez peut-être mettre à niveau la version d'Edge sur le nœud, la machine hébergeant ZooKeeper peut échouer ou le nœud peut devenir indisponible pour une autre raison telle qu'une erreur réseau.

Si le nœud qui tombe en panne est un nœud d'observateur, vous pouvez vous attendre à une légère dégradation des performances de l'ensemble ZooKeeper jusqu'à ce que le nœud soit restauré. Si le nœud est un nœud électeur, cela peut avoir un impact sur la viabilité de l'ensemble ZooKeeper en raison de la perte d'un nœud qui participe au processus d'élection du responsable. Quelle que soit la raison pour laquelle le nœud électeur décroît, il est important de maintenir un quorum de nœuds disponibles.

Procédure de maintenance

N'effectuez les procédures de maintenance qu'après vous être assuré du bon fonctionnement d'un ensemble ZooKeeper. Cela suppose que les nœuds d'observateur sont fonctionnels et qu'il y a suffisamment de nœuds de vote disponibles pendant la maintenance pour conserver un quorum.

Lorsque ces conditions sont remplies, un ensemble ZooKeeper de taille arbitraire peut tolérer la perte d'un seul nœud à tout moment, sans perte de données ni impact significatif sur les performances. Cela signifie que vous êtes libre d'effectuer la maintenance sur n'importe quel nœud de l'ensemble, à condition qu'il se trouve sur un nœud à la fois.

Lors de la maintenance, procédez comme suit pour déterminer le type de nœud ZooKeeper (responsable, électeur ou observateur):

  1. S'il n'est pas installé sur le nœud ZooKeeper, installez nc :
    sudo yum install nc
  2. Exécutez la commande nc suivante sur le nœud, où 2181 correspond au port ZooKeeper :
    echo stat | nc localhost 2181

    Le résultat doit s'afficher au format suivant :

    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

    Dans la ligne Mode de la sortie des nœuds, vous devriez voir observer, leader ou follower (c'est-à-dire un votant qui n'est pas la variante optimale), en fonction de la configuration du nœud.

  3. Répétez les étapes 1 et 2 sur chaque nœud ZooKeeper.

Résumé

Le meilleur moyen d'effectuer la maintenance d'un ensemble ZooKeeper est de procéder à un nœud à la fois. Pour rappel :

  • Vous devez maintenir un quorum de nœuds de vote pendant la maintenance pour que l'ensemble ZooKeeper reste fonctionnel.
  • La suppression d'un nœud d'observateur n'affecte pas le quorum ni la capacité à élire un responsable.
  • Le quorum est calculé sur l'ensemble des nœuds ZooKeeper de tous les centres de données.
  • Procédez à la maintenance sur le serveur suivant une fois que le serveur précédent est opérationnel.
  • Utilisez la commande nc pour inspecter le nœud ZooKeeper.