keepalivedでヘルスチェック

前回構築したLVSでロードバランサ構築 - i2bsの日記keepalivedを使ってヘルスチェック機能を持たせる。

ipvsadm設定削除(lb1)

ipvsadm -C
ipvsadm -Ln

ApacheBenchインストール(ホストOS)

cd /usr/local/src
wget -c http://ftp.riken.jp/net/apache//httpd/httpd-2.2.22.tar.gz
tar zxvf httpd-2.2.22.tar.gz
cd httpd-2.2.22
./configure
make
cp -pi support/ab /usr/local/bin/.

keepalivedインストール(lb1)

apt-get update
apt-get install keepalived

keepalived設定(lb1)

ex /etc/keepalived/keepalived.conf << EOF
a
virtual_server_group web.localdomain_http {
  172.16.0.120 80
}

virtual_server group web.localdomain_http {
  lvs_sched lc
  lvs_method NAT
  protocol TCP
  delay_loop 10
  virtualhost web.localdomain

  #sorry_server 192.168.250.200 80

  real_server  192.168.250.110 80 {
    weight 1
    inhibit_on_failure

    HTTP_GET {
      url {
        path /wwwcheck.html
        status_code 200
      }
      connect_timeout 3
    }
  }

  real_server  192.168.250.111 80 {
    weight 1
    inhibit_on_failure
    HTTP_GET {
      url {
        path /wwwcheck.html
        status_code 200
      }
      connect_timeout 3
    }
  }
}
.
wq
EOF

keepalived起動(lb1)

/etc/init.d/keepalived start
ipvsadm -Ln

確認1(ホストOS)

abでアクセスし、web1/web2共にアクセスログを確認。
アクセスログにApacheBenchからのアクセスとlb1からのヘルスチェックが1time/10secで来ていることを確認。

ab -n 1000 -c 100 http://web.localdomain/

web2のS-OUT(web2)

ヘルスチェックのステータスコードが200から404に変わったことを確認。

mv -i /usr/local/nginx/html/wwwcheck.html{,.sout}
tail -f /usr/local/nginx/logs/access.log

LBステータス確認(lb1)

Weightが0になっていること。

ipvsadm -Ln
root@lb1:~# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.0.120:80 lc
  -> 192.168.250.110:80           Masq    1      0          0         
  -> 192.168.250.111:80           Masq    0      0          0

確認2(ホストOS)

abでアクセスし、web1/web2共にアクセスログを確認。
web2へのアクセスが無く、全てのリクエストがweb1にバランシングされていることを確認。

ab -n 1000 -c 100 http://web.localdomain/

web2のS-IN(web2)

LBからのヘルスチェックのステータスコードが200に変わったことを確認。

mv -i /usr/local/nginx/html/wwwcheck.html{.sout,}
tail -f /usr/local/nginx/logs/nginx.log

LBステータス確認(lb1)

Weightが1になっていること。

root@lb1:~# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.16.0.120:80 lc
  -> 192.168.250.110:80           Masq    1      0          0         
  -> 192.168.250.111:80           Masq    1      0          0

確認3(ホストOS)

abでアクセスし、web1/web2共にアクセスログを確認。
アクセスログにApacheBenchからのアクセスが来ていることを確認。

ab -n 1000 -c 100 http://web.localdomain/