Elasticsearchノードの役割


#### １．はじめに
この記事では、Elasticsearch Clusterの各ノードに設定するロールについて纏めることを目的とします。
すべてのノードを説明するとキリがないので、Master Node、Data Node、Ingest Node、Coordinating nodeに絞ります。


#### ２．デフォルト設定

　elasticsearch.ymlのnode.rolesを設定することで、Elasticsearchノードの役割（ロール）を設定することができます。もし明示的に設定しない場合は、Elasticsearchは***デフォルトで以下の役割***を担うことになります。小規模のElasticsearch Clusterであれば、特に設定する必要はないが***規模が大きいElasticsearch Clusterを構築する場合は***masterとdataは分けたほうが一般的です。

```bash:node.rolesを設定しない場合に設定されるロール
    master
    data
    data_content
    data_hot
    data_warm
    data_cold
    data_frozen
    ingest
    ml
    remote_cluster_client
    transform
```


#### ３．Master-eligible node

##### Master nodeとは
 クラスタをコントロール（管理・制御）するためのノードです。Elasticsearch Clusterを構築するにあたっては***少なくとも３つのMaster-eligible nodeが***必要となります。２つの場合はsplit brainの問題が発生するため、クラスタとして機能することができません。Master-eligible nodeのなかから、１台が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を設定します。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/482612/143e5e18-e734-330a-1f84-2b91a6c85365.png)

##### Dedicated master-eligible node
　masterの役割しか持たないElasticsearchノードを***Dedicated master-eligible node***と呼びます。Elasticsearch Clusterの状態を良好に保つには、選出されたMaster nodeが負荷がかかっていないことはとても重要です。従って、大規模なElasticsearch Clusterを構築する場合は、master-eligible nodeには他の機能を担わせないようにすることが（Dedicated master-eligible nodeに設定することが）重要です。


#### ３．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）。


#### ４．Ingest Node
　Elasticsearchでのpre-processing pipeline（Indexingを行う前にDocumentの加工整形を行う処理）を行うノードです。大規模なElasticsearch Clusterの場合は、master nodeとData nodeと切り離して、Ingest単体のノードとして構築することが推奨されます。


#### ５．Coordinating Node

SearchやIndexingのリクエストを受け付けるノードです。すべてのノードはCoordinating Nodeの役割を持っています。Disableすることはできません。



#### ６．その他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で構築する場合のインスタンスタイプのお勧めは、[ここ](https://www.elastic.co/guide/en/cloud/current/ec-default-provider-configurations.html)に記載があります。



- [各ノードの役割](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html)
- [Elasticsearch Clusterのノード数の最低条件](https://www.elastic.co/guide/en/elasticsearch/reference/current/high-availability-cluster-small-clusters.html)
- [split barainの開設](https://www.creationline.com/blog/15831)
- [クラスタ障害時の挙動が分かり易い資料](https://www.slideshare.net/snuffkin/elasticsearch-107454226)
- [大規模クラスタの場合に、MasternodeをDedicatedにする理由](https://www.instaclustr.com/support/documentation/elasticsearch/getting-started-with-elasticsearch/creating-a-elasticsearch-cluster-with-dedicated-master/#)