2006年09月20日
keepalivedの運用ノウハウお見せします 〜 設定ファイルを同期する
keepalivedはLinuxで冗長構成を組む道具としてとても便利ですが、運用面に関する配慮に物足りなさを感じることがあります。例えばIncludeがないとかIncludeがないとかIncludeがないとか(笑)
naoyaの日記でnaoyaさんも悩んでいるようですが、設定ファイルをうまく保守する仕組みをどう作るかが導入する際の大きな鍵になると思います。今回は、DSASではどのようにして2台のkeepalivedを運用しているかを少しだけご紹介させて頂きたいと思います。
naoyaの日記でnaoyaさんも悩んでいるようですが、設定ファイルをうまく保守する仕組みをどう作るかが導入する際の大きな鍵になると思います。今回は、DSASではどのようにして2台のkeepalivedを運用しているかを少しだけご紹介させて頂きたいと思います。
運用の中で最も神経を使うのが設定変更作業でしょう。
その際の作業の流れはこんな感じになります。
1) マスターで設定ファイルを編集する
2) バックアップに設定ファイルを転送する
3) バックアップで設定を反映する
4) マスターとバックアップの差分を確認する
5) マスターで設定を反映する
具体的にはどのようにしているかというと、、、
以上で完了です。
マスターの設定ファイルを編集したら、お決まりの3つのコマンドを実行するだけの手順です。
作業者は、マスターの設定ファイルの記述のみを意識するだけで良い作りになっています。
そのため、バックアップマシンにログオンする必要すらありません。
大抵のアプライアンス製品でも、このような流れで運用しているのではないでしょうか。
Linux+keepalivedで実際にこのような運用をするために、以下のような工夫をしました。
a) マスターとバックアップで設定ファイルを同じにする
b) 設定を反映するコマンドを実装する(lvs-restart)
c) 設定を同期するコマンドを実装する(lvs-sync)
d) 差分を確認するコマンドを実装する(lvs-diff)
今回の肝は a) です。
こんなに簡単! Linuxでロードバランサ (3)では、keepalived.confの内容をマスターとバックアップで若干変えていましたが、実は以下のようにすると全く同じ内容で問題ありません。
state BACKUP と nopreempt を指定した場合、自分が起動した時点ですでにマスターが稼働していた場合、自分のプライオリティ設定が相手よりも高くてもマスターへ昇格しないようになります。
つまり、マスターとバックアップでプライオリティを同じ設定にしても、nopreemptを指定することで、「先に起動した方がマスター」であることが保証されるわけです。
またこの設定は、万一マスターがおかしくなって、中途半端にUp/Downを繰り替えすようになってしまった場合に、不必要なVRRPの切り替わりを防ぐという目的もあったりします。
※余談※
今回は VRRPインスタンスを VE(外向け) と VI(内向け) に分けてみました。
vrrp_sync_group で VE と VI をまとめると、eth0 もしくは eth1 のどちらかが切れた場合でも、両方のインスタンスが同時に切り替わってくれるようになります。
長くなってしまいそうなので、他のコマンド(lvs-sync,lvs-diff,lvs-restart)については、また後日ご紹介させて頂きたいと思います。
その際の作業の流れはこんな感じになります。
1) マスターで設定ファイルを編集する
2) バックアップに設定ファイルを転送する
3) バックアップで設定を反映する
4) マスターとバックアップの差分を確認する
5) マスターで設定を反映する
具体的にはどのようにしているかというと、、、
lv1:# vi 設定ファイル
lv1:# lvs-sync -ine
lv1:# lvs-diff
lv1:# lvs-restart
以上で完了です。
マスターの設定ファイルを編集したら、お決まりの3つのコマンドを実行するだけの手順です。
作業者は、マスターの設定ファイルの記述のみを意識するだけで良い作りになっています。
そのため、バックアップマシンにログオンする必要すらありません。
大抵のアプライアンス製品でも、このような流れで運用しているのではないでしょうか。
Linux+keepalivedで実際にこのような運用をするために、以下のような工夫をしました。
a) マスターとバックアップで設定ファイルを同じにする
b) 設定を反映するコマンドを実装する(lvs-restart)
c) 設定を同期するコマンドを実装する(lvs-sync)
d) 差分を確認するコマンドを実装する(lvs-diff)
今回の肝は a) です。
こんなに簡単! Linuxでロードバランサ (3)では、keepalived.confの内容をマスターとバックアップで若干変えていましたが、実は以下のようにすると全く同じ内容で問題ありません。
vrrp_instance VE {
state BACKUP
interface eth0
garp_master_delay 5
virtual_router_id 1
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass himitsu
}
virtual_ipaddress {
10.10.31.10/24 dev eth0
}
}
vrrp_instance VI {
state BACKUP
interface eth1
garp_master_delay 5
virtual_router_id 2
priority 100
nopreempt
advert_int 1
authentication {
auth_type PASS
auth_pass himitsu
}
virtual_ipaddress {
192.168.31.10/22 dev eth1
}
}
vrrp_sync_group VG {
group {
VE
VI
}
}
state BACKUP と nopreempt を指定した場合、自分が起動した時点ですでにマスターが稼働していた場合、自分のプライオリティ設定が相手よりも高くてもマスターへ昇格しないようになります。
つまり、マスターとバックアップでプライオリティを同じ設定にしても、nopreemptを指定することで、「先に起動した方がマスター」であることが保証されるわけです。
またこの設定は、万一マスターがおかしくなって、中途半端にUp/Downを繰り替えすようになってしまった場合に、不必要なVRRPの切り替わりを防ぐという目的もあったりします。
※余談※
今回は VRRPインスタンスを VE(外向け) と VI(内向け) に分けてみました。
vrrp_sync_group で VE と VI をまとめると、eth0 もしくは eth1 のどちらかが切れた場合でも、両方のインスタンスが同時に切り替わってくれるようになります。
長くなってしまいそうなので、他のコマンド(lvs-sync,lvs-diff,lvs-restart)については、また後日ご紹介させて頂きたいと思います。
トラックバックURL
この記事へのトラックバック
1. Bitacle Blog Search Archive - DSAS開発者の部屋:keepalivedの運用ノウハウお見せします ?? 設定ファイルを同期する [ bitacle.org ] 2006年09月20日 21:40
[...] keepalivedはLinuxで冗長構成を組む道具としてとても便利ですが、運用面に関する配慮に物足りなさを感じることがあります。例えばIncludeがないとかIncludeがないとかIncludeがないとか(笑) naoyaの日記でnaoyaさんも悩んでいるよ??...]
2. [サーバ][filesystem] 設定ファイルを同期する [ より良い環境を求めて ] 2007年07月23日 18:58
DSAS開発者の部屋:keepalivedの運用ノウハウお見せします 〜 設定ファイルを同期する keepalivedの記事の一コマに偶然たどり着いた。 かなり遅い反応だけれども、raifがありますよと言ってみる。 リアルタイムに読んだ時はraifを知らなかったんだな・・。 a) マスターとバ
3. ロードバランサの冗長化 [ インフラ技術の実験室 ] 2011年06月19日 23:26
keepalivedでvrrpを動かし、ロードバランサを冗長化します。