次のアーキテクチャを持つ AWS で実行されている Web アプリケーションがあります。
- 2 つのデータ ノードを持つ 1 つの ElasticSeach クラスター
- ウェブサーバーの 1 つの自動スケーリング負荷分散クラスター
Elasticsearch は巧妙な内部負荷分散を行うため、すべての Web サーバーをデータ ノードの 1 つに向けることができます。しかし、これにより単一障害点が作成されます。そのノードがダウンすると、クエリ結果が得られなくなります。
これまでの私の解決策は、elasticsearch を各 Web サーバーで非データ ノードとして実行することでした。各 Web サーバーは、そのローカルの Elasticsearch ノードにクエリを実行し、次に、その要求をデータ ノードの 1 つにファームします。これはelasticsearch Webサイトで提案されているアプローチのようです
これは、データ ノードの 1 つに何らかの障害が発生した場合でも、検索クエリを提供する機能が失われないという点で優れています。ただし、これは、elasticsearch が各 Web サーバーのリソースを使用していることを意味します。Elastic Beanstalk を使用するように移行する場合 (私はこれをやりたいと思っています)、elasticsearch を Web インスタンスにインストールする方法が必要になります。編集:私はこれで成功しましたが、環境ごとに異なる構成を指定する方法をまだ理解していません。
各Webサーバーでelasticsearchを実行せずに単一障害点を回避する別の方法はありますか?
データ ノードの前にロード バランサーを使用して Web サーバーからのクエリを処理することも考えましたが、これは、VPC を設定してアクセスを制限することなく、クラスターをパブリック アクセスに開放することも意味します。
私が見逃しているより簡単な解決策はありますか?