2017年3月5日日曜日

Elasticsearch5.1 のクラスタ(unicast)に動的にノードを追加する

Elasticsearch5.xの File-Based Discovery Plugin を使用すると、クラスタ構築時にunicast で指定するホスト名(またはIPアドレス)を別ファイル(例: config/discovery-file/unicast_hosts.txt)で管理でるようです。
また、この別ファイルの変更は、動的に反映されるようなので、試してみました。

検証で使用した環境は、「Docker で Elasticsearch5.1 と head を試す」で作成したElasticsearch5.1です。(Docker)


プラグインのインストール


File-Based Discovery Plugin を以下のようにしてインストールします。
root@c40d8d6e3c73:/usr/share/elasticsearch# bin/elasticsearch-plugin install discovery-file
-> Downloading discovery-file from elastic
[=================================================] 100%  
-> Installed discovery-file

1台でクラスタ


まず、1台でクラスタを起動してみます。
File-Based Discovery Plugin を使用するには、elasticsearch.yml に discovery.zen.hosts_provider を追加します。discovery.zen.ping.unicast.hosts を使用していた場合はコメントアウトします。
# クラスタのノードを指定
#discovery.zen.ping.unicast.hosts: ["elasticsearch_es51a_1","elasticsearch_es51b_1","elasticsearch_es51b_2"]
discovery.zen.hosts_provider: file
File-Based Discovery Plugin が参照するファイルは $CONFIG_DIR/discovery-file/unicast_hosts.txt です。
unicast_hosts.txt にホスト名(またはIPアドレス)を記載します。
9300ポート使用していれば、ポートは省略できます。ポートを指定したい場合は、"hostname:port" 形式で記述します。
# cat config/discovery-file/unicast_hosts.txt
elasticsearch_es51a_1
これで、Elasticsearch を起動して、head で見ると下図のとおり。


ログには以下のように表示されます。
[2017-03-05T02:41:56,219][INFO ][o.e.p.PluginsService     ] [c40d8d6e3c73] loaded plugin [discovery-file]
[2017-03-05T02:41:56,281][WARN ][o.e.d.d.f.FileBasedDiscoveryPlugin] Using discovery.type setting to set hosts provider is deprecated. Set "discovery.zen.hosts_provider: file" instead
[2017-03-05T02:41:56,682][WARN ][o.e.d.s.g.GroovyScriptEngineService] [groovy] scripts are deprecated, use [painless] scripts instead
[2017-03-05T02:42:01,025][INFO ][o.e.n.Node               ] [c40d8d6e3c73] initialized
[2017-03-05T02:42:01,026][INFO ][o.e.n.Node               ] [c40d8d6e3c73] starting ...
[2017-03-05T02:42:01,293][INFO ][o.e.t.TransportService   ] [c40d8d6e3c73] publish_address {172.18.0.3:9300}, bound_addresses {[::]:9300}
[2017-03-05T02:42:01,304][INFO ][o.e.b.BootstrapCheck     ] [c40d8d6e3c73] bound or publishing to a non-loopback or non-link-local address, enforcing bootstrap checks

クラスタ稼働中に2台目を追加


クラスタを起動したまま、1台目のunicast-hosts.txt にノードを追加します。
再起動はしません。
# cat config/discovery-file/unicast_hosts.txt
elasticsearch_es51a_1
elasticsearch_es51b_1
2台目のノードも、1台目と同じ設定にしてから起動します。
head で見ると、下図のように表示されます。