Wie kann ich die Ausnahme „failed to obtain in-memory shard lock“ in Amazon OpenSearch Service beheben?

Letzte Aktualisierung: 06.08.2021

Mein Amazon-OpenSearch-Service-Cluster (Nachfolger von Amazon Elasticsearch Service) hat einen gelben Status und die Fehlermeldung „failed to obtain in-memory shard lock“ wird angezeigt. Warum erhalte ich diese Fehlermeldung und wie behebe ich sie?

Kurzbeschreibung

Wenn Ihr Shard keine In-Memory-Sperre (innerhalb der festgelegten Schwellenwerte für OpenSearch Service) für die Shard-Zuweisung erhält, wird folgende Fehlermeldung angezeigt:

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

Hinweis: In OpenSearch Service darf Ihr Cluster das Zeitlimit (5 000 ms) und die maximale Anzahl von Wiederholungen (5) für die Shard-Zuweisung nicht überschreiten.

Probieren Sie zur Fehlerbehebung folgende Methoden aus:

  • Beheben Sie den gelben Clusterstatus.
  • Erhöhen Sie die maximalen Wiederholungen in den Einstellungen.
  • Aktualisieren Sie die Anzahl der Replikate.
    Hinweis: Es ist keine bewährte Methode, die Anzahl der Replikate für OpenSearch-Service-Cluster mit großen Workloads zu aktualisieren.

Behebung

Den gelben Clusterstatus beheben

Ihr OpenSearch-Service-Cluster kann aufgrund eines Knoten- oder Netzwerkausfalls in den gelben Zustand übergehen. Wenn die Knoten in Ihrem Cluster aufgrund eines internen Hardwareproblems ausfallen, werden die vorhandenen Knoten durch neue Knoten ersetzt. Dieser Ersatz ist eine automatische Erkennungsfunktion von OpenSearch Service. In einigen Fällen werden Replikat-Shards in den fehlerhaften Knoten jedoch nicht zugewiesen. Replikat-Shards werden nicht zugewiesen, wenn zuvor verwendete Ressourcen nicht freigegeben wurden. Der Leader-Knoten unternimmt in diesem Fall fünf Versuche, die Replikat-Shards zuzuweisen. Wenn die fünf Versuche des Leader-Knotens, die Replikat-Shards zuzuweisen, erfolglos sind, wechselt Ihr Cluster in den roten oder gelben Zustand.

Hinweis: Es ist eine bewährte Methode, die cluster allocation explain API zur Diagnose unzugewiesener Shards zu verwenden. Weitere Informationen finden Sie unter cluster allocation explain API auf der Elasticsearch-Website.

Verwenden Sie die folgende Abfrage, um festzustellen, welche Indizes dazu führen, dass Ihr Cluster in den gelben Status wechselt:

GET /_cat/indices?v&health=yellow

Verwenden Sie dann die folgende Abfrage, um die Ursache für die nicht zugewiesenen Shards Ihres Clusters zu ermitteln:

GET /_cluster/allocation/explain

Hinweis: Die cluster reroute API kann in OpenSearch Service nicht verwendet werden. Weitere Informationen zu unterstützten API-Vorgängen finden Sie unter Wichtige API-Unterschiede.

Maximale Wiederholungen in den Einstellungen erhöhen

Um Ihren OpenSearch-Service-Cluster wieder in den grünen Zustand zu versetzen, erhöhen Sie die maximale Anzahl von Wiederholungen für jeden gelben Index:

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

Wenn dieser API-Aufruf ausgeführt wird, führt der Leader-Knoten die Shard-Zuweisung für einen bestimmten Index in Ihrem Cluster erneut aus.

Hinweis: Wenn Sie die Einstellung für maximale Wiederholungen erhöhen, werden Shards nicht immer automatisch zugewiesen. Möglicherweise müssen Sie die Shards manuell zuweisen.

Die Anzahl der Replikate aktualisieren

Wichtig: Verwenden Sie diese Methode nicht, wenn Ihre OpenSearch Service-Cluster-Last hoch ist. Wenn Sie alle Replikate aus einem Index entfernen, darf sich der Index nur auf primäre Shards verlassen. Wenn ein Knoten ausfällt, wechselt Ihr Cluster möglicherweise in den roten Clusterstatus, da die primären Shards nicht zugewiesen wurden.

Führen Sie die folgenden Schritte aus, um die Anzahl der Replikate zu ändern:

1.    Entfernen Sie alle Replikate, sodass die Anzahl betroffener Indizes 0 beträgt:

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

2.    Ändern Sie die Anzahl der Replikate wieder auf die gewünschte Anzahl:

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