Perché l'operazione dell'indice di rollover nella policy ISM continua a non riuscire sul servizio OpenSearch di Amazon?

8 minuti di lettura
0

Desidero utilizzare Index State Management (ISM) per eseguire il rollover dei miei indici sul cluster del servizio OpenSearch di Amazon. Tuttavia, il rollover dell’indice non viene eseguito e ricevo un errore. Perché si verifica questo problema e come posso risolverlo?

Breve descrizione

Se viene visualizzato un errore "Rollover dell'indice non riuscito", l'azione di rollover potrebbe non riuscire per uno dei seguenti motivi:

  • La destinazione del rollover non esiste.
  • L'alias del rollover non è presente.
  • Il nome dell'indice non corrisponde al modello di indice.
  • L'alias di rollover punta a un alias duplicato in un modello di indice.
  • Utilizzo massimo delle risorse sul cluster.

Per risolvere il problema, utilizza l'API explain per identificare la causa dell'errore. Quindi, controlla la tua policy ISM. Per ulteriori informazioni sulla configurazione dell'operazione di rollover nella policy ISM, consulta Come posso utilizzare l'ISM per gestire lo spazio di archiviazione insufficiente nel servizio OpenSearch

Nota: la seguente soluzione si applica solo all'API OpenSearch. Per l'API Open Distro legacy, consulta le operazioni dell'API ISM di Open Distro.

Risoluzione

Utilizzo dell'API explain

Per identificare la causa principale dell'errore "Rollover dell’indice non riuscito", utilizza l'API explain:

GET _plugins/_ism/explain/logs-000001?pretty

Ecco un esempio di output dell'API explain:

{
     "logs-000001": {
          "index.plugins.index_state_management.policy_id": "rollover-workflow",
          "index": "logs-000001",
          "index_uuid": "JUWl2CSES2mWYXqpJJ8qlA",
          "policy_id": "rollover-workflow",
          "policy_seq_no": 2,
          "policy_primary_term": 1,
          "rolled_over": false,
          "state": {
               "name": "open",
               "start_time": 1614738037066
          },
          "action": {
               "name": "rollover",
               "start_time": 1614739372091,
               "index": 0,
               "failed": true,
               "consumed_retries": 0,
               "last_retry_time": 0
          },
          "retry_info": {
               "failed": false,
               "consumed_retries": 0
          },
          "info": {
               "cause": "rollover target [rolling-indices] does not exist",
               "message": "Failed to rollover index [index=logs-000001]"
          }
     }
}

Questo output di esempio mostra che gli indici non sono riusciti a eseguire il rollover perché l'alias di rollover di destinazione (rolling-indices) non esisteva.

La destinazione del rollover non esiste

Se l'API explain restituisce la causa come "la destinazione di rollover [rolling-indices] non esiste", verifica se l'indice è stato avviato con l'alias di rollover:

GET _cat/aliases

L'output elenca tutti gli alias correnti nel cluster e gli indici associati. Se ISM indica che la destinazione di rollover non esiste, allora il nome dell’alias di rollover e un'associazione di indice non riuscita non sono presenti.

Per risolvere l'associazione di indice non riuscita, collega l'alias di rollover all'indice:

POST /_aliases
{
     "actions": [{
          "add": {
               "index": "logs-000001",
               "alias": "my-data"
          }
     }]
}

Dopo aver collegato l'alias di rollover, prova a eseguire nuovamente l'operazione di rollover sull'indice gestito nel servizio OpenSearch:

POST _plugins/_ism/retry/logs-000001

Per ulteriori informazioni, consulta Retry failed index (Riprovare indice non riuscito) sul sito Web di OpenSearch.

Quando provi nuovamente l'indice non riuscito, potresti visualizzare un messaggio di stato "Nuovo tentativo". Se OpenSearch Service sta riprovando a eseguire l’operazione, attendere l'esecuzione del ciclo ISM successivo. I cicli ISM vengono eseguiti ogni 30-48 minuti. Se l'azione di rollover ha esito positivo, viene visualizzato il seguente messaggio: "Rollover dell’indice riuscito".

L'alias del rollover non è presente

Se l'output dell'API explain identifica la causa dell'errore di rollover come un alias di rollover mancante, controlla le impostazioni dell'indice non riuscito:

GET <failed-index-name>/_settings

Se vedi che l'impostazione index.plugins.index_state_management.rollover_alias è mancante, aggiungi manualmente l'impostazione al tuo indice:

PUT /<failed-index-name>/_settings
{
     "index.plugins.index_state_management.rollover_alias" : "<rollover-alias>"
}

Utilizza l'API retry failed index (riprovare indice non riuscito) per provare nuovamente l'operazione di rollover sull'indice non riuscito. Dutante il nuovo tentativo di esecuzione dell'operazione di rollover, aggiorna il modello di policy:

PUT _index_template/<template-name>

Assicuratii di utilizzare le stesse impostazioni del modello di policy esistente in modo che l'alias di rollover venga applicato agli indici appena creati. Ad esempio:

PUT _index_template/<existing-template> 
{
     "index_patterns": [
          "<index-pattern*>"
     ],
     "template": {
          "settings": {
               "plugins.index_state_management.rollover_alias": "<rollover-alias>"
          }
     }
}

Il nome dell'indice non corrisponde al modello di indice

Se la policy ISM indica che l'operazione di rollover non è riuscita perché il nome dell'indice e il modello dell'indice non corrispondono, controlla il nome dell'indice non riuscito. Per i rollover riusciti, i nomi degli indici devono corrispondere al seguente modello regex:

`^.*-\d+$`

Questo modello regex indica che i nomi degli indici devono includere testo seguito da un trattino (-) e una o più cifre. Se il nome dell'indice non segue questo schema e il primo indice contiene dati scritti su di esso, prendi in considerazione la possibilità di reindicizzare i dati. Se reindicizzi i dati, utilizza il nome corretto per il nuovo indice. Ad esempio:

POST _reindex
{
     "source": {
          "index": "<failed-index>"
     },
     "dest": {
          "index": "my-new-index-000001"
     }
}

Durante l'esecuzione dell'API reindex data (reindicizzazione dei dati), scollega l'alias di rollover dall'indice non riuscito. Quindi, aggiungi l'alias di rollover al nuovo indice in modo che l'origine dati possa continuare a scrivere i dati in ingresso in un nuovo indice.

Ad esempio:

POST /_aliases
{
     "actions": [{
          "remove": {
               "index": "<failed-index>",
               "alias": "<rollover-alias>"
          }
     },
     {
          "add": {
               "index": "my-new-index-000001",
               "alias": "<rollover-alias>"
          }
     }]
}

Collega manualmente la policy ISM al nuovo indice utilizzando la seguente chiamata API:

POST _plugins/_ism/add/my-new-index-*
{
     "policy_id": "<policy_id>"
}

Aggiorna il modello esistente in modo che rifletta il nuovo nome del modello di indice. Ad esempio:

PUT _index_template/<existing-template> 
{
     "index_patterns": ["<my-new-index-pattern*>"],
}

Nota: la policy ISM e l'alias di rollover devono riflettere gli indici successivi creati con lo stesso modello di indice.

L'alias di rollover punta a un alias duplicato in un modello di indice

Se l'API explain indica che il rollover dell'indice non è riuscito perché un alias di rollover punta a un alias duplicato, controlla le impostazioni del modello di indice:

GET _index_template/<template-name>

Verifica se il tuo modello contiene una sezione alias aggiuntiva (con un altro alias che punta allo stesso indice):

{
     "index_patterns": ["my-index*"],
     "settings": {
          "index.plugins.index_state_management.rollover_alias": "<rollover-alias>"
     },
     "aliases": {
          "another_alias": {
               "is_write_index": true
          }
     }
}

La presenza di un alias aggiuntivo conferma il motivo dell'errore dell'operazione di rollover, poiché più alias causano il fallimento del rollover. Per risolvere questo errore, aggiorna le impostazioni del modello senza specificare alcun alias:

PUT _index_template/<template-name>

Quindi, esegui l'API retry sull'indice non riuscito:

POST _plugins/_ism/retry/logs-000001

Importante: se un alias punta a più indici, assicurati che solo un indice abbia l'accesso in scrittura abilitato. L'API rollover abilita automaticamente l'accesso in scrittura per l'indice a cui punta l'alias di rollover. Ciò significa che non è necessario specificare alcun alias per l'impostazione "is_write_index" quando si esegue l'operazione di rollover in ISM.

Utilizzo massimo delle risorse sul cluster

L'utilizzo massimo delle risorse sul cluster potrebbe essere causato da un'eccezione dell'interruttore automatico o dalla mancanza di spazio di archiviazione.

Eccezione dell’interruttore automatico

Se l'API explain restituisce un'eccezione di interruttore automatico, è probabile che il cluster abbia riscontrato un'elevata pressione della memoria JVM quando è stata chiamata l'API rollover. Per risolvere i problemi di pressione della memoria JVM, consulta In che modo è possibile risolvere i problemi di utilizzo elevato di memoria JVM nel mio cluster del servizio OpenSearch?

Una volta che la pressione della memoria JVM è scesa al di sotto del 75%, è possibile riprovare l'attività sull'indice non riuscito con la seguente chiamata API:

POST _plugins/_ism/retry/<failed-index-name>

Nota: per riprovare le attività su più indici non riusciti, puoi utilizzare i modelli di indice (*).

Se si verificano picchi JVM poco frequenti sul cluster, puoi inoltre aggiornare la policy ISM con il seguente blocco di nuovi tentativi per l'operazione di rollover:

{
     "actions": {
          "retry": {
               "count": 3,
               "backoff": "exponential",
               "delay": "10m"
          }
     }
}

Nella policy ISM, ogni azione ha un nuovo tentativo automatico basato sul parametro di conteggio. Se l'operazione precedente ha esito negativo, controlla il parametro "delay" per vedere quanto tempo devi attendere prima che ISM ritenti l'operazione.

Mancanza di spazio di archiviazione

Se il cluster sta esaurendo lo spazio di archiviazione, OpenSearch Service attiva un blocco di scrittura sul cluster facendo in modo che tutte le operazioni di scrittura restituiscano una ClusterBlockException. I valori del parametro ClusterIndexWritesBlocked mostrano il valore "1", a indicare che il cluster sta bloccando le richieste. Pertanto, qualsiasi tentativo di creare un nuovo indice avrà esito negativo. La chiamata dell'API explain restituisce anche un IndexCreateBlockException 403, indicando che lo spazio di archiviazione del cluster è esaurito. Per risolvere i problemi relativi all'eccezione del blocco cluster, consulta Come posso risolvere l'errore 403 "index_create_block_exception" sul servizio OpenSearch?

Una volta che il parametro ClusterIndexWritesBlocked è tornato a "0", riprova l'operazione ISM sull'indice non riuscito. Se la pressione della memoria JVM supera il 92% per più di 30 minuti, potrebbe essere attivato un blocco di scrittura. Se si verifica un blocco di scrittura, è necessario risolvere i problemi relativi alla pressione della memoria JVM. Per ulteriori informazioni su come risolvere i problemi relativi alla pressione della memoria JVM, consulta Come posso risolvere i problemi relativi alla pressione elevata della memoria JVM sul cluster del servizio OpenSearch?


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa