Amazon Elasticsearch Service
開発者ガイド (API バージョン 2015-01-01)

AWS サービスエラー処理

このセクションでは、一般的な AWS サービスエラーへの対応方法について説明します。AWS サポートに問い合わせる前に、このセクションの情報を参照してください。

障害が発生したクラスターノード

Amazon EC2 インスタンスでは、予期しない終了と再起動が発生する場合があります。通常、Amazon ES はノードを再起動します。 ただし、Elasticsearch クラスターの 1 つ以上のノードが失敗した状態のままであることがあります。

この状態を確認するには、Amazon ES コンソールでドメインダッシュボードを開きます。[Monitoring] タブを選択し、[Nodes] メトリクスを選択します。報告されるノード数がクラスターに設定した数より小さいかどうかを調べます。メトリクスが、1 つ以上のノードが 1 日以上ダウンしていることを示している場合は、AWS サポートまでお問い合わせください。

CloudWatch アラームを設定して、この問題が発生したときに通知を受けることもできます。

注記

ノードメトリクスは、クラスター設定の変更中およびサービスの定期的なメンテナンス中は、正確ではありません。 この動作は想定されるものです。メトリクスは、すぐに正しい数のクラスターノードを報告します。詳細については、「設定変更について」を参照してください。

クラスターを予期しないノードの終了と再起動から保護するには、Amazon ES ドメインで各インデックスに少なくとも 1 つのレプリカを作成します。

赤のクラスター状態

赤のクラスター状態は、少なくとも 1 つのプライマリシャードとそのレプリカがノードに割り当てられていないことを意味します。赤のクラスター状態が保持されている間は、正常なインデックスのものであっても、Amazon ES によって自動スナップショットの作成が中止されます。

赤のクラスター状態の最も一般的な原因は、クラスターノードの障害と、継続的な高負荷による Elasticsearch プロセスのクラッシュです。

注記

Amazon ES では、毎日の自動スナップショットが最大 14 個、30 日間保存されるため、赤のクラスター状態が 16 日超存続した場合、データが永続的に損失する可能性があります。Amazon ES ドメインで赤のクラスター状態になると、自分で問題に対処するか、サポートチームに支援を依頼するかを選ぶよう、AWS サポート から求められる場合があります。CloudWatch アラームを設定して、赤のクラスター状態が発生したときに通知を受けることもできます。

最終的に、赤のシャードにより赤のクラスターが発生し、赤のインデックスにより赤のシャードが発生します。赤のクラスター状態の原因となっているインデックスを識別するため、Elasticsearch にはいくつかの有用な API が用意されています。

  • GET /_cluster/allocation/explain は、見つかった最初の割り当てられていないシャードを選択し、そのシャードをノードに割り当てることができない理由について説明します。

    { "index": "test4", "shard": 0, "primary": true, "current_state": "unassigned", "can_allocate": "no", "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes" }
  • GET /_cat/indices?v はヘルスステータス、ドキュメントの数、および各インデックスのディスク使用量を表示します。

    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open test1 30h1EiMvS5uAFr2t5CEVoQ 5 0 820 0 14mb 14mb green open test2 sdIxs_WDT56afFGu5KPbFQ 1 0 0 0 233b 233b green open test3 GGRZp_TBRZuSaZpAGk2pmw 1 1 2 0 14.7kb 7.3kb red open test4 BJxfAErbTtu5HBjIXJV_7A 1 0 green open test5 _8C6MIXOSxCqVYicH3jsEA 1 0 7 0 24.3kb 24.3kb

赤のインデックスを削除することが、赤のクラスター状態を修正するための最速の方法です。赤のクラスター状態の理由によっては、Amazon ES ドメインをスケールし、より大きなインスタンスタイプ、より多くのインスタンス、またはより EBS ベースのストレージを使用して、問題のあるインデックスの再作成を試みることができます。

問題のあるインデックスを削除することが可能でない場合、スナップショットを復元する、インデックスからドキュメントを削除する、インデックスの設定を変更する、レプリカの数を減らす、または他のインデックスを削除してディスク領域を解放することができます。重要なステップは、Amazon ES ドメインを再設定する前に、赤のクラスター状態を解決することです。赤のクラスター状態のドメインを再設定すると、問題が複雑化し、状態を解決するまで、設定状態が処理中のままドメインがスタックする可能性があります。

処理の継続的な高負荷からの復旧

赤のクラスター状態がデータノードの処理の継続的な高負荷によるものであるかどうかを判断するには、次のクラスターメトリクスをモニタリングします。

関連するメトリクス 説明 復旧
JVMMemoryPressure

クラスター内のすべてのデータノードで使用する Java ヒープのパーセンテージを指定します。このメトリックスの [最大] の統計を表示し、Java ガベージコレクターが十分なメモリの回収に失敗したことで生じる少量ずつのメモリプレッシャーを検出します。このパターンは通常、複雑なクエリまたは大きいデータフィールドが原因です。

75% のメモリ使用で、Elasticsearch はコンカレントマークスイープ (CMS) ガベージコレクターをトリガーし、他のプロセスと共に一時停止と中断を最小限に抑えます。CMS が必要なメモリの回収に失敗し、使用量が 75% を超えた場合、Elasticsearch は、メモリ不足エラーを防ぐ目的で、十分なメモリを解放するために他のプロセスの停止または速度を低下する別のガベージ収集アルゴリズムをトリガーします。

95% のメモリ使用量で Elasticsearch は、メモリを割り当てるためにプロセスを強制終了します。これによって重要なプロセスが強制終了され、クラスターの 1 つ以上のノードがダウンすることがあります。

_nodes/stats/jvm API は、JVM 統計の有用な要約、メモリプールの使用量、およびガベージコレクションの情報を提供します。

GET elasticsearch_domain_endpoint/_nodes/stats/jvm?pretty

JVM のメモリ サーキットブレーカーを設定します。 詳細については、「JVM OutOfMemoryError」を参照してください。

問題が解決しない場合は、不要なインデックスを削除する、ドメインへのリクエストの数または複雑性を減少する、インスタンスを追加する、あるいはより大きなインスタンスタイプを使用します。

CPUUtilization クラスター内のデータノードで使用する CPU リソースのパーセンテージを指定します。このメトリクスの [Maximum] の統計を表示し、使用量の多い継続的なパターンを探します。 データノードを追加するか、既存のデータノードのインスタンスタイプのサイズを大きくします。詳細については、「Amazon ES ドメインの設定」を参照してください。
ノード クラスターのノード数の指定。このメトリクスの [Minimum] の統計を表示します。 サービスがクラスターの新しいインスタンス群をデプロイすると、この値が変動します。 データノードを追加します。詳細については、「Amazon ES ドメインの設定」を参照してください。

黄色のクラスター状態

黄色のクラスター状態は、すべてのインデックスのプライマリシャードがクラスター内のノードに割り当てられ、少なくとも 1 つのインデックスのレプリカシャードは割り当てられていないことを意味します。単一ノードクラスターでは、Amazon ES がレプリカを割り当てることができる他のノードがないため、常に黄色のクラスター状態で初期化されることに注意してください。緑のクラスター状態を確保するには、ノード数を増やします。詳細については、「Amazon ES ドメインのサイジング」および「Amazon ES ドメインの設定」を参照してください。

ClusterBlockException

以下の理由により、ClusterBlockException エラーを受け取る場合があります。

使用可能なストレージ領域の不足

シャードの移動に必要なストレージ領域を持つノードがなければ、それ以降はドキュメントの追加やインデックスの作成などの基本的な書き込み操作が失敗する可能性があります。ストレージ要件の計算 は、Amazon ES によるディスク容量の使用の概要を提供します。

問題を回避するには、Amazon ES コンソールで FreeStorageSpace メトリクスをモニタリングし、FreeStorageSpace がしきい値を下回るとトリガーされる CloudWatch アラームを作成します。GET /_cat/allocation?v は、シャードの割り当てとディスク使用量の有用な概要も提供します。ストレージ容量の不足に関連する問題を解決するには、Amazon ES ドメインをスケールし、より大きなインスタンスタイプ、より多くのインスタンス、またはより EBS ベースのストレージを使用します。手順については、「Amazon ES ドメインの設定」を参照してください。

メモリ不足によるディスクのブロック

[JVMMemoryPressure] メトリクスが 30 分の間 92% を超えると、クラスターが赤の状態に到達しないように、Amazon ES は保護メカニズムをトリガーし、すべての書き込み操作をブロックします。保護が有効な状態では、書き込みオペレーションは ClusterBlockException エラーで失敗し、新しいインデックスは作成できず IndexCreateBlockException エラーがスローされます。

JVMMemoryPressure メトリクスが 88% 以下に戻った状態が 5 分間続くと、保護が無効になり、クラスターへの書き込み操作はブロックされません。

JVM OutOfMemoryError

JVM の OutOfMemoryError は、一般的に次のいずれかの JVM サーキットブレーカーに到達したことを意味します。

サーキットブレーカー 説明 クラスター設定プロパティ
親ブレーカー すべてのサーキットブレーカーで JVM ヒープメモリのパーセンテージの合計に許可されます。 デフォルト値は 70% です。 indices.breaker.total.limit
フィールド データ ブレーカー JVM ヒープメモリのパーセンテージは、メモリに単一のデータフィールドをロードすることを許可します。 デフォルト値は 60% です。 大きいフィールドを使用してデータをアップロードする場合は、この上限を引き上げることをお勧めします。 indices.breaker.fielddata.limit
リクエストブレーカー JVM ヒープメモリのパーセンテージは、サービスリクエストに応答するために使用されるデータ構造に許可されます。 デフォルト値は 40% です。 サービスリクエストが集計の計算を含む場合は、この上限を引き上げることをお勧めします。 indices.breaker.request.limit