やさぐれSEの技術メモ

皆が辛い思いをしないようにハマったポイントなどを書きます

Elasticsearchについて

Elasticsearchについて構築方法の前に詳細を記述したいと思います。

Elasticsearchの構成要素について

公式HP
www.elastic.co

f:id:gitya107:20180428135529p:plain

(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と見せるものです。
 複数のノードをまとめることが出来ます。

ノードについて

ノードについてさらに詳しく解説します。

公式HP
www.elastic.co

ノードの種類

ノードは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ヒープサイズについて

公式HP
www.elastic.co

まず、物理メモリの半分以下をElasticsearchに割り当てるのが推奨です。
OSでスワップを無効にするか、コンフィグファイルや起動パラメータでスワップを無効にするのが推奨です。 最小値と最大値の記述を行うのですが、どちらも同じ値を入れるのが推奨のようです。
ノードの種類によって割り当てるメモリサイズが異なります。

(1)マスター適格ノード(Master-eligible node) 及びマスターノード(Master node)
 4~8GBを割り当てます。

(2)データノード(Data node)
 30GB以下の割り当てが良いようです。

(3)クライアントノード(Ingest node)
 4~8GBを割り当てます。

通信ポートについて

Elasticsearchの通信には2種類存在します。

f:id:gitya107:20180428143528p:plain

(1)ノード間の通信
 Elasticsearchの分散配置処理などはTransportという内部通信ポートでやり取りをしています。
 X-Packの有償版を導入するとこの通信を暗号化することができます。
 ポートは9300~9400ポートが利用され、特に指定をしないとElasticsearchがポートの割付をしてくれます。

 公式HP
 www.elastic.co

(2)外部からの通信
 APIやKibanaからの接続をhttpポートで受け付けます。  X-Packの有償版を導入するとこの通信を暗号化することができます。
 ポートは9200~9300ポートが利用され、特に指定をしないとElasticsearchがポートの割付をしてくれます。
   公式HP
 www.elastic.co