Pourquoi mon domaine Amazon Elasticsearch Service (Amazon ES) est-il bloqué à l'état « Processing » (Traitement en cours) ?

Dernière mise à jour : 21/08/2020

Mon domaine Amazon Elasticsearch Service (Amazon ES) est bloqué à l'état « Processing » (Traitement en cours) après avoir effectué une modification de configuration. Pourquoi mon domaine est-il bloqué et que puis-je faire pour éviter que cela ne se reproduise ?

Brève description

Votre domaine Amazon ES peut être bloqué à l'état « Processing » pour plusieurs raisons :

  • Échec des nœuds du cluster
  • Distribution inégale des nœuds
  • Réattribution des partitions (à l'aide du paramètre index.routing.allocation.require)
  • Utilisation élevée de l'UC
  • Sollicitation de la mémoire JVM (de la part de charges de requêtes volumineuses, de problèmes de disque et de défaillances de nœud)
  • Instantané bloqué

Une bonne pratique consiste à vérifier le nombre de partitions et d'attributions de partitions avant d'effectuer un autre dépannage de votre domaine Amazon ES.

Pour plus d'informations sur la réattribution d'une partition et la mise à jour de ses paramètres requis, consultez Index-level shard allocation sur le site Web Elasticsearch.

Solution

Distribution inégale des nœuds

Amazon ES migre les partitions lors de la récupération d'instantanés, de changements de configuration de domaine, de changements de niveau de réplication, de défaillances de nœud et de démarrage de nœud. Si trop de partitions se trouvent sur le cluster lors d'un déploiement bleu/vert, le processus de migration des partitions peut être ralenti. Une utilisation élevée de l'UC et une forte sollicitation de la mémoire JVM peuvent également ralentir le processus de migration, provoquant le blocage du cluster à l'état « Processing ». Par conséquent, les partitions deviennent « Unassigned » (Non attribuées) si suffisamment de nœuds ne sont pas répartis uniformément sur le nombre de partitions. Pour plus d'informations sur le déploiement bleu/vert, consultez Changements de configuration.

Si votre cluster Elasticsearch est bloqué à l'état « Processing », envisagez de réduire le nombre de partitions dans votre cluster. Pour plus d'informations sur la désignation du nombre approprié de partitions, consultez Choix du nombre de partitions.

Pour déterminer si les partitions sont en cours de migration, saisissez la syntaxe de commande suivante :

$ curl -XGET "ES_Endpoint/_cat/recovery?v&active_only"

Remarque : patientez quelques minutes avant d'exécuter à nouveau la commande. S'il y a une modification dans le résultat, alors les partitions sont toujours en cours de migration.

Ensuite, vérifiez le nombre de partitions attribuées à chaque nœud et la quantité d'espace disque en cours d'utilisation :

$ curl -XGET ES_Endpoint/_cat/allocation?v

Remarque : cette syntaxe de commande indique également si le nœud de cluster a échoué en raison d'une utilisation élevée du disque ou d'une forte sollicitation de mémoire JVM.

Partitions non attribuées

Pour vérifier le nombre de partitions et d'index dans votre cluster, utilisez la syntaxe suivante :

$ curl -XGET ES_Endpoint/_cat/indices
$ curl -XGET ES_Endpoint/_cat/shards

Une fois que vous avez identifié les partitions non attribuées, réduisez le nombre de partitions inutiles dans votre domaine. Pour plus d'informations sur les calculs de partition, consultez Get started with Amazon Elasticsearch Service: How many shards do I need?

Réduire le nombre de partitions dans le cluster

Pour réduire le nombre de partitions dans votre cluster ou toute surcharge, supprimez tous les index anciens ou obsolètes :

$ curl -XDELETE ES_Endpoint/oldindex1,oldindex2

Si vous avez une rotation d'index configurée, chaque rotation génère un ensemble de partitions nouvellement créé. Par défaut, Amazon ES crée cinq partitions principales par index et une partition de réplica pour chaque partition principale. Cette rotation d'index peut éventuellement conduire à la surcharge d'un nœud principal. Pour éviter la surcharge et contrôler la croissance future des partitions, envisagez de modifier votre stratégie de rotation d'index ou utilisez un modèle d'index.

Remarque : vous pouvez spécifier le nombre de partitions uniquement lorsque vous créez un nouvel index ou que vous réindexez vos données existantes. Avant d'indexer votre document, choisissez le nombre de partitions.

Pour spécifier le nombre de partitions dans un nouvel index, exécutez la commande suivante :

$ curl -XPUT ES_Endpoint/index-name -H 'Content-Type: application/ json' -d'
{
      "settings": {
            "index": {
                    "number_of_shards": 3,
                    "number_of_replicas": 1                   
       }        
}'

Remarque : Amazon ES ne peut pas modifier le nombre de partitions principales dans un index existant. Pour plus d'informations sur l'indexation des données dans Amazon ES, consultez Introduction à l'indexation.

Pour restructurer un index existant, effectuez les tâches suivantes :

1.    Créez et définissez un modèle d'index. La syntaxe suivante spécifie le nombre de nouvelles partitions créées dans le cluster :

$ curl -XPUT ES_Endpoint/_template/template_1 -H 'Content-Type: application/json' -d'
{
      "index_patterns": ["*"],
      "settings": {
            "number_of_shards": 3,
            "number_of_replicas": 1     
      }
}'

2.    Réindexez en appelant l'opération d'API _reindex (Amazon ES versions 5.1 et ultérieures). La syntaxe suivante déplace vos données dans un nouvel index, en spécifiant le nouveau nombre de partitions dans votre modèle d'index :

$ curl -XPOST ES_Endpoint/_reindex -H 'Content-Type: application/json' -d '
{
      "source": {   
            "index": "old_index"
      },
      "dest": {
            "index": "new_index"
      }   
}'

Important : si votre politique d'accès inclut des utilisateurs ou des rôles AWS Identity and Access Management (IAM), vous devez signer les demandes HTTP adressées aux API Amazon Elasticsearch Service.

3.    Vérifiez que l'ancien index et le nouveau ont le même nombre de documents :

$ curl -XGET ES_Endpoint/_cat/indices/old_index,new_index?v

4.    Lorsque l'ancien index et le nouveau affichent le même nombre de documents, vous pouvez supprimer l'ancien index :

$ curl -XDELETE ES_Endpoint/old_index

5.    Réexécutez la mise à jour de votre configuration. Pour plus d'informations sur les changements de configuration, consultez About configuration changes.