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