Résolution du statut de cluster Rouge : Guide de dépannage Elasticsearch étape par étape

Dépannez et résolvez les problèmes de statut de cluster Elasticsearch « rouge » ou « jaune ». Ce guide complet fournit des diagnostics étape par étape pour les problèmes courants tels que les shards non alloués, l'espace disque insuffisant et les défaillances de nœuds. Apprenez à utiliser les API essentielles comme `_cluster/health` et `_cluster/allocation/explain` pour identifier les causes profondes et mettre en œuvre des solutions efficaces, garantissant que votre cluster Elasticsearch reste sain et disponible.

37 vues

Résolution du statut de cluster rouge : un guide de dépannage Elasticsearch étape par étape

L'état d'un cluster Elasticsearch est crucial pour son efficacité opérationnelle et la disponibilité des données. Lorsque l'état du cluster devient rouge ou jaune, cela signale un problème sous-jacent qui nécessite une attention immédiate. Un statut rouge indique que des index ou des shards ne sont pas assignés, ce qui signifie que les données pourraient être inaccessibles ou que les opérations pourraient échouer. Un statut jaune signifie que les shards primaires sont alloués, mais que certains shards répliques ne le sont pas. Bien que moins critique que le rouge, cela représente toujours un risque pour la durabilité des données. Ce guide propose une approche systématique pour diagnostiquer et résoudre ces problèmes courants de santé des clusters Elasticsearch.

Comprendre la cause première de ces problèmes de statut est la première étape vers la résolution. Les coupables courants comprennent un espace disque insuffisant, des nœuds surchargés, des problèmes de réseau ou des configurations erronées liées à l'allocation des shards. En suivant les étapes de diagnostic décrites ci-dessous, vous pouvez identifier le problème exact et mettre en œuvre des solutions efficaces, restaurant votre cluster à un état vert sain.

Comprendre l'état du cluster Elasticsearch

Elasticsearch fournit une API d'état du cluster (Cluster Health API) qui offre un instantané de l'état du cluster et de l'allocation des shards. Cette API est votre principal outil pour diagnostiquer les problèmes de santé.

GET _cluster/health

Le résultat de cette commande inclura un champ status qui peut être green, yellow ou red. Il fournit également des informations sur le nombre de shards actifs et non assignés.

  • Vert (Green) : Tous les shards primaires et répliques sont alloués et fonctionnent correctement.
  • Jaune (Yellow) : Tous les shards primaires sont alloués, mais certains shards répliques ne le sont pas.
  • Rouge (Red) : Un ou plusieurs shards primaires ne sont pas alloués, ce qui entraîne une indisponibilité des données pour ces shards.

Causes courantes et étapes de dépannage pour les statuts Rouge/Jaune

Lorsque votre cluster n'est pas green, il est temps d'enquêter. Voici les raisons les plus courantes des shards non assignés et comment les aborder :

1. Espace disque insuffisant

Elasticsearch dispose de mécanismes de protection pour éviter la corruption des données due à des disques pleins. Si un nœud manque d'espace disque, il empêchera l'allocation de nouveaux shards ou la récupération des shards existants.

Diagnostic :

  • Vérifiez l'utilisation du disque sur chaque nœud.
  • Utilisez l'API d'explication de l'allocation du cluster (Cluster Allocation Explain API) pour comprendre pourquoi les shards ne sont pas assignés.
GET _cluster/allocation/explain

Cette API fournira un raisonnement détaillé, indiquant souvent les seuils d'eau (watermarks) du disque.

Résolution :

  • Libérez de l'espace disque : Supprimez les anciens index, effectuez une fusion de segments ou supprimez les données inutiles.
  • Ajoutez plus d'espace disque : Augmentez la capacité de stockage de vos nœuds.
  • Configurez les seuils d'eau du disque : Ajustez les paramètres cluster.routing.allocation.disk.watermark.low, high et flood_stage pour contrôler quand Elasticsearch commence à considérer un disque comme plein. Soyez prudent avec ces paramètres, car ils peuvent masquer des problèmes de capacité sous-jacents.

2. Le nœud a quitté le cluster (Éviction de nœud)

Les nœuds peuvent quitter un cluster en raison de problèmes réseau, de plantages ou parce qu'ils ont été intentionnellement supprimés. Si un nœud détenant des shards (en particulier des shards primaires) part, ces shards deviennent non assignés.

Diagnostic :

  • Vérifiez les journaux du cluster pour les nœuds qui sont partis récemment.
  • Surveillez la connectivité réseau entre les nœuds.
  • Assurez-vous que tous les nœuds sont découvrables les uns par les autres (vérifiez les paramètres discovery.seed_hosts et cluster.initial_master_nodes).

Résolution :

  • Redémarrez le nœud : Si le nœud a planté ou est devenu inaccessible, essayez de le redémarrer.
  • Résolvez les problèmes réseau : Réglez tout problème de connectivité réseau entre les nœuds.
  • Réintégrez le nœud : Si le nœud a été supprimé intentionnellement, assurez-vous qu'il est correctement configuré avant de rejoindre à nouveau le cluster.

3. Filtrage de l'allocation des shards et sensibilisation (Awareness)

Des règles d'allocation de shards mal configurées peuvent empêcher les shards d'être assignés aux nœuds disponibles.

Diagnostic :

  • Examinez vos paramètres cluster.routing.allocation.*, en particulier les filtres cluster.routing.allocation.include, exclude et require.
  • Vérifiez cluster.routing.allocation.awareness.attributes si vous utilisez la sensibilisation aux zones ou aux racks.

Résolution :

  • Ajustez les filtres d'allocation : Modifiez les filtres pour autoriser l'allocation des shards aux nœuds appropriés.
  • Corrigez les attributs de sensibilisation : Assurez-vous que les nœuds sont correctement étiquetés avec les attributs de sensibilisation s'ils sont utilisés, et que vos règles d'allocation les respectent.

4. Espace disque insuffisant pour l'allocation (Après la création de l'index)

Même si un disque n'est pas plein, Elasticsearch peut empêcher l'allocation de shards s'il prévoit que le disque dépassera les seuils d'eau après l'allocation. Ceci est lié aux seuils d'eau du disque, mais impacte spécifiquement les nouvelles allocations.

Diagnostic :

  • L'API _cluster/allocation/explain est inestimable ici.
  • Vérifiez l'espace libre disponible par rapport à la taille attendue des shards.

Résolution :

  • Similaire au problème général d'espace disque : libérez de l'espace, ajoutez plus de stockage ou ajustez prudemment les seuils d'eau.

5. Taille du shard et capacité du nœud

Des shards très volumineux ou un grand nombre de shards peuvent solliciter les ressources des nœuds (CPU, mémoire) et affecter l'allocation. De plus, si un nœud a atteint sa limite de shards (cluster.routing.allocation.total_shards_per_node), de nouveaux shards ne lui seront pas assignés.

Diagnostic :

  • Vérifiez la taille des shards (GET _cat/shards?v).
  • Surveillez l'utilisation des ressources des nœuds (CPU, mémoire).
  • Examinez le paramètre cluster.routing.allocation.total_shards_per_node.

Résolution :

  • Réduisez la taille des shards : Envisagez de réindexer les données dans des index ayant moins de shards ou des tailles de shard plus petites. Visez des tailles de shard comprises entre 10 Go et 50 Go comme ligne directrice générale.
  • Augmentez la capacité des nœuds : Ajoutez des nœuds plus puissants ou des nœuds avec plus de mémoire/CPU.
  • Ajustez la limite de shards : Si nécessaire et si vous disposez de ressources suffisantes, augmentez cluster.routing.allocation.total_shards_per_node.

6. Problèmes de nœud maître

Un nœud maître instable peut entraîner des problèmes d'allocation de shards. Si le maître est indisponible ou incapable d'accomplir ses tâches, les shards peuvent devenir non assignés.

Diagnostic :

  • Vérifiez les journaux du cluster pour les erreurs ou avertissements liés au maître.
  • Assurez-vous d'avoir un nombre impair de nœuds éligibles au maître (généralement 3 ou 5) pour éviter les scénarios de division du cerveau (split-brain).
  • Vérifiez que les nœuds éligibles au maître peuvent élire un maître.

Résolution :

  • Stabilisez le maître : Assurez-vous que les nœuds éligibles au maître sont sains, disposent de ressources suffisantes et sont bien connectés.
  • Corrigez initial_master_nodes : Assurez-vous que ce paramètre est correctement configuré lors du premier démarrage du cluster et reste stable.

Dépannage avancé avec _cluster/allocation/explain

L'API _cluster/allocation/explain est votre outil le plus puissant pour comprendre pourquoi un shard spécifique n'est pas assigné.

Exemple :

GET _cluster/allocation/explain
{
  "index": "my-index",
  "shard": 0,
  "primary": true
}

Ceci renverra une sortie JSON détaillée expliquant pourquoi le shard primaire 0 de my-index ne peut pas être alloué. Recherchez des champs tels que deciders qui répertorient les raisons de la non-assignation (par exemple, DISK_THRESHOLD, NODE_LEFT, NO_VALID_SHARD_COPY).

Résolution du statut de cluster jaune

Un statut jaune signifie que les shards primaires sont alloués, mais que les répliques ne le sont pas. Cela impacte principalement la redondance des données et la tolérance aux pannes.

Causes courantes :

  • Nœuds insuffisants : Vous n'avez pas assez de nœuds pour accueillir le nombre requis de répliques pour vos index.
  • Filtrage de l'allocation des shards : Similaire au statut rouge, les filtres peuvent empêcher l'allocation des répliques.
  • Contraintes d'espace disque : Les nœuds peuvent avoir suffisamment d'espace pour les shards primaires, mais pas assez pour les répliques, surtout si les seuils d'eau du disque sont actifs.

Résolution :

  • Ajoutez plus de nœuds : Augmentez le nombre de nœuds dans votre cluster.
  • Ajustez le nombre de répliques : Réduisez le nombre de répliques par index (index.number_of_replicas) si la tolérance aux pannes n'est pas critique pour tous les index.
  • Vérifiez les paramètres d'allocation : Assurez-vous que les shards répliques sont autorisés à être alloués aux nœuds disponibles.

Bonnes pratiques pour maintenir l'état du cluster

  • Surveillez l'utilisation du disque : Surveillez de manière proactive l'espace disque sur tous les nœuds et configurez des alertes.
  • Dimensionnez correctement votre cluster : Assurez-vous d'avoir suffisamment de nœuds et de ressources pour votre volume de données et votre charge de requêtes.
  • Gestion des shards : Maintenez les tailles de shards dans les plages recommandées et évitez le sur-sharding.
  • Examinez régulièrement l'état du cluster : Utilisez GET _cluster/health et GET _cluster/allocation/explain dans le cadre de votre surveillance de routine.
  • Testez les changements : Avant d'apporter des modifications importantes aux paramètres d'allocation ou aux seuils d'eau du disque, testez-les dans un environnement de staging.

Conclusion

Résoudre un statut de cluster Elasticsearch rouge ou jaune nécessite une approche méthodique du diagnostic. En tirant parti de l'API d'état du cluster, de l'API d'explication de l'allocation du cluster et en comprenant les points de défaillance courants tels que l'espace disque, les problèmes réseau et les configurations d'allocation, vous pouvez dépanner efficacement et restaurer votre cluster à une santé optimale. Une surveillance constante et le respect des meilleures pratiques sont essentiels pour empêcher ces problèmes de survenir en premier lieu.