keepalivedでweight設定が戻らない!! (#`Д´)ゴ---!!
XenServerの罠なのか?自分が悪いのか?わからないです。(#`Д´)ゴ---!!
XenServer5.5(VMはCentOS5.5)で、keepalivedを試し中です。
↓
緑の枠は、ホストサーバの範囲です。
1つのホストサーバ内に6つのVMを立てて実験してみました。
こんな感じの構成で、だいたい思ったような動作をしてくれているのですが・・・
例えば、配下のWebサーバが落ちたり、監視対象パス(check.htmlとか)を削除したりとか、そういう事をするとバランス対象から一旦外れて、復活後にはまた元通りです。
なのですが・・・、
以下の事をすると期待する動作になりません。(#`Д´)ゴ---!!
1)バランサ-1側がMASTER状態の時に「ifdown eth1」を実施。
↓
MASTERがバランサ-2に切り替わる(ここまで問題無し)
2)バランサ-1側にて、「ifup eth1」を実施。
↓
バランサ-1の方のpriorityを高くしているので、MASTERがバランサ-1に戻る
(ここまでも期待通り)
3)バランサ-1から配下のWebサーバに流れなくなる!!
↓
1)で「ifdown eth1」を実施した時に配下Webサーバに対するWeight値が「0」に
なるのですが、それが復旧後も直りません。
※復旧後にweight値が最初の「1」に戻る事を期待してました。
「ifdown eth0」の実行前:
# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.100:http rr -> 10.1.1.110:http Masq 1 0 10 -> 10.1.1.120:http Masq 1 0 11 -> 10.1.1.130:http Masq 1 0 11
「ifdown eth0」の実行後:
# ipvsadm IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.1.100:http rr -> 10.1.1.110:http Masq 0 0 10 -> 10.1.1.120:http Masq 0 0 11 -> 10.1.1.130:http Masq 0 0 11
この状態のまま、バランサ-1がMASTERになるので、クライアントからの接続要求が何処にも行かずに止まってしまいます。(#`Д´)ゴ---!!
これは何かを間違えているのでしょうか????
因みに、XenServerを使わずに物理マシンだけで構成するとこのような状態にはなりませんでした。
※keepalived.confの設定は以下の通りです。(・◇・;)
vrrp_sync_group VG { group { VI_eth0 VI_eth1 } } vrrp_instance VI_eth0 { state MASTER interface eth0 garp_master_delay 5 virtual_router_id 51 priority 101 advert_int 1 authentication { auth_type PASS auth_pass naisho } virtual_ipaddress { 192.168.1.100 dev eth0 } } vrrp_instance VI_eth1 { state MASTER interface eth1 garp_master_delay 5 virtual_router_id 52 priority 101 advert_int 1 authentication { auth_type PASS auth_pass naisho } virtual_ipaddress { 10.1.1.100 dev eth1 } } virtual_server_group mtest { 192.168.1.100 80 } virtual_server group mtest { lvs_sched wrr lvs_method NAT protocol TCP virtualhost mhealth real_server 10.1.1.110 80 { weight 1 inhibit_on_failure HTTP_GET { url { path /index.html status_code 200 } connect_timeout 3 } } real_server 10.1.1.120 80 { weight 1 inhibit_on_failure HTTP_GET { url { path /index.html status_code 200 } connect_timeout 3 } } real_server 10.1.1.130 80 { weight 1 inhibit_on_failure HTTP_GET { url { path /index.html status_code 200 } connect_timeout 3 } } }