Amazon Elasticsearch Service での HTTP 503 Service Unavailable エラーを防ぐにはどうすればよいですか ?
最終更新日: 2019 年 8 月 23 日
Amazon Elasticsearch Service (Amazon ES) ドメインにクエリを送ると、HTTP 503 Service Unavailable エラーが発生します。
注: このエラーには多数の原因が考えられます。この記事では、根本原因のうち一般的なものと、その解決策について説明します。
簡単な説明
ロードバランサーは各 Amazon ES ドメインの前に配置されています。受信トラフィックはロードバランサーによりデータノードへ配信されます。HTTP 503 エラーは、クラスター内の 1 つ以上のデータノードが過負荷状態にあり、そのノードにはリクエストを処理するための十分な容量がないことを示します。多くの場合この状況は、過剰な着信トラフィックや負荷の大きなクエリによって発生します。
ヒント: RequestCount Amazon CloudWatch メトリクスを使用すると 、HTTP レスポンスコードを追跡できます。
解決方法
HTTP 503 エラーの解決には、次のいずれかを実行してください。
より多くのコンピューティングリソースをプロビジョニングする
- インスタンスをより大きなものに変更してドメインをスケールアップするか、クラスターにノードを追加してスケールアウトします。詳しくは、「Amazon ES ドメインの設定」をご参照ください。
- ユースケースに適したインスタンスタイプを使用していることを確認します。詳細については、「インスタンスタイプとテストの選択」をご参照ください。
クエリによるリソースの使用率を減らす
- シャードとクラスターのアーキテクチャに関するベストプラクティスに従っていることを確認します 。クラスターの設計に不備がある場合など、可能なすべてのリソースを使用できないことがあります。一部のノードがアイドル状態になってしまうと、他のノードが過負荷になり得ます。過負荷のノードからのドキュメントは、Elasticsearch により読み取られません。
- この場合、ドメインに対し同時に送られるリクエストの総数を減らすようにます。
- クエリの範囲を小さくします。たとえば、時間軸のクエリを実行する場合に日付範囲を縮小したり、Kibana ではインデックスパターンを設定し結果をフィルタリングすることが考えられます。
- 大きなインデックスに対して select * クエリを実行しないようにします。代わりに、フィルタリングによりインデックスの一部だけをクエリしたり、 可能な限り少ない検索フィールドで検索を行います。
- インデックスを再作成し、シャードの数を減らします。Elasticsearch クラスター内のシャードが多いほど、クーリエフェッチエラーが発生する可能性が高くなります。各シャードには独自のリソース割り当てとオーバーヘッドがあるため、大量のシャードはクラスターに負担をかけます。クラスターのシャード数を減らす方法については、 「Amazon Elasticsearch Service ドメインが [処理中] 状態のまま長時間変わりません」をご参照ください。