À propos de la maintenance de ZooKeeper

Les ensembles ZooKeeper sont conçus pour rester fonctionnels, sans perte de données, malgré la perte de un ou de plusieurs nœuds ZooKeeper. Cette résilience peut être utilisée efficacement pour effectuer la maintenance sur les 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 de les différents composants Edge, et informent les différents composants des modifications de configuration. Toutes les topologies Edge compatibles pour un système de production utilisent au moins trois nœuds ZooKeeper.

Utilisez les propriétés ZK_HOSTS et ZK_CLIENT_HOSTS dans le 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 listées dans le même ordre sur tous les nœuds ZooKeeper.

    Dans un environnement multidata center, listez tous les nœuds ZooKeeper de tous les centres de données.

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

    Dans une installation à un seul centre de données, il s'agit des mêmes nœuds que ceux spécifiés par ZK_HOSTS. Dans un environnement multidata center, le fichier de configuration Edge de chaque centre de données ne doit lister que les nœuds ZooKeeper de ce centre de données.

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

Vous spécifiez généralement le modificateur :observer lorsque vous créez plusieurs centres de données Edge ou lorsqu'un seul centre de données comporte 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 est l' observateur :

Vous utilisez 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 d'informations sur les nœuds leader, votant et observateur, et décrivent les considérations à prendre en compte lors de l'ajout de nœuds votants et observateurs.

À propos des leaders, des followers, des votants et des observateurs

Dans une installation ZooKeeper à plusieurs nœuds, l'un des nœuds est désigné comme leader. Tous les autres nœuds ZooKeeper sont 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 au leader. Par exemple, un nouveau processeur de messages est ajouté à Edge. Ces informations sont écrites dans le leader ZooKeeper. Tous les followers répliquent ensuite les données.

Lors de l'installation d'Edge, vous désignez chaque nœud ZooKeeper comme votant ou observateur. Le leader est ensuite élu par tous les nœuds ZooKeeper votants. La seule exigence pour l'élection d'un leader est qu'un quorum de nœuds ZooKeeper votants fonctionnels doit être disponible. Un quorum signifie que plus de la moitié de tous les nœuds ZooKeeper votants, dans tous les centres de données, sont fonctionnels.

Si aucun quorum de nœuds votants n'est disponible, aucun leader ne peut être élu. Dans ce cas, 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 d'API ni vous connecter à la nouvelle interface utilisateur Edge tant que le quorum n'est pas rétabli.

Par exemple, dans une installation à un seul centre de données :

  • Vous avez installé trois nœuds ZooKeeper.
  • Tous les nœuds ZooKeeper sont des votants.
  • Le quorum est de deux nœuds votants fonctionnels.
  • Si un seul nœud votant 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, pour un total de six nœuds.
  • Le centre de données 1 comporte trois nœuds votants.
  • Le centre de données 2 comporte deux nœuds votants et un nœud observateur.
  • Le quorum est basé sur les cinq votants des deux centres de données et est donc de trois nœuds votants fonctionnels
  • Si deux nœuds votants ou moins sont disponibles, l'ensemble ZooKeeper ne peut pas fonctionner.

Considérations à prendre en compte lors de l'ajout de nœuds en tant que votants ou observateurs

La configuration système requise peut vous obliger à ajouter des 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 tenir compte du type de nœuds à ajouter : votant ou observateur.

Vous devez vous assurer que vous disposez d'un nombre suffisant de nœuds votants pour que, si un ou plusieurs nœuds votants sont en panne l'ensemble ZooKeeper puisse toujours fonctionner, ce qui signifie qu'un quorum de nœuds votants est toujours disponible. En ajoutant des nœuds votants, vous augmentez la taille du quorum et pouvez donc tolérer plus de nœuds votants en panne.

Toutefois, l'ajout de nœuds votants supplémentaires peut avoir un impact négatif sur les performances en écriture, car les opérations d'écriture nécessitent que le quorum accepte le leader. Le temps nécessaire pour déterminer le leader est basé sur le nombre de nœuds votants, qui augmente à mesure que vous ajoutez des nœuds votants. Par conséquent, vous ne devez pas faire de tous les nœuds des votants.

Au lieu d'ajouter des nœuds votants, vous pouvez ajouter des nœuds observateurs. L'ajout de nœuds observateurs augmente les performances de lecture globales du système sans ajouter de surcharge à l'élection d'un leader, car les nœuds observateurs ne votent pas et n'affectent pas la taille du quorum. Par conséquent, si un nœud observateur tombe en panne, cela n'affecte pas la capacité de l'ensemble à élire un leader. Toutefois, la perte de nœuds observateurs peut entraîner une dégradation des performances de lecture de l’ensemble ZooKeeper, car moins de nœuds sont disponibles pour traiter les requêtes de données.

Dans un seul centre de données, Apigee vous recommande de ne pas avoir plus de cinq votants, quel que soit le nombre de nœuds observateurs. Dans deux centres de données, Apigee vous 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 observateurs que nécessaire pour répondre aux exigences de votre système.

Supprimer un nœud Zookeeper

Vous pouvez avoir de nombreuses raisons de supprimer un nœud Zookeeper. 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 le nœud est en panne et n'est pas accessible.

Pour supprimer un nœud Zookeeper :

  1. Modifiez votre fichier de configuration silencieuse et supprimez l'adresse IP du nœud Zookeeper que vous souhaitez supprimer.
  2. Exécutez à nouveau la commande setup pour Zookeeper afin de reconfigurer 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

Considérations 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 en panne à la fois, vous pouvez vous assurer qu'un quorum de nœuds votants est toujours disponible pour élire un leader.

Maintenance sur plusieurs centres de données

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

L'emplacement des nœuds votants dans un centre de données donné n'est pas un facteur lorsque ZooKeeper effectue des calculs de quorum. Les nœuds individuels peuvent tomber en panne dans les centres de données, mais tant qu'un quorum est conservé dans l'ensemble de l'ensemble, ZooKeeper reste fonctionnel.

Implications de la maintenance

À différents moments, vous devrez mettre un nœud ZooKeeper hors service pour la maintenance, qu'il s'agisse d'un nœud votant ou d'un nœud observateur. Par exemple, vous devrez peut-être mettre à niveau la version d'Edge sur le nœud, la machine hébergeant ZooKeeper peut tomber en panne 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 observateur, vous pouvez vous attendre à une légère dégradation des performances de l'ensemble ZooKeeper jusqu'à ce que le nœud est restauré. Si le nœud est un nœud votant, 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 leader. Quelle que soit la raison de la panne du nœud votant, il est important de maintenir un quorum de nœuds votants disponibles.

Procédure de maintenance

N'effectuez les procédures de maintenance qu'après vous être assuré qu'un ensemble ZooKeeper est fonctionnel. Cela suppose que les nœuds observateurs sont fonctionnels et qu'il y a suffisamment de nœuds votants 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 s'agisse d'un seul nœud à la fois.

Dans le cadre de la maintenance, utilisez la procédure suivante pour déterminer le type de nœud ZooKeeper (leader, votant 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 est le port ZooKeeper :
    echo stat | nc localhost 2181

    Vous devriez voir une sortie 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 (ce qui signifie un votant qui n'est pas le leader) en fonction de la configuration du nœud.

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

Résumé

La meilleure façon d'effectuer la maintenance sur un ensemble ZooKeeper est de l'effectuer sur un seul nœud à la fois. À noter :

  • Vous devez maintenir un quorum de nœuds votants pendant la maintenance pour vous assurer que l'ensemble ZooKeeper reste fonctionnel.
  • La mise hors service d'un nœud observateur n'affecte pas le quorum ni la capacité à élire un leader.
  • Le quorum est calculé sur tous les nœuds ZooKeeper de tous les centres de données.
  • Passez à la maintenance du serveur suivant une fois que le serveur précédent est opérationnel.
  • Utilisez la commande nc pour inspecter le nœud ZooKeeper.