はじめに
keepalivedがvrrpで冗長化を行う際にkeepalived.conf
の中で設定する、 state
と priority
、あとnopreempt
について挙動を調べてみました。
こちらに各ノードでstateの設定を行った際に発生する挙動をまとめて頂いていますが、これとpriorityの関係がよくわからなかったのがきっかけです。
http://dev.tapweb.co.jp/2010/12/294
keepalivedのバージョンは以下です。
Keepalived v1.2.7 (09/26,2012)
それぞれの値の意味について
まずはおおまかな意味から。
STATE
[MASTER|BACKUP]
keepalived起動時に、どちらのstateで起動しようとするか。ただし、一旦起動してもすぐにコンバージョンが行われ、結果的には priority
の優先順序に従う。
priority
(数値)
より値が高いものがMASTERに選出される。
nopreempt
よりpriorityの高いノードがVRRPに参加した時に、MASTER/BACKUPの状態を維持するかどうか。このオプションを設定していると、状態を維持し続ける。設定しないと、より高いpriorityのノードへMASTER stateが移る。state設定をBACKUP
にしないと効果がない。
それぞれの値を併用した時の挙動について
全部のパターンを網羅できないので、おおまかに記載します。
Server1: MASTER 100 , Server2: BACKUP 50
操作 | Server1 | Server2 |
---|---|---|
server1:keepalived起動 | MASTER | (DOWN) |
server2:keepalived起動 | MASTER | BACKUP |
server1:keepalived停止 | (DOWN) | MASTER |
server1:keepalived起動 | MASTER | BACKUP |
よりpriorityの高いServer1が参加した時に、MASTERが移動しています。
Server1: BACKUP 100 , Server2: BACKUP 50
どちらのサーバもBACKUP設定に変更します。
操作 | Server1 | Server2 |
---|---|---|
server1:keepalived起動 | MASTER | (DOWN) |
server2:keepalived起動 | MASTER | BACKUP |
server1:keepalived停止 | (DOWN) | MASTER |
server1:keepalived起動 | MASTER | BACKUP |
こちらも同様。よりpriorityの高いサーバ側にMASTERが移動します。
Server1: BACKUP 100 nopreempt, Server2: BACKUP 50 nopreempt
nopreempt
オプションを追加します。
操作 | Server1 | Server2 |
---|---|---|
server1:keepalived起動 | MASTER | (DOWN) |
server2:keepalived起動 | MASTER | BACKUP |
server1:keepalived停止 | (DOWN) | MASTER |
server1:keepalived起動 | BACKUP | MASTER |
前回と違い、サーバが復旧してもMASTER状態だったノードは状態を維持し続けます。
ここまでが概ね通常利用するパターンでしょうか。
Server1: MASTER 50 , Server2: BACKUP 100
普通はやらないようなパターンです。
MASTERの方がpriorityが低く、BACKUPの方を高く設定しています。
操作 | Server1 | Server2 |
---|---|---|
server1:keepalived起動 | MASTER | (DOWN) |
server2:keepalived起動 | BACKUP | MASTER |
server1:keepalived停止 | (DOWN) | MASTER |
server1:keepalived起動 | BACKUP | MASTER |
よりpriorityの高いサーバが参加した時にMASTERが移動します。その後、MASTER設定のサーバ1が参加しても、サーバ1はすぐにBACKUP stateに移行します。
conf上のstate MASTER設定は意味があるのか?
こうして見ると、state設定がMASTERだったとしても、結局priorityで判断されるので、果たしてstate MASTER
は意味があるのだろうか?と思えてきます。
と思ったら、man 5 keepalived.conf
にこんな記述が。
Initial state, MASTER|BACKUP
As soon as the other machine(s) come up,
an election will be held and the machine
with the highest "priority" will become MASTER.
So the entry here doesn’t matter a whole lot.
そんなに重要じゃないよ、と。
ちなみに、同一priorityの場合は先にkeepalivedを起動していた方がMASTERに選出されます。