Perché non riesco a eliminare un indice o aggiornare il mio cluster Amazon OpenSearch Service?

Ultimo aggiornamento: 05/08/2021

Non sono in grado di eliminare un indice o di aggiornare il mio cluster Amazon OpenSearch Service. Perché si verifica questo problema?

Breve descrizione

Se provi a eliminare un indice o ad aggiornare il cluster OpenSearch Service, la modifica potrebbe non riuscire per i seguenti motivi:

  • Lo snapshot è già in corso.
  • Lo snapshot in corso è bloccato.
  • Lo snapshot in corso ha un cluster in stato rosso.
  • Timeout o errore dello snapshot.

Per ulteriori informazioni sugli errori di aggiornamento di OpenSearch Service, consulta Risoluzione dei problemi di un aggiornamento. Per ulteriori informazioni sullo stato di integrità rosso di un cluster di OpenSearch Service, consulta Stato del cluster rosso.

Risoluzione

Lo snapshot è già in corso

Mentre è in corso uno snapshot, è possibile che venga visualizzato uno dei seguenti messaggi di errore:

  • "L'operazione di snapshot precedente non è ancora stata completata" (durante un aggiornamento del cluster)
  • "Impossibile eliminare gli indici che sono sottoposti a snapshot" (durante l'eliminazione di un indice)

Se hai ricevuto un errore, prova a fare quanto segue:

1.    Per i domini crittografati, utilizza la seguente sintassi per verificare se è in corso uno snapshot automatico:

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

2.    Per i domini non crittografati, utilizza la seguente sintassi per verificare se è in corso uno snapshot automatico:

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

Se non sono presenti snapshot in esecuzione, viene visualizzato il seguente output:

{  "snapshots" : [ ]}

Le parentesi vuote indicano se è possibile eliminare l'indice in modo sicuro o eseguire un aggiornamento. Se OpenSearch Service non è in grado di verificare se è in corso uno snapshot, l'operazione potrebbe non riuscire.

Lo snapshot in corso è bloccato

1.    Utilizza la seguente sintassi dei comandi per controllare l'ora di inizio e di fine dei snapshot orari:

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

2.    Stampa gli orari di inizio utilizzando un output cURL collegato al comando awk:

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

L'output indica l'ora in cui si sono verificate gli snapshot orari. Ad esempio, questo output indica che l'output viene eseguito intorno al 52esimo minuto di ogni ora:

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.    Verifica l'idoneità all'aggiornamento di OpenSearch Service.

Importante: non eseguire il controllo di idoneità all'aggiornamento fino al completamento dello snapshot.

Utilizza l'API dello stato dello snapshot per verificare se lo snapshot è stato completatp. L'API dello stato dello snapshot restituisce un set vuoto quando viene acquisito lo snapshot. Se lo stato corrente è in corso e non cambia per un certo periodo, lo snapshot potrebbe essere bloccato. Lo stesso vale per gli snapshot interrotti che possono impedire l'acquisizione di altri snapshot. Se il cluster ha uno stato rosso o è presente un blocco di scrittura, deseleziona lo stato o il blocco per risolvere l'errore.

Nota: i dati dello snapshot possono cambiare dopo aver apportato modifiche alla configurazione. Pertanto, non utilizzare lo snapshot per i processi pianificati.

Lo snapshot in corso ha un cluster con stato rosso

1.    Per elencare solo i nomi dei repository registrati nel dominio, utilizza la seguente sintassi:

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

2.    Per elencare i nomi, i tipi e le altre impostazioni del repository registrati nel dominio, utilizza la seguente sintassi:

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

3.    Controlla se puoi elencare gli snapshot in ciascuno dei repository, esclusi i repository cs-automated o cs-automated-enc. Se hai diversi repository, usa uno script bash come questo:

#!/bin/bash
repos=$(curl -s https://domain-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://domain-endpoint/_cat/snapshots/$i >> /tmp/snapshot`
\echo "done..."
done

Importante: gli snapshot bloccati non possono essere eliminati manualmente nel repository cs-automated o cs-automated-enc.

4.    Per visualizzare l'output nella cartella /tmp/snapshot, utilizza la seguente sintassi:

cat /tmp/snapshot

Il comando restituisce una risposta simile alla seguente:

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

Il messaggio di errore restituito indica che il bucket Amazon Simple Storage (Amazon S3) è già stato eliminato e registrato come repository di snapshot:

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.    Verifica che il repository di snapshot manuali venga eliminato dal bucket Amazon S3:

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

Nota: sostituisci snapshot-manual-repo con il nome del bucket.

6.    Elimina il repository dal cluster:

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

Timeout o errore dello snapshot

Se si è verificato un timeout o un errore dello snapshot, attenersi alla seguente procedura:

1.    Verifica se è possibile acquisire uno snapshot manuale. Se ricevi un errore Impossibile eseguire snapshot manuali, chiama l'API _cat/snapshots:

curl -XGET/_cat/snapshots/s3_repository

2.    Sostituisci s3_repository con il nome del bucket Amazon S3. Questa sintassi controlla per quanto tempo è in esecuzione lo snapshot corrente. Se la durata sembra ragionevole, attendi il completamento dello snapshot, quindi prova ad acquisire di nuovo lo snapshot.

Nota: la durata dello snapshot può richiedere più tempo a seconda delle dimensioni degli indici o del consumo di risorse del cluster.

3.    Controlla lo stato di integrità del tuo cluster:

curl -XGET "https://domain-endpoint/_cluster/health?pretty"

Se lo stato di integrità del cluster è rosso, identifica e risolvi prima la causa principale dello stato del cluster rosso. Se OpenSearch Service sta riposizionando o inizializzando i frammenti, attendi il completamento del processo prima di configurare qualsiasi policy di accesso. Tieni presente che la riallocazione della partizione può mettere a dura prova le risorse di calcolo del cluster. Per ulteriori informazioni sulla risoluzione dei problemi di un cluster rosso, consulta Stato del cluster rosso.

Amazon OpenSearch Service è il successore di Amazon Elasticsearch Service.


Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?