Dépannage de la Santé du Cluster Elasticsearch : Un Guide Étape par Étape
Elasticsearch est un système distribué robuste, mais comme toute architecture distribuée, il nécessite une surveillance active et une intervention occasionnelle pour maintenir une santé optimale. L'état de santé du cluster est la métrique la plus critique pour déterminer la disponibilité opérationnelle et la sécurité des données de votre déploiement. Lorsque le cluster passe de Vert à Jaune ou, de manière critique, à Rouge, l'intégrité ou la disponibilité des données est menacée.
Ce guide complet fournit des étapes d'expert pour diagnostiquer et résoudre les problèmes courants de santé du cluster Elasticsearch, en se concentrant spécifiquement sur la récupération des états Jaune et Rouge. Nous utiliserons les API Cat pratiques et des vérifications étape par étape pour identifier rapidement la cause profonde et mettre en œuvre les actions correctives.
1. Comprendre l'État de Santé du Cluster Elasticsearch
Avant de dépanner, il est essentiel de comprendre ce que signifie chaque couleur d'état du cluster. L'état de santé est déterminé par l'état d'allocation de vos shards primaires et répliques sur les nœuds du cluster.
| Statut | Signification | Implications |
|---|---|---|
| Vert | Tous les shards primaires et répliques sont alloués avec succès. | Le cluster est entièrement opérationnel et résilient. |
| Jaune | Tous les shards primaires sont alloués, mais un ou plusieurs shards répliques ne sont pas assignés. | Les données sont disponibles, mais le cluster manque de résilience complète en cas de défaillance de nœud. |
| Rouge | Au moins un shard primaire n'est pas assigné (et donc indisponible). | Perte de données ou inaccessibilité pour l'index contenant le(s) shard(s) défaillant(s). Action critique requise. |
2. Diagnostic Initial : Vérification de la Santé du Cluster
La première étape de tout processus de dépannage consiste à confirmer l'état actuel et à recueillir les métriques de base à l'aide de l'API Cluster Health et de l'API Nodes.
Étape 2.1 : Vérifier la Santé du Cluster
Utilisez l'API _cat/health pour obtenir un résumé de haut niveau. Le paramètre ?v fournit une sortie verbeuse, incluant le nombre de nœuds et le nombre total de shards.
GET /_cat/health?v
Exemple de Sortie (État Jaune) :
epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent
1678233600 09:00:00 my-cluster yellow 3 3 10 5 0 0 5 0 - 50.0%
Si le statut est Jaune ou Rouge, notez la valeur sous unassign.
Étape 2.2 : Vérifier l'État et la Mémoire des Nœuds
Assurez-vous que tous les nœuds attendus sont connectés et fonctionnent correctement. Vérifiez également l'utilisation du tas (heap) (critique pour la performance et la stabilité).
GET /_cat/nodes?v&h=name,node.role,version,heap.percent,disk.total,disk.used,disk.avail
Si un nœud est manquant dans cette liste, vous pourriez avoir un problème de connectivité ou un service arrêté.
3. Résolution de l'État Rouge du Cluster (Défaillance du Shard Primaire)
Un état Rouge signifie que les données sont immédiatement inaccessibles. L'objectif est de remettre le shard primaire en ligne le plus rapidement possible.
Étape 3.1 : Identifier les Shards Primaires Non Assignés
Utilisez l'API _cat/shards pour identifier l'index et le shard exacts qui causent le problème. Recherchez spécifiquement les entrées marquées comme UNASSIGNED avec un rôle p (primaire).
GET /_cat/shards?v | grep UNASSIGNED
Exemple de Sortie :
index_logs 0 p UNASSIGNED
Étape 3.2 : Vérifier l'Explication de l'Allocation
C'est l'étape de diagnostic la plus importante. L'API Allocation Explain vous indique pourquoi un shard spécifique (ou tout shard non assigné) ne peut pas être alloué.
GET /_cluster/allocation/explain
Raisons Courantes de l'État Rouge :
- Défaillance du Nœud : Le nœud qui hébergeait le shard primaire a planté ou a été retiré du cluster. Si le nœud défaillant avait suffisamment de répliques sur d'autres nœuds, le shard primaire devrait automatiquement promouvoir une réplique. Si toutes les copies (primaire et répliques) se trouvaient sur le nœud défaillant, le shard est perdu à moins que le nœud ne soit récupéré.
- Données Corrompues : Les fichiers du shard primaire sur le disque sont devenus corrompus, empêchant le nœud de les initialiser.
Étape 3.3 : Plan d'Action pour l'État Rouge
- Scénario A : Nœud Hors Ligne (Préféré)
- Si le nœud qui détenait le shard primaire est simplement hors ligne, restaurez le service du nœud (par exemple, redémarrez Elasticsearch ou corrigez les problèmes réseau). Une fois que le nœud rejoint le cluster, le shard primaire devrait récupérer.
- Scénario B : Shard Primaire Perdu (Dernier Recours)
- Si le nœud est perdu définitivement et qu'aucune réplique n'existait, les données sont perdues. Vous devez ignorer manuellement la récupération à l'aide de la commande
allocate_empty_primary. Attention : Ceci créera un tout nouveau shard primaire, vide, entraînant une perte de données permanente pour ce segment de l'index.
- Si le nœud est perdu définitivement et qu'aucune réplique n'existait, les données sont perdues. Vous devez ignorer manuellement la récupération à l'aide de la commande
POST /_cluster/reroute
{
"commands" : [
{
"allocate_empty_primary" : {
"index" : "[index-name]",
"shard" : [shard-id],
"node" : "[target-node-name]",
"accept_data_loss" : true
}
}
]
}
Meilleure Pratique : Avant de recourir à
allocate_empty_primary, vérifiez toujours qu'une snapshot ou une sauvegarde n'existe pas pour l'index.
4. Résolution de l'État Jaune du Cluster (Défaillance du Shard Réplique)
Un état Jaune signifie que le cluster est opérationnel mais vulnérable. L'objectif principal est d'allouer les répliques manquantes.
Étape 4.1 : Utiliser Allocation Explain
Si l'état est Jaune, utilisez l'API _cluster/allocation/explain (Section 3.2) pour comprendre pourquoi la réplique ne peut pas être assignée. L'explication pour les répliques est généralement plus simple.
Raisons Courantes de l'État Jaune :
| Code de Raison | Explication | Correction |
|---|---|---|
NO_AVAILABLE_NODES |
La taille du cluster est trop petite (par exemple, le nombre de répliques est 2, mais il n'y a que 2 nœuds existants). | Ajoutez plus de nœuds de données ou réduisez number_of_replicas. |
NOT_ENOUGH_DISK_SPACE |
Les nœuds ont atteint le seuil du watermark bas ou élevé. | Supprimez les anciens index, libérez de l'espace disque ou ajustez les watermarks de disque. |
ALLOCATION_DISABLED |
L'allocation des shards a été explicitement désactivée par les paramètres du cluster. | Réactivez le routage via PUT /_cluster/settings. |
PRIMARY_NOT_ACTIVE |
Le shard primaire est toujours en cours d'initialisation ou de récupération. | Attendez que le primaire devienne actif (Vert). |
Étape 4.2 : Vérifier les Exigences et Contraintes des Nœuds
Assurez-vous que le cluster répond aux exigences de base pour l'allocation des répliques :
- Nombre de Nœuds : Pour
Nrépliques, vous avez besoin d'au moinsN+1nœuds de données pour garantir que le primaire et les répliques ne se trouvent jamais sur le même nœud. - Watermarks de Disque : Elasticsearch cesse d'allouer des shards aux nœuds lorsque l'utilisation du disque dépasse le watermark élevé (90% par défaut).
# Vérifier les paramètres d'allocation de disque
GET /_cluster/settings?flat_settings=true&filter_path=*watermark*
# Exemple : Définir le watermark élevé à 95% (Temporairement !)
PUT /_cluster/settings
{
"persistent": {
"cluster.routing.allocation.disk.watermark.high": "95%"
}
}
Étape 4.3 : Reroute Manuel (Si la Logique d'Allocation Échoue)
Dans de rares cas, si le processus d'allocation standard semble bloqué malgré des ressources suffisantes, vous pouvez forcer manuellement l'allocation de la réplique à un nœud sain spécifique à l'aide de la commande allocate_replica.
POST /_cluster/reroute
{
"commands" : [
{
"allocate_replica" : {
"index" : "[index-name]",
"shard" : [shard-id],
"node" : "[target-node-name]"
}
}
]
}
5. Dépannage Avancé et Pièges Courants
Si l'état Rouge ou Jaune persiste, la cause profonde peut se situer en dehors de la logique standard d'allocation des shards.
5.1 Connectivité Réseau et Split-Brain
Dans les systèmes distribués, la partitionnement (split-brain) peut provoquer de graves problèmes. Si les nœuds éligibles au rôle de maître ne peuvent pas communiquer, le cluster pourrait ne pas réussir à élire un maître stable, entraînant des shards non assignés.
- Action : Vérifiez la connectivité réseau entre tous les nœuds, en particulier entre les nœuds éligibles au rôle de maître.
- Vérification de Configuration : Assurez-vous que votre liste
discovery.seed_hostsest exacte et que le paramètrecluster.initial_master_nodesa été correctement utilisé lors de l'amorçage du cluster.
5.2 Pression Mémoire JVM Élevée
Une utilisation excessive du tas (souvent supérieure à 75 %) entraîne des pauses de Garbage Collection (GC) fréquentes et longues. Pendant ces pauses, un nœud peut paraître insensible, incitant le nœud maître à le déconnecter, ce qui entraîne des shards non assignés.
- Action : Surveillez l'utilisation du tas (
_cat/nodes?h=heap.percent). Si elle est constamment élevée, envisagez d'augmenter la mémoire des nœuds, d'optimiser les processus d'indexation ou d'implémenter la gestion du cycle de vie des index (ILM).
5.3 Filtrage de l'Allocation des Shards
L'application accidentelle de filtres d'allocation (utilisant des attributs de nœud tels que des balises ou des ID) peut empêcher les shards d'être alloués à des nœuds qui seraient autrement éligibles.
# Vérifier les règles d'allocation au niveau de l'index
GET /[index-name]/_settings
# Rechercher : index.routing.allocation.require.*
# Réinitialiser les règles d'allocation de l'index (si nécessaire)
PUT /[index-name]/_settings
{
"index.routing.allocation.require": null
}
Liste de Contrôle Récapitulative pour une Récupération Rapide
| Statut | Outil de Diagnostic Principal | Étapes d'Action Clés |
|---|---|---|
| Jaune | GET /_cluster/allocation/explain |
1. Vérifier l'espace disque. 2. Vérifier le nombre de nœuds par rapport au nombre de répliques. 3. Rechercher les règles de filtrage d'allocation. 4. Attendre la récupération du primaire. |
| Rouge | GET /_cat/shards?v | grep UNASSIGNED |
1. Consulter les journaux sur le nœud qui hébergeait précédemment. 2. Essayer de redémarrer le nœud défaillant. 3. Si le primaire est confirmé perdu et qu'aucune sauvegarde n'existe, utiliser allocate_empty_primary (Risque de perte de données). |
En utilisant systématiquement les API _cat et le point de terminaison critique _cluster/allocation/explain, vous pouvez identifier rapidement la cause de la dégradation de la santé du cluster et mettre en œuvre les étapes correctives nécessaires pour restaurer votre cluster à l'état stable Vert.