Amazon OpenSearch 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 では、クラスターがシャード割り当ての時間制限 (5,000 ミリ秒) またはその最大再試行回数 (5 回) を超えてはなりません。このエラーメッセージを解決するには、Hot ノードのインデックスに対して次のトラブルシューティング方法を使用します。
メモ: ワークロードが高い OpenSearch サービス クラスターのレプリカ数を更新する方法は当社ではお勧めしておりません。
解決策
クラスターのステータスが黄色い場合のトラブルシューティング
OpenSearch Service クラスターは、ノードまたはネットワークの障害のためにステータスが黄色になることがあります。内部のハードウェアの問題が原因でクラスター内のノードに障害が発生した場合、既存のノードが新しいノードに交換されます。置換は OpenSearch Service で自動的に検出されます。ただし、以前に使用したリソースが解放されなかった場合、障害のあるノードのレプリカシャードが割り当てられません。この間で、そのリーダーノードは、レプリカシャードの割り当てを 5 回試行します。レプリカシャードを割り当てることを 5 回試行しても成功しなかった場合、クラスターは赤色か黄色のヘルスステータスになります。
メモ: ベストプラクティスは、クラスター割り当て説明 API を (Elasticsearch Web サイト内にて) 実行し、割り当てられていないシャードを診断することです。クラスターが黄色いステータスになる場合のインデックスを特定するには、以下のクエリを実行してください。
GET /_cat/indices?v&health=yellow
次に、以下のクエリを使用して、クラスターの割り当てがないシャードの根本原因を見極めます。
GET _cluster/allocation/explain
注:クラスターリルート 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
}
}
インデックスがウォーム (Warm) ノードにある場合は、次のトラブルシューティング手順を参照してください。
ウォームインデックスが自動的に割り当てられて緑色のステータスに変わります
ウォームノードにあるインデックスの黄色いクラスターのステータスは、ドメインに十分なリソースがある場合は、自動的に緑色に戻ります。ウォームインデックスのデータは Amazon Simple Storage Service (Amazon S3) でサポートされるため、ウォームインデックスが黄色や赤色のステータスでも、データ損失のリスクはありません。
以下のシナリオでは、AWS サポートに連絡し、未割り当てのウォームインデックスを手動で再ルーティングする過程を示しています。
- 黄色いクラスターステータスは、数時間経っても緑色に戻りません。
- 「シャードがウォームインデックスのメモリ内ロックエラーを取得できません」エラーが表示されて、黄色のクラスターステータスは数時間後に緑色に戻ることはなくなります。
関連情報
Amazon OpenSearch Service クラスターのステータスが赤または黄色なのはなぜですか?
Amazon OpenSearch Service ノードがクラッシュしたのはなぜですか?
Amazon OpenSearch Service クラスターの JVM メモリ負荷が高い場合のトラブルシューティング方法について教えてください。