Comment résoudre l'exception « Impossible d'obtenir le verrou de partition en mémoire » dans Amazon Elasticsearch Service ?

Dernière mise à jour : 08-01-2021

Mon cluster Amazon Elasticsearch Service (Amazon ES) est devenu jaune avec le message d'erreur « Impossible d'obtenir le verrou de partition en mémoire ». Pourquoi est-ce que je reçois ce message d'erreur et comment le résoudre ?

Brève description

Si votre partition ne parvient pas à obtenir un verrou en mémoire (dans les seuils définis pour Amazon ES) pour l'allocation de partitions, le message d'erreur suivant s'affiche :

"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]]]"

Remarque : Dans Amazon ES, votre cluster ne doit pas dépasser la limite de temps (5000 ms) et le nombre maximal de tentatives (5) pour l'allocation de partitions.

Pour résoudre le message d'erreur, essayez les options de résolution suivantes :

  • Dépannez l'état de votre cluster jaune.
  • Augmentez le paramètre de nouvelle tentative maximum.
  • Mettez à jour le nombre de réplicas.
    Remarque : Il n'est pas recommandé de mettre à jour le nombre de réplicas pour les clusters Elasticsearch avec des charges de travail lourdes.

Résolution

Résoudre les problèmes liés à l'état jaune de votre cluster

Votre cluster Elasticsearch peut avoir un état jaune en raison d'une panne de nœud ou de réseau. Si les nœuds de votre cluster échouent en raison d'un problème matériel interne, les nœuds existants sont remplacés par de nouveaux nœuds. Ce remplacement est une fonction de détection automatique d'Amazon ES. Cependant, dans certains cas, les fragments de réplica dans les nœuds défectueux sont laissés non attribués. Les fragments de réplica sont laissés non attribués lorsque les ressources précédemment utilisées ne se libèrent pas. Pendant ce temps, le nœud principal effectue cinq tentatives pour allouer les fragments de réplica. Si les cinq tentatives d'allocation des fragments de réplica du nœud leader échouent, votre cluster passe au rouge ou au jaune.

Remarque : Il est recommandé d'exécuter l'API expliquer l'allocation de cluster pour diagnostiquer les partitions non assignées. Pour plus d'informations, consultez la section API expliquer l'allocation de cluster sur le site web Elasticsearch.

Pour identifier les indices qui entraînent le passage à l’état jaune de votre cluster, utilisez la requête suivante :

GET /_cat/indices?v&health=yellow

Ensuite, utilisez la requête suivante pour identifier la cause racine des partitions non assignées de votre cluster :

GET /_cluster/allocation/explain

Remarque : L' API de reroutage de cluster n'est pas reconnue par Amazon ES. Pour plus d'informations sur les opérations d'API prises en charge, consultez la section Différences d'API notables.

Augmenter le maximum du paramètre de nouvelle tentative

Pour rétablir l'état vert de votre cluster Elasticsearch, augmentez le nombre maximal de tentatives pour chaque index jaune :

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

Lorsque cet appel d'API est exécuté, le nœud principal tente à nouveau l'allocation de partitions pour un index spécifié sur votre cluster.

Remarque : Lorsque vous augmentez le maximum du paramètre de nouvelle tentative, les fragments ne sont pas toujours assignés automatiquement. Il se peut que vous deviez affecter manuellement les partitions.

Mettre à jour le nombre de réplicas

Important : N'utilisez pas cette approche si votre charge de cluster Elasticsearch est élevée. Lorsque vous supprimez tous les réplicas d'un index, l'index ne doit s'appuyer que sur les fragments principaux. Si un nœud tombe en panne, votre cluster peut passer à l’état de cluster rouge car les partitions principales ne sont pas affectées.

Pour modifier le nombre de réplicas, effectuez les opérations suivantes :

1.    Supprimez tous les réplicas afin que le nombre d'index affecté devienne 0 :

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

2.    Remplacez le nombre de réplicas au nombre souhaité :

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