Come posso risolvere l'eccezione "Impossibile ottenere il blocco dello shard in memoria" in Amazon OpenSearch Service?

Ultimo aggiornamento: 06/08/2021

Il mio cluster Amazon OpenSearch Service (successore di Amazon Elasticsearch Service) è diventato giallo con il messaggio di errore “Impossibile ottenere il blocco dello shard in memoria”. Perché ricevo questo messaggio di errore e come posso risolverlo?

Breve descrizione

Se LO shard non riesce a ottenere un blocco in memoria (entro le soglie impostate per OpenSearch Service) per l'allocazione dello shard, viene visualizzato il seguente messaggio di errore:

"failed_allocation_attempts" : 5,
     "details" : "failed shard on node []: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[][5]: obtaining shard lock timed out after 5000ms]; ",
.
.
"explanation" : "shard has exceeded the maximum number of retries [5] on failed allocation attempts - manually call [/_cluster/reroute?retry_failed=true] to retry, [unassigned_info[[reason=ALLOCATION_FAILED], at[], failed_attempts[5], delayed=false, details[failed shard on node [lga-THKoSXykhSDbghN57A]: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[evelog-zdn-2020.04.28][5]: obtaining shard lock timed out after 5000ms]; ], allocation_status[no_attempt]]]"

Nota: in OpenSearch Service, il cluster non deve superare il limite di tempo (5000 ms) e il numero massimo di tentativi (5) per l'allocazione dello shard.

Per risolvere il messaggio di errore, provare i seguenti approcci:

  • Risolvere i problemi relativi allo stato del cluster giallo.
  • Aumentare l'impostazione del numero massimo di tentativi.
  • Aggiornare il conteggio delle repliche.
    Nota: non è consigliabile aggiornare il conteggio delle repliche per i cluster OpenSearch Service con carichi di lavoro pesanti.

Risoluzione

Risoluzione dei problemi relativi allo stato del cluster giallo

Il cluster OpenSearch Service può entrare nello stato giallo a causa di un nodo o di un errore di rete. Se i nodi del cluster non funzionano a causa di un problema hardware interno, i nodi esistenti vengono sostituiti da nuovi nodi. Questa sostituzione è una funzione di rilevamento automatico di OpenSearch Service. Tuttavia, in alcuni casi, gli shard di replica nei nodi difettosi vengono lasciati non assegnati. Gli shard di replica vengono lasciati non assegnati quando le risorse utilizzate in precedenza non sono state liberate. Durante questo periodo, il nodo leader effettua cinque tentativi di allocazione degli shard di replica. Se i cinque tentativi del nodo leader di allocare gli shard di replica non hanno esito positivo, il cluster entra nello stato di integrità rosso o giallo.

Nota: è consigliabile eseguire l'API di spiegazione dell'allocazione del cluster per la diagnosi di shard non assegnati. Per ulteriori informazioni, consultare l'API di spiegazione dell'allocazione dei cluster sul sito Web di Elasticsearch.

Per identificare quali indici stanno causando l'immissione dello stato giallo del cluster, utilizzare la seguente query:

GET /_cat/indices?v&health=yellow

Quindi, utilizza la seguente query per individuare la causa principale delle partizioni non assegnate del cluster:

GET /_cluster/allocation/explain

Nota: l'API di reindirizzamento del cluster non è riconosciuta da OpenSearch Service. Per ulteriori informazioni sulle operazioni API supportate, consulta Differenze API importanti.

Aumentare l'impostazione del numero massimo di tentativi

Per riportare il cluster OpenSearch Service allo stato verde, aumentare il numero massimo di tentativi per ogni indice giallo:

PUT <yellow-index-name>/_settings
{
"index.allocation.max_retries" : 10
}

Quando viene eseguita questa chiamata API, il nodo leader tenta di nuovo l'allocazione degli shard per un indice specificato sul cluster.

Nota: quando si aumenta l'impostazione del numero massimo di tentativi, gli shard non vengono sempre assegnati automaticamente. Potrebbe essere necessario assegnare manualmente gli shard.

Aggiornare il conteggio delle repliche

Importante: non utilizzare questo approccio se il carico del cluster di OpenSearch Service è elevato. Quando si rimuovono tutte le repliche da un indice, l'indice deve basarsi solo sugli shard primari. Se un nodo non funziona, il cluster potrebbe entrare in uno stato di cluster rosso perché le partizioni vengono lasciate non assegnate.

Per modificare il numero di repliche, attenersi alla seguente procedura:

1.    Rimuovere le repliche in modo che il conteggio dell'indice interessato diventi 0:

PUT /<yellow-index-name>/_settings
{
    "index" : {
        "number_of_replicas" : 0
    }
}

2.    Modificare il conteggio delle repliche con il conteggio desiderato:

PUT /< yellow -index-name>/_settings
{
    "index" : {
        "number_of_replicas" : 1
    }
}