Pourquoi mon cluster Amazon Elasticsearch Service est-il à l'état rouge ou jaune ?

Dernière mise à jour : 18/03/2021

Mon cluster Amazon Elasticsearch Service (Amazon ES) est à l'état de cluster rouge ou jaune. Pourquoi cela arrive-t-il ?

Brève description

L'onglet Surveillance de votre console Amazon ES indique l'état de l'index le moins sain de votre cluster. Un état de cluster qui affiche un état rouge ne signifie pas que votre cluster est arrêté. Au contraire, cet état indique qu'au moins une partition principale et ses réplications ne sont pas allouées à un nœud. Si l'état de votre cluster affiche un état jaune, les partitions principales de tous les index sont allouées aux nœuds de votre cluster. Cependant, les partitions de réplication d'au moins un index ne sont alloués à aucun des nœuds.

Remarque : ne reconfigurez pas votre domaine Amazon ES tant que vous n'avez pas résolu pour la première fois l'état du cluster rouge. Si vous essayez de reconfigurer votre domaine Amazon ES alors qu'il est en statut de cluster rouge, votre domaine peut rester bloqué dans un état « Traitement ». Pour plus d'informations sur les clusters bloqués dans un état « Traitement », consultez Pourquoi mon domaine Amazon Elasticsearch Service (Amazon ES) est-il bloqué dans l'état « Traitement » ?

Votre cluster Elasticsearch peut entrer dans l'état rouge pour les raisons suivantes :

  • Multiples défaillances des nœuds de données
  • Utilisation d'une partition corrompue ou rouge pour un index
  • Pression de la mémoire JVM élevée ou utilisation du processeur
  • Espace disque faible ou asymétrie du disque

Remarque : dans certains cas, vous pourrez peut-être résoudre l'état de votre cluster rouge en supprimant puis en restaurant l'index à partir d'un instantané automatisé.

Votre cluster Elasticsearch peut entrer un état d'intégrité jaune pour les raisons suivantes :

  • Création d'un nouvel index
  • Pas assez de nœuds à allouer aux partitions ou à l'inclinaison du disque
  • Forte sollicitation de la mémoire JVM
  • Défaillance du nœud unique
  • Dépassement du nombre maximal de tentatives d'allocation de partition

Remarque : si l'état de votre cluster jaune ne se résout pas, vous pouvez le résoudre en mettant à jour les paramètres d'index ou en redirigeant manuellement les partitions non attribuées. Si l'état de votre cluster jaune ne se résout pas automatiquement, identifiez et résolvez la cause racine. Pour empêcher l'état de cluster jaune, appliquez les bonnes pratiques en matière de santé.

Résolution

Identification de la raison de vos partitions non attribuées

Pour identifier les partitions non attribuées, effectuez les opérations suivantes :

1.    Répertorier la partition non attribuée :

$ curl -XGET 'ES_Endpoint/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED

2.    Récupérez les détails expliquant pourquoi la partition n'est pas attribuée :

$ curl -XGET 'ES_Endpoint/_cluster/allocation/explain?pretty' -H 'Content-Type:application/json' -d'{"index": "<index name>", "shard": <shardId>, "primary":<true or false>}'

3.    Facultatif) Pour l'état du cluster rouge, supprimez les indices de préoccupation et identifiez et corrigez la cause racine :

curl -XDELETE 'ES_Endpoint/<index names>'

Ensuite, identifiez les instantanés disponibles et restaurez vos index à partir d'un instantané :

curl -XGET 'elasticsearch-domain-endpoint/_snapshot?pretty'

Pour l'état du cluster jaune, abordez la cause racine afin que vos partitions soient attribuées.

Dépannage de l'état de votre cluster rouge ou jaune

Pas assez de nœuds à allouer aux partitions

Une partition de réplication ne sera pas attribuée au même nœud que sa partition principale. Un cluster à nœud unique avec des partitions de réplication s'initialise toujours avec l'état de cluster jaune. Les clusters à nœud unique sont initialisés de cette manière car il n'y a pas d'autres nœuds disponibles auxquels Amazon ES peut attribuer une réplication.

Il y a aussi une limite par défaut de « 1 000 » pour le cluster.max_shards_per_node pour Elasticsearch versions 7.x et ultérieures. C'est une bonne pratique de garder le cluster.max_shards_per_node à la valeur par défaut de « 1000 ». Si vous définissez filtres d'allocation de partitions pour contrôler la façon dont Elasticsearch alloue les partitions, la partition peut être attribuée parce qu'il n'a pas suffisamment de nœuds filtrés. Pour éviter cette pénurie de nœuds, augmentez le nombre de nœuds. Assurez-vous que le nombre de réplications pour chaque partition principale est inférieur au nombre de nœuds de données. Vous pouvez également réduire le nombre de partitions de réplication. Pour plus d'informations, consultez Dimensionnement des domaines Amazon ES et Démystification de l'allocation de partitions Elasticsearch.

Espace disque faible ou asymétrie du disque

S'il n'y a pas assez d'espace disque, votre cluster Elasticsearch peut entrer dans l'état d'intégrité rouge ou jaune. Il doit y avoir suffisamment d'espace disque pour accueillir les partitions avant qu'Amazon ES ne les distribue.

Pour vérifier la quantité d'espace de stockage disponible pour chaque nœud de votre cluster, utilisez la syntaxe suivante :

$ curl ES_Endpoint/_cat/allocation?v

Pour plus d'informations sur les problèmes d'espace de stockage, consultez Comment résoudre les problèmes d'espace de stockage insuffisant dans mon domaine Amazon Elasticsearch Service ?

Une inclinaison importante du disque peut également entraîner un problème d'espace de stockage faible pour certains nœuds de données. Si vous décidez de réallouer des partitions, celles-ci peuvent ne pas être attribuées pendant la distribution des partitions. Pour résoudre ce problème, consultez Comment rééquilibrer la distribution de partition inégale dans mon cluster Amazon Elasticsearch Service ?

Les paramètres d'allocation de partition basée sur le disque peuvent également conduire à des partitions non attribuées. Par exemple, si la métrique cluster.routing.allocation.disk.watermark.low est définie sur 50 Go, la quantité d'espace disque spécifiée doit être disponible pour l'allocation de partition.

Pour vérifier les paramètres actuels d'allocation de partitions sur disque, utilisez la syntaxe suivante :

$ curl -XGET ES_Endpoint/_cluster/settings?include_defaults=true&flat_settings=true

Pour résoudre vos problèmes d'espace disque, envisagez les approches suivantes :

  • Supprimez tous les indices indésirables.
  • Augmentez le volume EBS.
  • Ajoutez plus de nœuds de données.

Forte sollicitation de la mémoire JVM

Chaque allocation de partition utilise le processeur, l'espace du tas et les ressources disque et réseau. Des niveaux constamment élevés de pression de la mémoire JVM peuvent entraîner un échec d'allocation de partition. Par exemple, si la pression de la mémoire JVM dépasse 95 %, un disjoncteur de mémoire parent sera déclenché. Le thread d'allocation est ensuite annulé, laissant les partitions non attribuées.

Pour résoudre ce problème, réduisez d'abord le niveau de pression de la mémoire JVM. Une fois la pression de la mémoire JVM réduite, tenez compte de ces conseils supplémentaires pour ramener votre cluster à l'état d'intégrité vert :

  • Augmentez la valeur de nouvelle tentative de partition par défaut de « 5 » ou plus.
  • Désactivez et activez la partition de réplication.
  • Réessayez manuellement les partitions non attribuées.

Pour plus d'informations sur la réduction de la pression de la mémoire JVM, voir Comment résoudre les problèmes de pression élevée de la mémoire JVM sur mon cluster AmazonElasticsearch Service ?

Échec du nœud

Lorsque votre cluster rencontre une défaillance de nœud, les partitions allouées à un nœud deviennent non attribuées. Lorsqu'aucune partition de réplication n'est disponible pour un index donné, même une défaillance d'un seul nœud peut entraîner un état d'intégrité rouge. Le fait de disposer de deux partitions de réplication et d'un déploiement Multi-AZ protège votre cluster contre la perte de données lors d'une panne matérielle.

Si tous vos index ont une partition de réplication, une défaillance d'un seul nœud peut amener votre cluster à entrer temporairement dans un état d'intégrité jaune. Si votre cluster entre temporairement en état d'intégrité jaune, Amazon ES récupérera automatiquement dès que le nœud est à nouveau sain. Ou, Amazon ES récupérera lorsque des partitions sont attribués à un nouveau nœud.

Vous pouvez confirmer toute défaillance de nœud en vérifiant vos métriques Amazon CloudWatch. Pour plus d'informations sur l'identification d'une défaillance de nœud, consultez Nœuds de cluster ayant échoués.

Remarque : il est également de bonne pratique d'attribuer une partition de réplication pour chaque index ou d'utiliser des nœuds maîtres dédiés et d'activer la détection de zone. Pour plus d'informations, consultez Faire face à une panne sur le site Web d'Elasticsearch.

Dépassement du nombre maximal de tentatives

Dans Amazon ES, votre cluster ne doit pas dépasser la limite de temps maximale (5000 ms) ou le nombre de tentatives (5) pour l'allocation de partition. Si votre cluster a atteint les seuils maximum, vous devez déclencher manuellement une allocation de partition. Pour déclencher manuellement une allocation de partition, désactivez et réactivez les partitions de réplication pour vos index.

Une modification de configuration sur votre cluster peut également déclencher une allocation de partition. Cependant, évitez de modifier la configuration de votre cluster lorsqu'il est en état d'intégrité rouge. Pour plus d'informations sur l'allocation de partitions, voir Chaque partition mérite une maison sur le site Web d'Elasticsearch.

Remarque : il n'est pas recommandé de déclencher manuellement l'allocation de partition si votre cluster a une charge de travail importante. Si vous supprimez tous vos réplications d'un index, l'index ne doit reposer que sur des partitions primaires. Lorsqu'un nœud tombe en panne, votre cluster entre alors dans l'état d'intégrité rouge car les partitions principales ne sont pas attribuées.

Pour désactiver une partition de réplication, mettez à jour la valeur number_of_replicas sur « 0 » :

$ curl -XPUT 'ES_Endpoint/<indexname>/_settings' -H 'Content-Type: application/json' -d'
{
  "index" : {
    "number_of_replicas" : 0
  }
}'

Vérifiez également que le paramètre index.auto_expand_replicas est défini sur « faux ». Lorsque votre cluster revient à l'état d'intégrité vert, vous pouvez redéfinir la valeur index.number_of_replicas sur la valeur souhaitée pour déclencher l'allocation des partitions de réplication. Si l'allocation de partition réussit, votre cluster entrera dans l'état d'intégrité vert.

Meilleures pratiques relatives à l'intégrité du cluster

Pour résoudre l'état de votre cluster jaune ou rouge, tenez compte des bonnes pratiques suivantes :

  • Définissez une alarme Amazon CloudWatch recommandée pour AutomatedSnapshotFailure. Avec l'alarme, vous pouvez vous assurer que vous disposez d'un instantané pour restaurer vos index à partir du moment où votre cluster passe à l'état rouge.
  • Si votre cluster est soumis à une charge de travail élevée et soutenue, faites évoluer votre cluster. Pour plus d'informations sur la mise à l'échelle de votre cluster Elasticsearch, consultez Comment augmenter la capacité d'un domaine Amazon Elasticsearch Service ?
  • Surveillez votre utilisation du disque, la pression de la mémoire JVM et l'utilisation de CPU et assurez-vous qu'ils ne dépassent pas les seuils définis. Pour plus d'informations, consultez Alarmes CloudWatch et métriques de cluster recommandées.
  • Assurez-vous que toutes les partitions principales ont des partitions de réplication pour se protéger contre les pannes de nœud.

Pour plus d'informations sur les meilleures pratiques d'Amazon ES, consultez les bonnes pratiques d'Amazon Elasticsearch Service.


Cet article vous a-t-il été utile ?


Besoin d'aide pour une question technique ou de facturation ?