3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Consul bootstrap

Last updated at Posted at 2016-01-19

チュートリアルに従って開発モード consul agent -dev で起動して使っている分には、特に問題ならない。

開発モードをやめて本番用の使い方を調べているときに、マニュアルで少し混乱したところが出たので、メモ。

consul agent の「 -bootstrap-expect は(3 や 5 を)設定するか、全く設定しないか」するべし。と書かれている。

例えば 3 を指定した場合は、3 node join したときに leader election が開始される。leader election 終わるまでは利用不能。3 node member があるときは、1 node fail しても一貫性は失われない。これは zookeeper でも同様。

あれ?と思ったのは「全く指定しない」ときの動作。consul agent -server -data-dir=/tmp で 3 node member join させても、一向に leader election が開始されない。

どういうことかと更に調べてみたら、-bootstrap-expect 無しの場合は手動でのbootstrapをしないといけない。

原点に立ち返ると consul は raft を実装した serf の上に構築されていて、raft の規則に従う。過半数を満たすように増減すればいいので、1 node から開始してもいいはず。

しかし同時に raft の規則では node の数が変わるときは、変わる前後の両方の総数で過半数を満たしていればよい。raftの「6 Cluster membership changes」に書かれている。

1 node (過半数は 1) で開始してしまうと、2 node (過半数は 2) に遷移できない。2 node から 3 node (過半数は 2) へは遷移できる。ということで、これはむしろ意図的な安全装置で、ノード数の変更を担保しようとしてるんだな。1 node で動かしたい場合は、-bootstrap-bootstrap-expect=1 で明示的に開始せよ、と。ノードを増やしたい場合は、すみやかにノードを追加し、bootstrap 付きで起動したノードを解除せよ、と。

あと -bootstrap-expect は leader election をいつ始めるかを決めるだけなので、クラスターが開始した後は、指定した数とは関係なく、過半数で状態を決める動作をする。

バージョンが上がるごとに使える手順が増えている様子。creationonlineの記事が分かりやすい。

話はそれるけれど、zookeeper でも同じようにノード数を変更することができる。zookeeper は設定ファイル変更しないといけないから、オペレーションは大変だけど。

全台一気に落とした時の問題?があるらしい。シグナルによっては leader election が開始しない?って、どういうことだろう?

おまけ

Dockerfile
FROM ubuntu
RUN apt-get install -y wget unzip
RUN wget https://releases.hashicorp.com/consul/0.6.3/consul_0.6.3_linux_amd64.zip -P /tmp
RUN unzip /tmp/consul_0.6.3_linux_amd64.zip -d /usr/local/bin

/etc/default/dockerDOCKER_OPTS="--iptables=false" としておくと、実験がはかどる。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?