Avec la fonctionnalité native de cluster HA du serveur Zabbix ajoutée dans Zabbix 6.0 LTS, il est désormais possible de configurer et de déployer rapidement un cluster Zabbix Server HA multi-nœuds sans utiliser d'outils externes. Voyons comment nous pouvons déployer un cluster HA de serveur Zabbix en seulement 10 minutes.
Vous retrouverez ici la vidéo de présentation officiel de la fonctionnalité par Kaspars MEDNIS au Zabbix Summit Online 2021.
Approfondissons ce qu'est la haute disponibilité et essayons de définir ce que le terme haute disponibilité implique :
Un système fonctionne en mode haute disponibilité s'il n'a pas de point de défaillance unique
Un point de défaillance unique est une défaillance d'un composant qui arrête l'ensemble du système
La redondance est une exigence dans les systèmes qui utilisent la haute disponibilité. Dans notre cas, nous avons besoin d'un composant redondant vers lequel nous pouvons basculer au cas où le composant actuellement actif rencontre un problème.
Le processus de basculement doit être transparent et automatisé.
Dans le cas des composants de Zabbix, le point de défaillance unique est notre serveur Zabbix. Même si Zabbix en lui-même est très stable, vous pouvez toujours rencontrer des scénarios lorsqu'un plantage se produit en raison de problèmes au niveau du système d'exploitation ou de quelque chose de plus trivial, comme un manque d'espace disque. Si votre serveur Zabbix tombe en panne, toute la collecte de données, la détection des problèmes et les alertes sont arrêtées. C'est pourquoi il est important d'avoir une certaine forme de haute disponibilité et de redondance pour ce composant de Zabbix en particulier.
Avant l'ajout de la prise en charge native des clusters HA dans Zabbix 6.0 LTS, il était possible d'utiliser des solutions HA tierces pour Zabbix. Cela a provoqué divers problèmes - quelle solution tierce dois-je utiliser et comment dois-je la configurer pour les composants Zabbix ? En plus de cela, vous auriez également une nouvelle couche de logiciels qui nécessite une expertise appropriée pour déployer, configurer et gérer. Il existe également des options HA basées sur le cloud, mais la plupart du temps, elles entraînent un coût supplémentaire.
Ne pas avoir l'expertise requise pour les outils de haute disponibilité tiers peut entraîner des temps d'arrêt indésirables ou, au pire, des incohérences dans le backend Zabbix DB. Voici quelques-uns des scénarios potentiels pouvant être provoqués par une solution de haute disponibilité mal configurée :
Le basculement automatique n'est peut-être pas configuré correctement
Un scénario split-brain avec deux nœuds exécutés simultanément, provoquant potentiellement des incohérences dans le backend de la base de données Zabbix
Scénarios STONITH (Tirez sur l'autre nœud dans la tête) mal configurés - provoquant potentiellement la panne des deux nœuds
La solution native de haute disponibilité Zabbix 6.0 LTS est facile à configurer et toutes les étapes requises sont documentées dans la documentation Zabbix. La solution native ne nécessite aucune expertise supplémentaire et continuera d'être officiellement prise en charge, mise à jour et améliorée par Zabbix. La solution native de haute disponibilité ne nécessite aucun nouveau composant logiciel - la solution de haute disponibilité stocke les informations sur l'état du nœud du serveur Zabbix dans le backend de la base de données Zabbix.
Pour activer le cluster haute disponibilité natif pour nos serveurs, nous devons d'abord démarrer le composant serveur Zabbix en mode haute disponibilité . Pour y parvenir, nous devons regarder les deux nouveaux paramètres dans le fichier de configuration /etc/zabbix/zabbix_server.conf :
sudo nano /etc/zabbix/zabbix_server.conf
HANodeName - spécifiez un nom arbitraire pour votre nœud de cluster de serveur Zabbix
ExternalAddress - spécifiez l'adresse du nœud de cluster
Une fois que vous avez apporté les modifications et ajouté ces paramètres, n'oubliez pas de redémarrer les nœuds du cluster de serveurs Zabbix pour appliquer les modifications.
Examinons le paramètre HANodeName . C'est le paramètre de configuration le plus important - il est obligatoire de le spécifier si vous souhaitez exécuter votre serveur Zabbix en mode haute disponibilité.
Ce paramètre est utilisé pour spécifier le nom du mode de cluster particulier
Si le HANodeName n'est pas spécifié, le serveur Zabbix ne démarrera pas en mode cluster
Le nom du nœud doit être unique sur chacun de vos nœuds


Dans notre exemple, nous pouvons observer un cluster à deux nœuds, où zbx-node1 est le nœud actif et zbx-node2 est le nœud de secours. Ces deux nœuds enverront leurs pulsations au backend de la base de données Zabbix toutes les 5 secondes. Si un nœud arrête d'envoyer son battement de cœur, un autre nœud prendra le relais.
Le deuxième paramètre que vous devrez également spécifier est le paramètre ExternalAddress.

Dans notre exemple, nous utilisons l'adresse IP du premier node, mais qui pourrait être une adresses tel que node1.example.com. Le but de ce paramètre est de faire connaître à l'interface Zabbix l'adresse du serveur Zabbix actuellement actif puisque le composant frontal Zabbix communique également en permanence avec le composant serveur Zabbix. Si ce paramètre n'est pas spécifié, l'interface Zabbix peut ne pas être en mesure de se connecter au nœud de serveur Zabbix actif.
Les utilisateurs chevronnés de Zabbix savent peut-être que l'interface Zabbix possède son propre fichier de configuration, qui contient généralement l'adresse du serveur Zabbix et le port du serveur Zabbix pour établir des connexions entre l'interface Zabbix et le serveur Zabbix.
sudo nano /etc/zabbix/web/zabbix.conf.php

Si vous utilisez le cluster haute disponibilité Zabbix, vous devrez commenter ces paramètres car au lieu d'être statiques, ils dépendent désormais du nœud de serveur Zabbix actuellement actif et seront obtenus à partir de la base de données backend Zabbix.

Dans l'exemple ci-dessus, nous pouvons voir que nous avons deux nœuds - zbx-node1, qui est actuellement actif et zbx-node2. Ces nœuds peuvent être accessibles en utilisant les adresses externes – node1.example.com et node2.example.com pour zbx-node1 et zbx-node2 respectivement. Nous pouvons voir que nous avons également déployé plusieurs interfaces. Chacun de ces nœuds frontend se connectera à la base de données backend Zabbix, lira l'adresse du nœud actuellement actif et procédera à la connexion à ce nœud.
Les nœuds de cluster haute disponibilité du serveur Zabbix peuvent avoir l'un des multiples statuts suivants :
Actif – Le nœud actuellement actif. Un seul nœud peut être actif à la fois
Veille – Le nœud fonctionne actuellement en mode veille. Plusieurs nœuds peuvent avoir ce statut
Arrêt - Le nœud a été précédemment détecté, mais il a été arrêté avec élégance
Inaccessible - Le nœud a déjà été détecté mais a été perdu de manière inattendue sans arrêt. Cela peut être dû à de nombreuses raisons différentes, par exemple - le nœud plante ou a des problèmes de réseau
Dans des circonstances normales, vous aurez un nœud actif et un ou plusieurs nœuds de secours. Les nœuds en mode arrêt sont également attendus si, par exemple, vous effectuez des tâches de maintenance sur ces nœuds. En revanche, si un nœud actif devient inaccessible, c'est à ce moment que l'un des nœuds en attente prendra le relais.
Comment pouvons-nous vérifier quel nœud est actuellement actif et quels nœuds fonctionnent en mode veille ? Tout d'abord, nous pouvons le voir dans l'interface Zabbix - nous y reviendrons un peu plus tard. Nous pouvons également vérifier l'état du nœud à partir de la ligne de commande.
Sur chaque nœud, qu'il soit actif ou en veille, vous verrez que les processus zabbix_server et ha manager ont été démarrés avec la commande ci-dessous. Le processus du gestionnaire ha est responsable de la vérification de l'état du nœud de haute disponibilité dans la base de données toutes les 5 secondes et est chargé de prendre le relais en cas de défaillance du nœud actif.
ps ax | grep zabbix_server

D'autre part, le nœud de serveur Zabbix actuellement actif aura de nombreux autres processus - des processus de collecte de données tels que des pollers et des trappers, des synchroniseurs d'historique et de configuration et de nombreux autres processus enfants Zabbix.
Le widget Informations système a reçu quelques modifications dans Zabbix 6.0 LTS. Il est désormais capable d'afficher l'état de votre cluster haute disponibilité de serveur Zabbix et de ses nœuds individuels.

Le widget peut afficher le mode cluster actuel , qui est activé dans notre exemple et fournit une liste de tous les nœuds du cluster . Dans notre exemple, nous pouvons voir que nous avons 3 nœuds - 1 nœud actif, 1 nœud arrêté et 1 nœud en mode veille. De cette façon, nous pouvons non seulement voir l'état de nos nœuds, mais également leurs noms, adresses et heures de dernier accès.
La commutation entre les nœuds se fait manuellement. Une fois que vous avez arrêté le nœud de serveur Zabbix actuellement actif, un autre nœud prendra automatiquement le relais. Bien sûr, vous devez avoir au moins un nœud supplémentaire en état de veille, afin qu'il puisse prendre le relais du nœud actif défaillant.
sudo systemctl stop zabbix-server

Il est possible d'ajuster le délai de basculement à l'aide de la commande d'exécution ha_set_failover_delay. La plage prise en charge du délai de basculement est de 10 secondes à 15 minutes. Dans la plupart des cas, la valeur par défaut de 1 minute fonctionnera très bien, mais il peut y avoir quelques exceptions et cela dépend beaucoup des spécificités de votre environnement.
zabbix_server -R ha_set_failover_delay=5m

Nous pouvons également supprimer un nœud à l'aide de la commande d'exécution ha_remove_node . Cette commande nous oblige à spécifier l'ID du nœud que nous souhaitons supprimer.
zabbix_server -R ha_remove_node=Target

Parlons maintenant de la façon dont nous pouvons connecter les agents et les proxys Zabbix à votre cluster Zabbix. Examinons d'abord la configuration de l'agent Zabbix passif.
Les agents Zabbix passifs nécessitent que tous les nœuds soient écrits dans le fichier de configuration sous le paramètre Server
Les nœuds sont spécifiés dans une liste séparée par des virgules
La configuration se fait dans /etc/zabbix/zabbix_agentd.conf.


Une fois que vous avez spécifié la liste de tous les nœuds, l'agent Zabbix passif acceptera les connexions de tous les nœuds spécifiés.
Qu'en est-il des agents Zabbix actifs ?
Les agents Zabbix actifs nécessitent que tous les nœuds soient écrits dans le fichier de configuration sous le paramètre ServerActive
Les nœuds doivent être séparés par des points-virgules
Remarquez la différence - liste séparée par des virgules pour les agents Zabbix passifs et nœuds séparés par des points-virgules pour les agents Zabbix actifs !

La configuration du proxy est très similaire à la configuration de l'agent. Encore une fois, nous pouvons avoir un proxy fonctionnant en mode passif ou en mode actif.
Pour les proxys passifs Zabbix, nous devons répertorier nos nœuds de cluster sous le paramètre Server dans le fichier de configuration du proxy . Ces nœuds doivent être spécifiés dans une liste séparée par des virgules. De cette façon, les proxys accepteront les connexions de n'importe quel nœud de serveur Zabbix.

En ce qui concerne les proxys Zabbix actifs, nous devons à nouveau répertorier nos nœuds sous le paramètre Server , mais cette fois, les noms de nœuds seront séparés par des points-virgules.

Concluons en parcourant toutes les étapes nécessaires pour configurer un cluster HA de serveur Zabbix.
Démarrez le serveur Zabbix en mode haute disponibilité sur tous les nœuds de votre cluster de serveurs Zabbix - cela peut être fait en fournissant le paramètre HANodeName dans le fichier de configuration du serveur Zabbix
Commentez $ZBX_SERVER et $ZBX_SERVER_PORT dans le fichier de configuration frontal
Répertoriez vos nœuds de cluster dans les paramètres Server et/ou ServerActive du fichier de configuration de l'agent Zabbix pour tous les agents Zabbix
Répertoriez vos nœuds de cluster dans le paramètre Server pour tous vos proxys Zabbix
Pour les autres types de surveillance, tels que SNMP - assurez-vous que vos points de terminaison acceptent les connexions de tous les nœuds du cluster de serveurs Zabbix
Et c'est tout - Profitez-en !