Amazon OpenSearch Service で「インメモリシャードロックを取得できませんでした」という例外を解決するにはどうすればよいですか?

最終更新日: 2021 年 8 月 6 日

Amazon OpenSearch Service (Amazon Elasticsearch Service の後継サービス) クラスターが黄色に変わり、「インメモリシャードロックを取得できませんでした」というエラーメッセージが表示されました。このエラーメッセージが表示されるのはなぜですか? また、解決するにはどうすればよいですか?

簡単な説明

シャードがシャード割り当てのインメモリロック (OpenSearch Service に設定されたしきい値内) を取得できない場合、次のエラーメッセージが表示されます。

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

注: OpenSearch Service では、クラスターでシャード割り当ての制限時間 (5000 ミリ秒) および最大再試行回数 (5 回) を超えることはできません。

エラーメッセージを解決するには、次の方法を試してください。

  • 黄色のクラスターステータスのトラブルシューティングを行います。
  • 最大再試行設定を増やします。
  • レプリカの数を更新します。
    注: 重いワークロードで OpenSearch Service クラスターのレプリカ数を更新することはベストプラクティスではありません。

解決方法

黄色クラスターステータスをトラブルシューティングする

ノードまたはネットワークの障害が原因で OpenSearch Service クラスターが黄色の状態になることがあります。内部ハードウェアの問題が原因でクラスター内のノードに障害が発生した場合、既存のノードは新しいノードで置き換えられます。この置換は、OpenSearch Service の自動検出機能です。しかし、障害のあるノードのレプリカシャードが未割り当てのままになる場合があります。以前に使用したリソースが解放されなかった場合、レプリカシャードは未割り当てのままになります。この間、リーダーノードはレプリカシャードの割り当てを 5 回試みます。リーダーノードがレプリカシャードの割り当てに 5 回失敗すると、クラスターのヘルスステータスが赤または黄色の状態になります。

注意: 割り当てられていないシャードを診断するには、クラスター割り当ての説明 (cluster allocation explain) API を実行することがベストプラクティスです。詳細については、Elasticsearch ウェブサイトの「Cluster allocation explain API」を参照してください。

クラスターを黄色のステータスにしているインデックスを特定するには、次のクエリを使用します。

GET /_cat/indices?v&health=yellow

その後、次のクエリを使用して、クラスターの未割り当てシャードの根本原因を特定します。

GET /_cluster/allocation/explain

注: cluster reroute API は OpenSearch Service で認識されません。サポートされる API オペレーションの詳細については、API の重要な相違点を参照してください。

最大再試行設定を増やす

OpenSearch Service クラスターを緑色の状態に戻すには、黄色い各インデックスの最大再試行回数を増やします。

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

この API コールを実行すると、リーダーノードはクラスター上の指定されたインデックスのシャードの割り当てを再試行します。

注意: 最大再試行設定を増やしてもシャードが自動的に割り当てられるとは限りません。シャードを手動で割り当てなければならない場合があります。

レプリカの数を更新する

重要: この方法は、OpenSearch Service クラスターの負荷が高い場合には使用しないでください。インデックスからすべてのレプリカを削除する場合、インデックスはプライマリシャードにのみ依存する必要があります。ノードで障害が発生するとプライマリシャードは未割り当てのままになり、クラスターが赤いクラスターのステータスになる可能性があります。

レプリカの数を変更するには、次の手順に従います。

1.    影響を受けるインデックスの数が 0 になるようレプリカを削除します。

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

2.    レプリカの数を目的の数に変更します。

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