Pourquoi ne puis-je pas supprimer un index ou mettre à niveau mon cluster Amazon Elasticsearch Service ?

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

Je ne parviens pas à supprimer un index ou à mettre à niveau mon cluster Amazon Elasticsearch Service (Amazon ES). Pourquoi cela arrive-t-il ?

Brève description

Si vous essayez de supprimer un index ou de mettre à niveau votre cluster Elasticsearch, cette modification peut échouer pour les raisons suivantes :

  • La création d'instantané est déjà en cours.
  • La création d'instantané est bloquée.
  • L'instantané en cours de création est associé à un cluster dont l'état est rouge.
  • Le délai d'expiration a été atteint, ou la création d'instantané a échoué.

Pour plus d'informations sur l'échec de mise à niveau de clusters Amazon ES, consultez la section Dépannage de la mise à niveau. Pour plus d'informations sur l'état de santé rouge d'un cluster Elasticsearch, consultez Statut du cluster rouge.

Résolution

La création d'instantané est déjà en cours

Lorsqu'un instantané est en cours, vous pouvez rencontrer l'un des messages d'erreur suivants :

  • « L'opération d'instantané antérieure n'est pas encore terminée » (lors d'une mise à niveau de cluster)
  • « Impossible de supprimer les indices qui sont instantanés » (lors de la suppression d'un index)

Si vous avez reçu une erreur, essayez ce qui suit :

1.    Pour les domaines chiffrés, utilisez la syntaxe suivante pour vérifier si un instantané automatique est déjà en cours :

curl -X GET  'https://es_endpoint/_snapshot/cs-automated-enc/_status

2.    Pour les domaines non chiffrés, utilisez la syntaxe suivante pour vérifier si un instantané automatique est déjà en cours :

curl -X GET 'https://es_endpoint/_snapshot/cs-automated/_status'

S'il n'y a aucun instantané en cours d'exécution, la sortie suivante apparaît :

{  "snapshots" : [ ]}

Les crochets vides indiquent si vous pouvez supprimer l'index en toute sécurité ou effectuer une mise à niveau. Si Amazon ES ne parvient pas à vérifier si un instantané est en cours, l'opération peut échouer.

La création d'instantané est bloquée

1.    Utilisez la commande suivante pour vérifier les heures de début et de fin de vos instantanés horaires :

curl -X GET  'https://es_endpoint/_cat/snapshots/cs-automated?v&s=id'

2.    Imprimez les heures de début à l'aide d'une sortie cURL dirigée vers la commande awk :

curl -X GET  'https://es_endpoint/_cat/snapshots/cs-automated?v&s=id' |awk -F" " ' { print $4  } '

La sortie indique l'heure à laquelle les instantanés horaires ont été créés. Par exemple, la sortie suivante indique que la sortie s'exécute vers la 52e minute de chaque heure :

22:51:11
23:51:18
00:51:19
01:51:14
02:51:16
03:51:18
04:51:16
05:51:11

3.    Vérifiez l'éligibilité de votre mise à niveau Amazon ES.

Important : n'exécutez pas le contrôle d'éligibilité à la mise à niveau tant que l'instantané n'est pas terminé.

Utilisez l'API d'état de l'instantané pour vérifier si l'instantané est terminé. L'API d'état de l'instantané renvoie un ensemble vide lorsque votre instantané est capturé. Si l'état actuel est en cours et qu'il ne change pas pendant un certain temps, alors votre instantané peut être bloqué. Il en va de même avec les instantanés ayant été interrompus, dans la mesure où ceci peut empêcher la création d'autres instantanés. Si l'état du cluster est rouge ou qu'il existe un bloc d'écriture, éliminez l'état ou le bloc pour résoudre le problème.

Remarque : les données de votre instantané peuvent changer après les modifications de configuration. Par conséquent, n'utilisez pas l'instantané pour les tâches planifiées.

L'instantané en cours est associé à un cluster dont l'état est rouge

1.    Pour répertorier uniquement les noms de référentiel membre sur votre domaine, utilisez la syntaxe suivante :

curl -XGET "http://es_endpoint/_cat/repositories?v&h=id"

2.    Pour répertorier les noms, types et autres paramètres de référentiel membre sur votre domaine, utilisez la syntaxe suivante :

curl -XGET "http://es_endpoint/_snapshot?pretty"
curl -XGET "https://es_endpoint/_cluster/state/metadata"

3.    Vérifiez si vous pouvez répertorier les instantanés dans chacun des référentiels, à l'exclusion des référentiels cs-automated ou cs-automated-enc. Si vous disposez de plusieurs référentiels, utilisez un script bash similaire à celui-ci :

#!/bin/bash
repos=$(curl -s https://es_endpoint/_cat/repositories 2>&1 |grep  -v "cs-automated" | awk '{print $1}')

for i in $repos; do
echo "Snapshots in ... :" $i >>/tmp/snapshot
`curl -s -XGET https://es_endpoint/_cat/snapshots/$i >> /tmp/snapshot`
\echo "done..."
done

Important : il est impossible de supprimer manuellement les instantanés bloqués dans le référentiel cs-automated ou cs-automated-enc.

4.    Pour afficher la sortie dans le dossier /tmp/snapshot, utilisez la syntaxe suivante :

cat /tmp/snapshot

La commande renvoie une réponse de ce type :

Snapshots in ... : snapshot-manual-repo
axa_snapshot-1557497454881 SUCCESS 1557639400 05:36:40 1557639405 05:36:45  4.6s  7 31 0 31
2019-05-15                 SUCCESS 1560503610 09:13:30 1560503622 09:13:42 11.8s  4 16 0 16
epoch_test                 SUCCESS 1569151317 11:21:57 1569151335 11:22:15 18.1s 15 56 0 56

Le message d'erreur renvoyé indique que le compartiment Amazon Simple Storage (Amazon S3) est déjà supprimé et membre du référentiel d'instantanés :

Snapshots in ... : snapshot-manual-repo
{"error":{"root_cause":[{"type":n","reason":"[snapshot-manual-repo] could not read repository data from index blob"}],"type":"repository_exception","reason":"[snapshot-manual-repo] could not read repository data from index blob","caused_by":{"type":"i_o_exception","reason":"Exception when listing blobs by prefix [index-]","caused_by":{"type":"a_w_s_security_token_service_exception","reason":"a_w_s_security_token_service_exception: User: arn:aws:sts::999999999999:assumed-role/cp-sts-grant-role/swift-us-east-1-prod-666666666666 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::666666666666:policy/my-manual-es-snapshot-creator-policy (Service: AWSSecurityTokenService; Status Code: 403; Error Code: AccessDenied; Request ID: 6b9374fx-11xy-11yz-ff66-918z9bb08193)"}}},"status":500}

5.    Vérifiez que le référentiel d'instantanés manuel est supprimé du compartiment Amazon S3 :

aws s3 ls | grep -i "snapshot-manual-repo"

Remarque : remplacez snapshot-manual-repo par le nom de votre compartiment.

6.    Supprimez le référentiel d'Amazon ES :

curl -XDELETE "https://es_endpoint/_snapshot/snapshot-example-manual-repo"

Délai d'expiration ou échec de l'instantané

Si vous avez reçu un délai d'expiration ou un échec de l'instantané, effectuez les opérations suivantes :

1.    Vérifiez que vous pouvez créer manuellement un instantané. Si vous obtenez le message d'erreur Impossible de prendre un instantané manuel, appelez l'API _cat/snapshots :

curl -XGET/_cat/snapshots/s3_repository

2.    Remplacez s3_repository par le nom de votre compartiment Amazon S3. Cette syntaxe vérifie la durée d'exécution de l'instantané actuel. Si la durée vous semble raisonnable, attendez que l'instantané soit terminé, puis essayez à nouveau de prendre l'instantané.

Remarque : la durée de votre instantané peut prendre plus de temps en fonction de la taille de vos index ou de la consommation de ressources de votre cluster.

3.    Vérifiez l'état de santé de votre cluster :

curl -XGET "https://es_endpoint/_cluster/health?pretty"

Si l'état de santé de votre cluster est rouge, identifiez et résolvez d'abord la cause racine de l'état de votre cluster rouge. Si Amazon ES déplace ou initialise des partitions, attendez que le processus se termine avant de configurer des stratégies d'accès. Notez que la réattribution des partitions peut considérablement fatiguer les ressources informatiques de votre cluster. Pour plus d'informations sur la résolution des problèmes lié à un cluster ayant l'état rouge, consultez la section État de cluster rouge.