libvirtでNAT構成にするための設定とApacheのServer-Side Includesの設定の準備ができたところで、いよいよロードバランサの実験です。
ホストOS上の/etc/keepalived/keepalived.conf
vrrp_instance VI_1 { state BACKUP interface br0 virtual_router_id 50 priority 200 advert_int 1 garp_master_delay 10 virtual_ipaddress { 192.168.11.100 } } virtual_server 192.168.11.100 80 { delay_loop 1 lvs_sched rr lvs_method NAT #DR protocol TCP real_server 192.168.122.11 80 { weight 1 HTTP_GET { url { path / status 200 } connect_timeout 3 } } real_server 192.168.122.12 80 { weight 1 HTTP_GET { url { path / status 200 } connect_timeout 3 } } }
実験用スクリプト
$ while :; do curl http://192.168.11.100; env LANG=C date; sleep 1; done
実行結果はこんな感じ。
Hello, this is vm11. Thu Aug 27 02:47:03 JST 2009 Hello, this is vm10. Thu Aug 27 02:47:05 JST 2009 Hello, this is vm11. Thu Aug 27 02:47:06 JST 2009 Hello, this is vm10. ...(略)...
vm10でhttpdを止めてみるとvm11のみにいくようになりました。その前に
curl: (52) Empty reply from server
が1回出るときと1回も出ずにスムーズにvm11に切り替わるときがありました。
その後、vm10でhttpdを再開してみたのですが、引き続きvm11にしかいきません。ホストOSで
# /etc/init.d/keepalived reload
と実行してみると再びvm10とvm11に交互に投げるようになりました。inhibit_on_failureというオプションがあるぐらいなので指定しない場合は復活するのかと思っていたのですが。これはこういうものなのかは今後調査したいと思います。