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 でしょうかね?

リファレンス