はてなブログに投稿しましたが、こちらにも記述します。
Elasticsearchについて構築方法の前に詳細を記述したいと思います。
Elasticsearchの構成要素について
https://www.elastic.co/guide/en/elasticsearch/reference/current/_basic_concepts.html
(1)インスタンス(instance)
RHELなどのOSと同義です。
インスタンス名=ホスト名です。
(2)ノード(node)
Elasticsearchのプロセス(JVM)です。1インスタンスの中に複数のノードを起動することができます。
ノード名=プロセスを識別するためのタグです。
ノードについては別途記述します。
(3)シャード(shard)
Elasticsearchに保存されたデータ(インデックス)を分割し、分散配置したものです。
データ保護の仕組みから主データ(プライマリ)と複製データ(レプリカ)のセットで分散配置できたりします。
プライマリデータが破損した場合はレプリカデータからデータの復元が可能です。
デフォルトは5プライマリ/1レプリカです。
シャード数は600shards/nodeが推奨、多くても1,000shardsを超えないように推奨されています。
(4)インデックス(index)
図には記述していませんが、Elasticsearchに保存するデータのことをインデックスと呼びます。
(5)クラスタ(cluster)
複数のノードをまとめて1つのElasticsearchと見せるものです。
複数のノードをまとめることが出来ます。
ノードについて
ノードについてさらに詳しく解説します。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-node.html
ノードの種類
ノードは4つに分割されます。
(1)マスター適格ノード(Master-eligible node)
マスター適格ノードの中から1台マスターノード(Master node)が自動的に選出されます。
残りのマスター適格ノードはマスターノード障害に備えたノードとして存在します。
マスターノードはElasticsearchの管理・制御を実施します。
(2)データノード(Data node)
データを格納するノードで、このノードが複数存在することにより分散配置が可能となります。
さらにHot/Warmという分類があり、階層化的な?ことを出来るようです。(ここはよく理解していないです。。)
(3)クライアントノード(Ingest node)
日本語名はちょっと怪しいですが、こちらのノードはAPIを受け付ける専用のノードとなります。
そのため、管理やデータの保管などはしません。
APIの発行やKibanaからの接続先はこのノードを指定します。マスターノードやデータノードはそれぞれの役割に専念させるため、API等の受け口にしないことが推奨されています。
(4)調整ノード(Tribe node)
日本語名は適当につけました。。。複数クラスタ構成で利用するノードのようです。
まだシングルクラスタしか経験がないため、本ノードについては理解もしていません。。。。
Javaヒープサイズについて
https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
まず、物理メモリの半分以下をElasticsearchに割り当てるのが推奨です。
OSでスワップを無効にするか、コンフィグファイルや起動パラメータでスワップを無効にするのが推奨です。
最小値と最大値の記述を行うのですが、どちらも同じ値を入れるのが推奨のようです。
ノードの種類によって割り当てるメモリサイズが異なります。
(1)マスター適格ノード(Master-eligible node) 及びマスターノード(Master node)
4~8GBを割り当てます。
(2)データノード(Data node)
30GB以下の割り当てが良いようです。
(3)クライアントノード(Ingest node)
4~8GBを割り当てます。
通信ポートについて
(1)ノード間の通信
Elasticsearchの分散配置処理などはTransportという内部通信ポートでやり取りをしています。
X-Packの有償版を導入するとこの通信を暗号化することができます。
ポートは9300~9400ポートが利用され、特に指定をしないとElasticsearchがポートの割付をしてくれます。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html
(2)外部からの通信
APIやKibanaからの接続をhttpポートで受け付けます。
X-Packの有償版を導入するとこの通信を暗号化することができます。
ポートは9200~9300ポートが利用され、特に指定をしないとElasticsearchがポートの割付をしてくれます。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-http.html