Pourquoi mon nœud Amazon Elasticsearch Service s'est-il bloqué ?

Date de la dernière mise à jour : 10/09/2020

L'un des nœuds dans mon cluster Amazon Elasticsearch Service (Amazon ES) ne fonctionne plus. Pourquoi le nœud est-il défaillant et comment empêcher cette situation ?

Brève description

Chaque nœud Amazon ES s'exécute sur une instance Amazon Elastic Compute Cloud (Amazon EC2) distincte. Un nœud défaillant est une instance qui ne répond pas aux signaux de pulsation des autres nœuds. Les signaux de pulsation sont des signaux réguliers qui contrôlent la disponibilité des nœuds de données dans le cluster.

Les nœuds de cluster peuvent être défaillants pour l'une ou l'autre des raisons suivantes :

  • Forte sollicitation de la mémoire de la machine virtuelle Java (JVM)
  • Panne matérielle

Solution

Rechercher les nœuds défaillants

1.    Ouvrez la console Amazon ES.

2.    Choisissez le nom de votre domaine Elasticsearch.

3.    Choisissez l'onglet Santé du cluster, puis la métrique Nœuds. Si le nombre de nœuds est inférieur au nombre que vous avez défini pour votre cluster, cela signifie qu'un nœud est défaillant.

Remarque : la métrique Nodes (Nœuds) peut être inexacte durant les modifications de la configuration de votre cluster ou pendant les opérations de maintenance du service. Ce comportement est normal.

Identifier et résoudre les problèmes liés à une forte sollicitation de la mémoire JVM

La sollicitation de la mémoire JVM fait référence au pourcentage du tas Java utilisé pour tous les nœuds de données dans un cluster Elasticsearch. Une forte sollicitation de la mémoire JVM peut entraîner une utilisation élevée du processeur et poser d'autres problèmes de performances de cluster.

La sollicitation de la mémoire JVM est déterminée par les facteurs suivants :

  • Volume de données dans le cluster proportionnellement aux nombres de ressources.
  • Charge des requêtes dans le cluster.

Voici ce qui se produit lorsque la sollicitation de la mémoire JVM augmente :

  • À 75 % : Amazon ES déclenche le récupérateur de mémoire CMS (Concurrent Mark Sweep). Le récupérateur CMS s'exécute en même temps que d'autres processus pour réduire au minimum les pauses et interruptions.
    Remarque : Amazon ES publie plusieurs métriques de nettoyage de la mémoire dans Amazon CloudWatch. Ces métriques peuvent vous aider à surveiller l'utilisation de la mémoire JVM. Pour plus d'informations, consultez Surveillance d'Amazon Redshift à l'aide des métriques CloudWatch.
  • Supérieur à 75 % : si le récupérateur CMS ne parvient pas à récupérer suffisamment de mémoire et que l'utilisation est toujours supérieure à 75 %, la JVM Amazon ES tente alors de libérer de la mémoire. La JVM Amazon ES tente également d'empêcher une exception JVM OutOfMemoryError (OOM) en ralentissant ou en arrêtant des processus.
  • Si la JVM continue de croître et que l'espace n'est pas récupéré, la JVM Amazon ES arrête les processus qui essaient d'allouer de la mémoire. Si un processus important est arrêté, un ou plusieurs nœuds de cluster peuvent devenir défaillants. Il est recommandé de maintenir l'utilisation du processeur inférieure à 80 %.

Afin d'éviter toute sollicitation élevée de la mémoire JVM, suivez les bonnes pratiques ci-dessous :

  • Évitez d'exécuter des requêtes sur de larges plages, telles que des requêtes génériques.
  • Évitez d'envoyer un grand nombre de requêtes en même temps.
  • Assurez-vous de disposer du nombre approprié de partitions. Pour plus d'informations concernant la stratégie d'indexation, consultez Choix du nombre de partitions.
  • Assurez-vous que vos partitions sont réparties de façon uniforme entre les nœuds.
  • Évitez l'agrégation sur les champs de texte. Cela permet d'éviter les augmentations dans les champs de données. Plus vous disposez de données de champ, plus l'espace de tas est utilisé. Utilisez l'opération d'API GET _cluster/stats pour vérifier les données de champ. Pour plus d'informations concernant les données de champ, consultez le site Web Elastic.
  • Si vous devez effectuer des agrégations sur des champs de texte, remplacez le type de mappage par mot-clé. Si la sollicitation de la mémoire JVM devient trop élevée, utilisez les opérations d'API suivantes afin de nettoyer le cache des données de champ : POST /index_name/_cache/clear (cache au niveau de l'index) et POST */_cache/clear (cache au niveau du cluster).
    Remarque : le nettoyage du cache peut perturber les requêtes en cours.

Identifier et résoudre les problèmes de défaillance matérielle

Des défaillances pouvant affecter la disponibilité des nœuds dans votre cluster Elasticsearch peuvent parfois survenir. Pour limiter l'impact des défaillances matérielles potentielles, procédez comme suit :

  • Assurez-vous que votre cluster comporte plus d'un nœud. Un cluster à nœud unique constitue un point de défaillance unique. Vous ne pouvez pas utiliser de partitions de réplica pour sauvegarder vos données, car les partitions principales et de réplica ne peuvent pas être affectées au même nœud. Si le nœud tombe en panne, vous pouvez restaurer les données à partir d'un instantané. Pour plus d'informations concernant les instantanés, consultez Utilisation des instantanés d'index Amazon Elasticsearch Service. Notez que vous ne pouvez pas récupérer les données qui n'ont pas déjà été enregistrées dans le dernier instantané. Pour plus d'informations, consultez Ajustement des domaines Amazon ES et Configuration des domaines Amazon ES.
  • Assurez-vous de disposer d'au moins un réplica. Un cluster à plusieurs nœuds peut toujours perdre des données s'il n'y a pas de partitions de réplica.
  • Activez la prise en compte des zones. Lorsque cette fonction est activée, Amazon ES lance des nœuds de données dans plusieurs zones de disponibilité. Amazon ES tente de répartir les partitions principales et leurs partitions de réplica correspondantes dans différentes zones. En cas de défaillance d'un nœud ou d'une zone de disponibilité, vos données sont toujours disponibles. Pour plus d'informations, consultez Configuration d'un domaine Multi-AZ.