Amazon OpenSearch Service クラスターのステータスが赤または黄色なのはなぜですか?
Amazon OpenSearch Service クラスターが赤または黄色のクラスターステータスになっています。
簡潔な説明
OpenSearch Service コンソールの [Monitoring] タブには、クラスター内の最も健全でないインデックスのステータスが表示されます。クラスターステータスが赤色で表示されていても、クラスターがダウンしているわけではありません。このステータスは、少なくとも 1 つのプライマリシャードとそのレプリカがノードに割り当てられていないことを示します。クラスターのステータスが黄色の場合は、すべてのインデックスのプライマリシャードがクラスター内のノードに割り当てられます。ただし、1 つ以上のレプリカシャードはどのノードにも割り当てられません。
**注:**最初に赤いクラスターのステータスを解決するまでは、ドメインを再構成しないでください。赤色のステータスのクラスターにあるドメインを再設定しようとすると、その後「処理中」状態のまま停止することがあります。クラスターが「処理中」状態のままになる詳細については、「OpenSearch Service ドメインが「処理中」 状態のままになるのはなぜですか?」をご覧ください。
クラスターが赤色のステータスになる理由については、「赤色のクラスターステータス」を参照してください。
**注:**場合によっては、自動スナップショットからインデックスを削除してから復元することで、赤いクラスターステータスを解決できる場合があります。
クラスターが黄色のステータスになる理由については、「黄色のクラスターステータス」を参照してください。
**注:**黄色のクラスターのステータスが自動的に解決しない場合は、インデックス設定を更新するか、未割り当てのシャードを手動で再ルーティングすることでステータスを解決できます。黄色いクラスターのステータスが自動的に解決しない場合は、根本原因を特定してトラブルシューティングを行います。クラスタの状態が黄色くなるのを防ぐには、[クラスタヘルスのベストプラクティス]を適用してください。
解決策
シャードが割り当てられていない原因を特定する
AWS Systems Manager Automation ランブックまたは手動の curl コマンドのいずれかを使用して、シャードが割り当てられていない原因を特定できます。
自動化ランブックを使用する
AWS Systems Manager コンソールで AWSSupport-TroubleshootOpenSearchRedYellowCluster に移動します。次に、次の手順に従って自動化を設定します。
curl コマンドを使用する
割り当てられていないシャードを識別するには、次の手順を実行します。
-
未割り当てのシャードを一覧表示します:
$ curl -XGET 'domain-endpoint/_cat/shards?h=index,shard,prirep,state,unassigned.reason' | grep UNASSIGNED
-
シャードが割り当てられていない理由の詳細を取得してください。
$ curl -XGET 'domain-endpoint/_cluster/allocation/explain?pretty' -H 'Content-Type:application/json' -d'{ "index": "<index name>", "shard": <shardId>, "primary": <true or false> }
-
(オプション)クラスタステータスが赤の場合は、懸念事項のインデックスを削除し、根本原因を特定して対処してください。
curl -XDELETE 'domain-endpoint/<index names>'
-
次に、使用可能なスナップショットを特定し、スナップショットからインデックスを復元します。
curl -XGET 'domain-endpoint/_snapshot?pretty'
クラスターのステータスが黄色の場合は、原因を特定してシャードが割り当てられるようにします。
赤または黄色のクラスターステータスのトラブルシューティング
シャードに割り当てるノードが足りません
レプリカシャードは、プライマリシャードと同じノードには割り当てられません。レプリカシャードを含む単一ノードクラスターは、常に黄色のクラスターステータスで初期化されます。OpenSearch Service がレプリカを割り当てることができるノードが他にないため、単一ノードクラスターはこの方法で初期化されます。
また、OpenSearch Service バージョン 7.x 以降では、cluster.max_shards_per_node 設定にはデフォルトで「1,000」という制限があります。cluster.max_shards_per_node の設定をデフォルト値の「1000」のままにしておくことがベストプラクティスです。シャード割り当てフィルターを設定して OpenSearch Service によるシャード割り当ての方法を制御すると、フィルターで絞り込まれたノードの数が十分にないため、シャードが割り当てられない場合があります。このノード不足を防ぐには、ノード数を増やしてください。各プライマリシャードのレプリカの数がデータノードの数よりも少ないことを確認してください。レプリカシャードの数を減らすこともできます。詳細については、OpenSearch サービスドメインのサイジング と OpenSearch サービスのシャード割り当てをわかりやすく説明するを参照してください。
ディスク容量不足またはディスクスキュー
十分なディスク容量がない場合、クラスターは赤または黄色のヘルスステータスになります。OpenSearch Service がシャードを配布する前に、シャードを収容するのに十分なディスク容量が必要です。
クラスター内の各ノードで使用可能なストレージ容量を確認するには、次の構文を使用します。
$ curl domain-endpoint/_cat/allocation?v
ストレージスペースの問題の詳細については、OpenSearch Service ドメインのストレージスペース不足のトラブルシューティング方法を参照してください。
ディスクスキューが大きいと、一部のデータノードではストレージスペース不足の問題が発生する可能性もあります。シャードを再割り当てする場合、シャードの配布中にそのシャードが割り当てられなくなる可能性があります。この問題を解決するには、「OpenSearch Service クラスター内の不均一なシャード分布を再調整するにはどうすればいいですか?」を参照してください。
ディスクベースのシャード割り当て設定によっても、シャードが未割り当てになることがあります。たとえば、**cluster.routing.allocation.disk.watermark.low ** メトリックが 50 GB に設定されている場合、指定された量のディスク容量がシャード割り当てに使用できる必要があります。
現在のディスクベースのシャード割り当て設定を確認するには、次の構文を使用します。
$ curl -XGET domain-endpoint/_cluster/settings?include_defaults=true&flat_settings=true
ディスク容量の問題を解決するには、次の方法を検討してください。
- 黄色と赤のクラスターの不要なインデックスをすべて削除します。
- 赤色のクラスターの赤いインデックスを削除
- EBS ボリュームをスケールアップします。
- データノードをさらに追加します。
**注:クラスターの状態が赤色の場合は、**クラスターの設定を変更しないでください。赤色のステータスのクラスターにあるドメインを再設定しようとすると、その後「処理中」状態のまま停止することがあります。
JVM メモリ圧が高い
すべてのシャード割り当ては、CPU、ヒープスペース、およびディスクとネットワークリソースを使用します。JVM のメモリ負荷が高い状態が続くと、シャードの割り当てが失敗する可能性があります。たとえば、JVM のメモリ負荷が 95% を超えると、メモリの親回路ブレーカーがトリガーされます。その後、割り当てスレッドはキャンセルされ、シャードは未割り当てのままになります。
この問題を解決するには、まず JVM のメモリ負荷レベルを下げてください。JVM のメモリー負荷が軽減されたら、クラスターをグリーンヘルス状態に戻すために、次のヒントを参考にしてください。
- デフォルトのシャードリトライ値を「5」以上に増やします。
- レプリカシャードを非アクティブ化し、アクティブ化します。
- 未割り当てのシャードを手動で再試行してください。
リトライ値を増やすための API の例:
PUT <index-name>/_settings{ "index.allocation.max_retries" : <value> }
JVM のメモリ負荷を軽減する方法の詳細については、「OpenSearch Service クラスターの JVM メモリ負荷が高い場合のトラブルシューティング方法」を参照してください。
ノード障害
クラスターにノード障害が発生すると、ノードに割り当てられたシャードは割り当てられなくなります。特定のインデックスで使用できるレプリカシャードがない場合、1 つのノードに障害が発生した場合でも、ヘルスステータスが赤くなることがあります。2 つのレプリカシャードと 1 つのマルチ AZ 配置を使用して、ハードウェア障害によるデータ損失からクラスターを保護します。
すべてのインデックスにレプリカシャードがある場合、1 つのノードに障害が発生すると、クラスターが一時的に黄色のヘルスステータスになる可能性があります。クラスターが一時的に黄色のヘルスステータスになった場合、OpenSearch Service はノードが再び正常になるとすぐに自動的に回復します。または、OpenSearch Service は、シャードが新しいノードに割り当てられたときに回復します。
Amazon CloudWatch メトリックスをチェックして、ノード障害を確認してください。ノード障害の特定について詳しくは、「障害が発生したクラスターノード」を参照してください。
**注:**また、インデックスごとに 1 つのレプリカシャードを割り当てるか、専用のプライマリノードを使用してゾーン対応を有効にするのもベストプラクティスです。詳細については、Elasticsearch ウェブサイトの 障害への対処を参照してください。
最大リトライ回数を超えました
OpenSearch Service では、クラスターがシャード割り当ての最大時間制限 (5,000 ミリ秒) またはリトライ回数 (5) を超えてはなりません。クラスターが最大しきい値に達した場合は、シャード割り当てを手動で起動する必要があります。シャード割り当てを手動で起動するには、インデックスのレプリカシャードを非アクティブ化してから再度アクティブ化します。
クラスターの設定を変更すると、シャード割り当てが起動することもあります。シャードの割り当てについて詳しくは、Elasticsearch ウェブサイトのすべてのシャードはホームに値するを参照してください。
**注:**クラスターの負荷が高い場合、手動でシャード割り当てを起動することはベストプラクティスではありません。インデックスからすべてのレプリカを削除する場合、インデックスはプライマリシャードのみに依存する必要があります。ノードに障害が発生すると、プライマリシャードが未割り当てのままになるため、クラスターは赤色のヘルスステータスになります。
レプリカシャードを非アクティブ化するには、number_of_replicasの値を「0」に更新します。
$ curl -XPUT 'domain-endpoint/<indexname>/_settings' -H 'Content-Type: application/json' -d'{ "index" : { "number_of_replicas" : 0 } }
また、index.auto_expand_replicas の設定が「false」に設定されていることを確認してください。クラスターが緑色の状態に戻ったら、index.number_of_replicas の値を希望の値に戻して、レプリカシャードの割り当てを起動できます。シャードの割り当てが成功すると、クラスターは緑色のヘルスステータスになります。
クラスターヘルスのベストプラクティス
黄色または赤色のクラスターのステータスを解決するには、以下のベストプラクティスを検討してください。
- AutomatedSnapshotFailureに対する推奨の Amazon CloudWatch アラームを設定します。アラームを使用すると、クラスターが赤の状態になったときからインデックスを復元できるスナップショットがあることを確認できます。
- クラスターに継続的な負荷がかかっている場合は、クラスターをスケーリングしてください。クラスターのスケーリングの詳細については、「OpenSearch Service ドメインをスケールアップするにはどうすればいいですか?」を参照してください。
- ディスク使用量、JVM メモリ圧力、CPU 使用率を監視し、設定したしきい値を超えていないことを確認します。詳細については、「CloudWatch の推奨アラーム と クラスターメトリックス」を参照してください。
- ノード障害から保護するために、すべてのプライマリシャードにレプリカシャードがあることを確認してください。
詳細については、Amazon OpenSearch Service 運用のベストプラクティスを参照してください。
関連するコンテンツ
- 質問済み 5ヶ月前lg...
- AWS公式更新しました 4年前