1.はじめに
この記事では、Elasticsearch Clusterの各ノードに設定するロールについて纏めることを目的とします。
すべてのノードを説明するとキリがないので、Master Node、Data Node、Ingest Node、Coordinating nodeに絞ります。
2.デフォルト設定
elasticsearch.ymlのnode.rolesを設定することで、Elasticsearchノードの役割(ロール)を設定することができます。もし明示的に設定しない場合は、Elasticsearchはデフォルトで以下の役割を担うことになります。小規模のElasticsearch Clusterであれば、特に設定する必要はないが規模が大きいElasticsearch Clusterを構築する場合はmasterとdataは分けたほうが一般的です。
master
data
data_content
data_hot
data_warm
data_cold
data_frozen
ingest
ml
remote_cluster_client
transform
3.Master-eligible node
Master nodeとは
クラスタをコントロール(管理・制御)するためのノードです。Elasticsearch Clusterを構築するにあたっては少なくとも3つのMaster-eligible nodeが必要となります。2つの場合はsplit brainの問題が発生するため、クラスタとして機能することができません。Master-eligible nodeのなかから、1台がmaster nodeとして選出され、残りのMaster-eligible nodeはmaster node障害発生に備えたノードとして稼働します。
Master nodeのヘルスチェック
Master nodeは周期的にElasticsearch Clusterを構成する全ノードに対してヘルスチェックを行いいます。ヘルスチェックが失敗した場合は、該当ノードは障害が発生したと判断します。
障害発生時に備えて、過半数以上のMaster-eligible nodeが確認できたときにMaster nodeになるような設定が重要となります。具体的には、discovery.zen.minimum_master_nodeにて、(Master-eligible nodeの数÷2) +1を設定します。
Dedicated master-eligible node
masterの役割しか持たないElasticsearchノードをDedicated master-eligible nodeと呼びます。Elasticsearch Clusterの状態を良好に保つには、選出されたMaster nodeが負荷がかかっていないことはとても重要です。従って、大規模なElasticsearch Clusterを構築する場合は、master-eligible nodeには他の機能を担わせないようにすることが(Dedicated master-eligible nodeに設定することが)重要です。
3.Data node
Data nodesは、IndexingされたShardを保持します。Data Nodeはデータ回りのCRUD(create Read Update Delete:Elasticsearchで言うところのserchやaggregation)を実行します。これらの実行には高いI/OやCPUが必要となりますので、高いスペックのHWリソースを適応する必要があります。
もし、multi-tier deployment architectureの概念をData nodeに持たせたい場合は、Data Nodeの役割を具体的に指示します(data_content,data_hot, data_warm, data_cold, or data_frozen)。
4.Ingest Node
Elasticsearchでのpre-processing pipeline(Indexingを行う前にDocumentの加工整形を行う処理)を行うノードです。大規模なElasticsearch Clusterの場合は、master nodeとData nodeと切り離して、Ingest単体のノードとして構築することが推奨されます。
5.Coordinating Node
SearchやIndexingのリクエストを受け付けるノードです。すべてのノードはCoordinating Nodeの役割を持っています。Disableすることはできません。
6.その他Tips
path_data(elasticsearch.yml)
Masterノード(Dedicated master-eligible nodeであったとしても)もpath.dataを設定する必要があります。Data nodeの場合は、Indexされたデータが格納されますが、Master nodeの場合はクラスタ管理用のメタデータが保存されるためです。
discovery.seed_hosts,cluster.initial_master_nodes(elasticsearch.yml)
master-eligible nodeのみを設定します。Data nodeの宛先は設定しません。
elasticsearch.hosts(kibana.yml)
HTTPリクエストを受けるノードを記載します。リクエストを受けつけるのはcoorginating nodeのため、Elasticsearch Clusterを構成するすべてのノードを記載しても問題ないと思います。
インスタンスタイプ
AWSで構築する場合のインスタンスタイプのお勧めは、ここに記載があります。