ElasticSearchのクラスタ形成の理屈をまとめておきます
そもそも論で、中央サーバが必要です
そもそも分散システムと言っても、中央サーバのようなものがないシステムはありません。 理論上は自力でつながりあっていく真のP2Pサーバ群とか考えられますが、 すくなくとも実運用されているものには存在しないと思います。
中央サーバの指定が cluster.initial_master_nodes
cluster.initial_master_nodes
の定義が必要です。
そして分散システムなので最低3台分を書く。
これが中央サーバ群で、 クラスタの初期化が行わると、これらのサーバに管理情報が書きこまれます。 この中央サーバ群は変更できないので、きちんと設計を考えておく必要があります。 壊れた場合、 残りのサーバ群でなんとかしますが、壊れたサーバを同じ名前とIPで復活させなければいけません
これら中央サーバ群がクラスタの管理情報をもってくれるので、 このあとは、(マスター以外のデータノード他)のクラスタへの追加/削除は自由自在となります。
ドキュメントにある、ここは大事なところですね。 そして、この下に間違ってシングルノードを作成した場合は、データ領域を削除して再構成しろと書いてあります
If any of the following settings are configured then auto-bootstrapping will not take place, and you must configure cluster.initial_master_nodes as described in the section on cluster bootstrapping:
discovery.seed_providers
discovery.seed_hosts
cluster.initial_master_nodes
ポート 9200/tcp 9300/tcp を開く
サーバに問い合わせは 9200/tcp で行います。検索サーバとして listen しているポート。
9300/tcp は ElasticSearch ノード間の通信で使っているポートです。 クラスタを構成する際には、ここで通信しています。
そういうわけで 9200/tcp 9300/tcp は空けておかないといけません。 OSのデフォルトでフィルタが動いているなら、きちんと空けないとダメ
クラスタの区別
クラスタの名前を定義できるので、この名前でクラスタを区別できます。 たあだし、デフォルトは ElasticSearch らしいので、必ず変更しなければなりません。 そうしないと、同じネットワークで、だれかが間違ってElasticSearchを起動したらクラスタに加入してしまいますから;-)
複数のクラスタを作れるか?
次のようにすれば、マスターノード群が同じでも作れるはずです。
- マスターノード群は同じとして
- クラスタの名前
- cluaster-1
- cluaster-2
- ポート番号
- cluaster-1は 9200 9300
- cluaster-2は 19200 19300
- データの保存場所
- cluaster-1は /var/lib/elasticsearch-1
- cluaster-2は /var/lib/elasticsearch-2
Java runtimeにはメモリ32GBくらいを割り当てるべきらしいです。 よって、メモリは96-128GBほしいところですが、64GBしか刺さらないサーバの場合は
- クラスタ1 24GB
- クラスタ2 24GB
- のこり(OS) 24GB でしょうかね?