こんにちは、ちゃりおです。
AWSのElasticSearchを使っているのですが、たまにトラブルが発生していました。
(データノードに障害あって一時的にダウンタイム発生など)
色々調べているうちに、運用している環境が本番で推奨される構成
を満たしていないのがわかってきました。
今回は、AWSのドキュメントから本番で使うElasticSearchの推奨構成について調べてみました。
推奨構成
公式ドキュメントに詳細が載っているので、最低限知っておきたいことを書きます。
データノード × 3
専用マスターノード × 3
データノード
データノードはデータを保持し、CRUD、検索、集計などのデータ関連の操作を実行します。
ElasticSearch Node
必要なノードの数は実際にテストしながら決めることになると思います。
冗長化の観点からは3つはあったほうが良さそうです。
少なくとも 3 つのノードを使用する
意図しないネットワークのパーティション化 (スプリットブレイン) を回避するには、少なくとも 3 つのノードを使用します。データ損失の可能性を回避するには、インデックスごとに少なくとも 1 つのレプリカがあることを確認します。(デフォルトでは、各インデックスに 1 つのレプリカがあります。)
インスタンスサイズは、Mクラス以上が推奨されています。
Amazon Elasticsearch Service ドメインの耐障害性を高めるにはどうすればよいですか?
Get Started with Amazon Elasticsearch Service: How Many Data Instances Do I Need?
専用マスターノード
Amazon Elasticsearch Service では、クラスターの安定性を向上するために専用マスターノードを使用します。専用マスターノードではクラスター管理タスクを実行しますが、データは保持せず、データのアップロードリクエストにも応答しません。このように、クラスター管理タスクをオフロードすると、ドメインの安定性が向上します。
本番稼働用 Amazon ES ドメインには、専用マスターノードを 3 つ割り当てることをお勧めします。
専用マスターノードは、クラスターの安全性を高めます。
ドメインの変更時に、BlueGreenデプロイメントが行われるのですが
この際に専用マスターノードがないとデータノードの特定のデータノードの負荷があがります。
専用マスターノードがあるとドメインの変更時に、専用マスターノードで処理されるのでデータノードに
負荷を与えることなくドメインの変更を行うことができます。
クォーラムの関係で、冗長化には最低でも3台必要になります。
最小構成で(インスタンス数1~10)、インスタンスタイプは「c5.large.elasticsearch」が推奨されています。
料金
本番推奨最小構成の場合の月額。(2020/02/11時点)
EBSの料金はインスタンスの料金に比べて、安いので割愛します。
データノード: m5.large × 3 $306.72
専用マスターノード: c5.large × 3 $270
合計: $576.72
約6万くらいですね。
まとめ
AWSのドキュメントを参考にElasticSearchの推奨構成について調べました。
本番でElasticSearchを運用する際の参考になればと思います。
ElasticSearchについて理解が浅いので、公式ドキュメントで勉強しようと思います。