Comment puis-je résoudre l'exception « Impossible d'obtenir le verrouillage de partition en mémoire » dans Amazon OpenSearch Service ?

Date de la dernière mise à jour : 06/08/2021

Mon cluster Amazon OpenSearch Service est devenu jaune avec le message d'erreur « Impossible d'obtenir le verrouillage de partition en mémoire ». Pourquoi est-ce que je reçois ce message d'erreur et comment y remédier ?

Brève description

Si votre partition ne parvient pas à obtenir un verrou en mémoire (dans les seuils définis pour OpenSearch Service) 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 OpenSearch Service, votre cluster ne doit pas dépasser la limite de temps (5 000 ms) et le nombre maximum de tentatives (5) pour l'allocation des partitions.

Pour y remédier, essayez les options 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 OpenSearch Service avec des applications volumineuses.

Résolution

Résoudre les problèmes liés au statut jaune de votre cluster

Votre cluster OpenSearch Service peut passer au jaune en raison d'un nœud ou d'une panne 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. Ce remplacement est une fonction de détection automatique d'OpenSearch Service. Cependant, dans certains cas, les partitions de réplica dans les nœuds défectueux ne sont pas 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 attribuées de votre cluster :

GET /_cluster/allocation/explain

Remarque : l'API de reroutage de cluster n'est pas reconnue par OpenSearch Service. Pour plus d'informations sur les opérations d'API prises en charge, veuillez consulter la rubrique Différences d'API notables.

Augmenter le nombre maximum de tentatives

Pour rétablir le statut vert de votre cluster OpenSearch Service, 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.

Mettez à jour le nombre de réplicas

Important : n'utilisez pas cette approche si la charge de cluster OpenSearch Service est élevée. Lorsque vous supprimez tous les réplicas d'un index, l'index ne doit s'appuyer que sur les partitions principales. Si un nœud tombe en panne, votre cluster peut passer au statut de cluster rouge car les partitions principales ne sont pas attribué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 par le nombre souhaité :

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

Amazon OpenSearch Service est le successeur d'Amazon Elasticsearch Service.