はじめに
毎度のことながら、備忘録につきとりとめはないです。
(2019.03.18 ちょっと追記)
Zen2
Elasticsearch 7.0からZenにかわって搭載されるDiscoveryモジュールです。
以降は、こちらに記載されていることを試しつつ書いたものです。
Zenと比べて、ちょいちょい設定とか動きが違います。
詳しいところは・・・オンラインマニュアルか、公式ブログで公開される情報を確認。
起動時の設定チェック
若干うざいですが、起動時に設定が足りてないと怒られます。
ここみて設定しましょう。
Quorum baseの決定
Zenでは、discovery.zen.minimum_master_nodes
に最低マスターノード数を指定していました。
この設定はZen2では無くなり、現在のマスターノード数に応じて自動で定足数を決定します。
たとえば5台のマスターノード(データノードを兼務してても良い)があるとします。このとき、スプリットブレインが発生しないようにするには、最低3ノードが必要なので、定足数は3となります。
Zen2環境では、同時に2ノードまでは落ちてもそのまま動き続けますが、3ノード落ちるとその時点でクラスタの動作が停止します(6.xまでと同じように、discovery.zen.no_master_block
で動作が変わります(7.0では試してないけど))。
⇒名称が変わってました。cluster.no_master_block
です。
定足数の自動削減設定
デフォルトでは、定足数は現在稼働しているマスターノード数に基づいて決定されます。
先ほどのように5ノードで起動した後で3ノードに減った場合は、定足数は2になります。
この動作は、elasticsearch.ymlにcluster.auto_shrink_voting_configuration
を設定することで変更できます。
false
にした場合は、5ノードから3ノードに減った後でも定足数は3のままとなります。従って、この後1ノードでも落ちるとクラスタの動作は停止します。
Voting Configuration
定足数は、マスターノードのうち投票権を持つノード数が影響してきます。
明示的にマスターノードから投票権を削除するには、Voting configuration exclusions API(長い!)を使用します。
たとえば5台(名前はnode-1~node-5とします)のマスターノードがあるとします。
このとき、node-4とnode-5から投票権を削除します。
POST /_cluster/voting_config_exclusions/node-4
POST /_cluster/voting_config_exclusions/node-5
この状態で、node-3~node-5を停止した場合、通常であればクラスタの動作ができなくなるところが、問題なく動作かのうとなります。これは、2台の投票権が削除されたことにより定足数が3になるためです。
現在どのノードが投票権を削除されているかを確認するには、以下のようにします。
GET /_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions
GET /_cluster/state?filter_path=metadata.cluster_coordination
とだけすると、現在のマスターノードも表示されるようになります。
投票権を戻す場合は、
DELETE /_cluster/voting_config_exclusions
をします。
が、これ実行した後で状況を確認すると、リストに乗ったままなんですよねぇ・・・
DELETE /_cluster/voting_config_exclusins?wait_for_removal=false
にすると、すぐに消えます。
ちょっとわかりにくくなりますが、
1. 最初に5ノード立ち上げる
2. 2ノードから投票権を削除する
3. 3ノード落とす
4. 削除した投票権を戻す
とした場合、投票権を持つノードは3台のままで2ノードが動いているので、そのまま動作を続けます。これはcluster.auto_shrink_voting_configuration
の設定に依存しません。
その他
設定項目はいろいろあります。
GAが楽しみですね~
追記
2019.03.18追記
elasticsearch-nodeなるツールが追加されているらしい。
少なくとも1台のMaster-eligible nodeがあるときに、その1台を使って unsafe-bootstrap で新しいクラスタを起動。当たらいクラスタに detach-cluster でノードを移動。