Le redémarrage ou la mise à jour d'un cluster Elasticsearch peut échouer avec l'erreur suivante :
L'opération ne peut pas être effectuée car le cluster n'est pas sain ou contient des index fermés. Nous vous recommandons de réessayer une fois que le cluster est redevenu sain ou que les index sont activés.
Cette erreur se produit lorsque le cluster remplit une ou plusieurs des conditions suivantes :
Le cluster contient des index à l'état close.
L'état de santé du cluster est red ou yellow.
Le cluster est sain mais fortement chargé.
Les sections suivantes expliquent comment diagnostiquer et résoudre chaque condition.
Index fermés
Les index fermés bloquent les redémarrages et les mises à jour du cluster. Exécutez la commande suivante pour vérifier l'état des index :
GET /_cat/indices?v
Exemple de sortie :
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size dataset.size
green open my-index-01 30h1EiMvS5uAFr2t5CEVoQ 5 1 820 0 14mb 7mb 7mb
close my-index-02 BJxfAErbTtu5HBjIXJV_7A 1 1
green open my-index-03 _8C6MIXOSxCqVYicH3jsEA 1 1 7 0 24.3kb 12.1kb 12.1kb
Dans cet exemple, my-index-02 est fermé. Ouvrez-le avec la commande suivante :
POST /my-index-02/_open
Remplacez my-index-02 par le nom de l'index fermé. Si plusieurs index sont fermés, ouvrez-les individuellement avant de réessayer le redémarrage ou la mise à jour.
État du cluster rouge ou jaune
Un statut red signifie qu'un ou plusieurs shards primaires ne sont pas assignés, ce qui peut entraîner l'échec des recherches ou de l'indexation sur les index concernés. Un statut yellow indique que tous les shards primaires sont assignés, mais qu'un ou plusieurs shards réplica ne le sont pas, augmentant ainsi le risque de perte de données.
Diagnostiquer le problème
Vérifiez l'état de santé du cluster :
GET /_cat/health?v
Si l'état est rouge ou jaune, identifiez les shards non assignés :
GET /_cat/shards?v&h=index,shard,prirep,state,node,unassigned.reason&s=state
Pour comprendre pourquoi un shard spécifique ne peut pas être alloué, exécutez :
GET _cluster/allocation/explain
Cette commande renvoie une erreur s'il n'y a aucun shard non assigné dans le cluster. Il s'agit d'un comportement attendu.
Exemple de sortie :
{
"index": "my-index-02",
"shard": 0,
"primary": true,
"current_state": "unassigned",
"can_allocate": "no",
"allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes"
}
Utilisez le champ allocate_explanation pour identifier la cause racine. Les causes courantes et leurs solutions sont décrites ci-dessous.
Nombre maximal de tentatives d'allocation de shards épuisé
Les shards sont automatiquement alloués avec un maximum de 5 tentatives. Si toutes les tentatives sont épuisées, réallouez manuellement les shards :
POST /_cluster/reroute?retry_failed=true
Shards primaires et réplicas sur le même nœud
Si l'explication d'allocation contient « the shard cannot be allocated to the same node on which a copy of the shard already exists », cela signifie que les shards primaires et réplicas d'un index résident sur le même nœud. Pour résoudre ce problème :
-
Définissez le nombre de shards réplica à 0 :
PUT /my-index/_settings { "index": { "number_of_replicas": 0 } } -
Une fois que l'état du cluster revient à vert, définissez à nouveau le nombre de réplicas à 1 :
PUT /my-index/_settings { "index": { "number_of_replicas": 1 } }
Limite maximale d'allocation simultanée de shards atteinte
Si le cluster a atteint sa limite d'allocation de shards, attendez que l'allocation en cours soit terminée. Si des shards restent non assignés après plusieurs minutes, vérifiez l'explication d'allocation :
GET _cluster/allocation/explain
Nœuds déconnectés
Un ou plusieurs nœuds peuvent être déconnectés du cluster. Vérifiez l'état des nœuds :
GET _cat/nodes?v
Si des nœuds sont absents de la sortie, redémarrez ces nœuds depuis la console Elasticsearch.
Utilisation élevée du disque
Elasticsearch n'alloue pas de shards aux nœuds utilisant plus de 85 % de l'espace disque. Une fois que l'utilisation du disque du nœud concerné passe sous les 85 %, redémarrez le nœud pour restaurer l'allocation normale des shards.
Pour vérifier l'utilisation du disque par nœud :
GET _cat/allocation?v
Pour réduire l'utilisation du disque :
Supprimez les index historiques dont vous n'avez plus besoin.
Augmentez la capacité de disque du nœud.
Définissez temporairement le nombre de shards réplica à 0.
Utilisation élevée de la mémoire heap
Une utilisation élevée de la mémoire heap peut suspendre les opérations du cluster. Pour libérer de la mémoire :
Appliquez une limitation pour réduire le trafic entrant.
Fermez les index historiques pour réduire la consommation de mémoire.
Autres causes
Si aucune des causes ci-dessus ne s'applique, vérifiez l'utilisation du CPU et de la mémoire heap dans la console Elasticsearch. Pour les shards non assignés, exécutez la commande suivante pour obtenir une explication détaillée :
GET _cluster/allocation/explain
Charge élevée du cluster
Même lorsque le cluster est sain (statut vert), un redémarrage ou une mise à jour peut échouer si le cluster est fortement chargé. Consultez les métriques suivantes pour identifier et résoudre les problèmes liés à la charge.
L'utilisation du disque atteint 85 %
Diagnostic :
Consultez les données de surveillance de l'utilisation du disque dans la console Elasticsearch.
Exécutez
GET _cat/allocationpour afficher l'allocation du disque par nœud.Exécutez
GET _cluster/allocation/explainpour vérifier les problèmes d'allocation.Vérifiez les journaux du cluster pour détecter les avertissements liés au disque.
Impact : Lorsque l'utilisation du disque atteint 85 %, Elasticsearch cesse d'allouer de nouveaux shards au nœud concerné.
Solutions :
Supprimez les index historiques dont vous n'avez plus besoin.
Augmentez la capacité du disque.
Définissez temporairement le nombre de shards réplica à 0.
Après avoir pris des mesures, vérifiez que l'utilisation du disque est passée sous les 85 % dans les données de surveillance.
L'utilisation du CPU atteint 85 %
Diagnostic :
Consultez les données de surveillance de l'utilisation du CPU dans la console Elasticsearch.
Examinez les informations sur les threads actifs pour identifier les opérations gourmandes en CPU.
Impact : Une utilisation élevée du CPU dégrade la stabilité du cluster.
Solutions :
Vérifiez les QPS en lecture et en écriture dans les données de surveillance et réduisez le trafic si possible.
Ajoutez des nœuds de données pour mettre à l'échelle le cluster.
Mettez à niveau la configuration du cluster pour utiliser des types d'instance plus grands.
Utilisation de la mémoire heap supérieure ou égale à 75 %
Diagnostic :
Consultez les données de surveillance de l'utilisation de la mémoire heap dans la console Elasticsearch.
Examinez les journaux du cluster pour détecter les avertissements de garbage collection (GC).
Vérifiez les métriques « old gc collection count » et « old gc collecting.ms » pour détecter les longues pauses GC.
Impact : Une utilisation élevée de la mémoire heap dégrade la stabilité du cluster et peut provoquer le blocage des opérations.
Solutions :
Réduisez le trafic en lecture et en écriture.
Mettez à niveau la configuration du cluster.
Fermez les index historiques pour libérer de la mémoire heap.
La charge du nœud dépasse le nombre de vCPU
Diagnostic :
Vérifiez la métrique NodeLoad_1m(value) dans la console Elasticsearch.
Une valeur supérieure au nombre de vCPU du nœud indique une charge élevée.
Impact : Un nœud surchargé peut devenir inaccessible et affecter les opérations du cluster.
Solutions :
Vérifiez les QPS en lecture, les QPS en écriture et le débit du disque dans les données de surveillance.
Réduisez le trafic en lecture ou en écriture.
Ajoutez des nœuds de données pour mettre à l'échelle le cluster.
Mettez à niveau la configuration du cluster.