今回で最後の keepalived を使った CentOS 5 へのインストールとなります。
バーチャルサーバから healthcheck の確認
次にバーチャルサーバから今設定したリアルサーバの healthcheck が取得できることを確認します。
# vi /etc/hosts
“xxx.xxxx.xxx.xxx(リアルサーバの IP アドレス) healthcheck” 等を追加する
# curl -i http://healthcheck/healthcheck.cgi
HTTP/1.1 200 OK
Date: Wed, 09 Mar 2011 08:07:56 GMT
Server: Apache/2.2.3 (CentOS)
Content-Length: 29
Connection: close
Content-Type: text/plain; charset=UTF-8
xxxx.co.jp OK
これで healthcheck の確認ができました。最後に “vi /etc/hosts” で設定した healthcheck ホストを削除しておきます。
# vi /etc/hosts
大変ですが、この healthcheck の確認も設定した全リアルサーバに対して行う必要があります。
バーチャルサーバの keepalived 設定
次にバーチャルサーバ側で keepalived の設定を行います。
# cd /usr/local/etc/keepalived/
# vi keepalived.conf
設定ファイルは若干長くなりますが全て掲載します。また、keepalived の設定は DSR 構成版と NAT 構成版と VRRP 版があります。以下に記載はしますが適宜読み替えて下さい。
! Configuration File for keepalived
# vim: nu ts=2 syntax=config
# =====================
# Global
# =====================
global_defs {
notification_email {
root@localhost
}
router_id virtuals
smtp_server localhost
smtp_connect_timeout 40
notification_email_from root@localhost
}
# ——————————
# VRRP
# ——————————
vrrp_instance VRRP_1 {
# これは Master にする側の設定。Backup 側は "BACKUP" を定義する
state MASTER
interface eth0
# VRRP の ID
virtual_router_id 1
# 系切り替え実施後に ARP を遅らせる秒数(default 5sec)
garp_master_delay 5
# 優先度。BACKUP よりも多めにしておく
priority 101
# Master から送信する死活情報の秒指定
advert_int 6
# Master が落ちて Slave に系切り替えし、再度 Master が起動した
# 場合に Slave -> Master へ系切り替えをしないようにしたい場合は
# この nopreempt(Option 不要) を有効にする
nopreempt
# 認証方式
authentication {
auth_type PASS
auth_pass 0343
}
# Virtual IP の指定。Virtual IP は keepalived が起動時に有効化
# する IP アドレス
virtual_ipaddress {
xxx.xxx.xx.230
# NAT の場合はさらに内向けの IP アドレスを追加する
}
}
# ——————————
# Virtual Server 用の設定
virtual_server_group HTTP_443 {
xxx.xxx.xx.230 443
}
virtual_server group HTTP_443 {
# healthcheck の間隔(秒)
delay_loop 120
# load balance schedule 方法
lb_algo lc
# NAT の場合はここに "NAT" を指定する。DSR の場合は "DR" を指定する
lb_kind NAT
nat_mask 255.255.255.0
# IP アドレスを元に Virtual Server への割り振りを決める設定。
# この場合、クライアントは自分が接続している Server が落ちた時に
# 5分間は待機(接続できない状態)になる。
# ただし、この設定をしなければ IP アドレスを元にした割り振りはできない
persistence_timeout 5
# health check に使われる Virtual Host のドメイン名。
# 今回は "healthcheck" という Virtual Host を作った為、ここでも合わせている
virtualhost healthcheck
protocol TCP
# 最初の Real Server の設定
real_server xxx.xxx.xx.122 443 {
# healthcheck 失敗時に設定から削除せず weight を 0 にする
# には inhibit_on_failure を使う
#inhibit_on_failure
weight 1
SSL_GET {
url {
path /healthcheck.jsp
status_code 200
}
connect_timeout 60
}
}
# 2つ目の Real Server の設定
real_server xxx.xxx.xx.123 443 {
# healthcheck 失敗時に設定から削除せず weight を 0 にする
# には inhibit_on_failure を使う
#inhibit_on_failure
weight 1
SSL_GET {
url {
path /healthcheck.jsp
status_code 200
}
connect_timeout 60
}
}
上の設定は VRRP 構成になっています。VRRP 構成を取る場合は全てのバーチャルサーバに対して keepalived の設置えを行う必要があります。keepalived の設定ができたら keepalived を起動します
# /usr/local/sbin/keepalived -n -S 1 -d -f /usr/local/etc/keepalived/keepalived.conf -check -vrrp
# ipvsadm -Ln -sort
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP xxx.xxx.xx.230:443 lc
-> xxx.xxx.xx.122:443 Masq 0 0 0
-> xxx.xxx.xx.123:443 Masq 1 0 0
最後に keepalived 用の syslog と init.d への登録です
# vi /etc/syslog.conf
“local1.* /var/log/keepalived.log” を追加する
# service syslog restart
# vi /etc/logrotate.d/syslog
“/var/log/keepalived.log” を追加する
# ln -s /usr/local/etc/init.d/keepalived /etc/init.d/keepalived
# chkconfig keepalived on
これで keepalived の設定は完了です。リアルサーバ側の Virtual Host の設定等も加えた為、多少長いように見えますが、負荷分散を行うミドルウェアの中ではこれでも簡単な方で他のミドルウェアを利用する場合もどちらにしろ通る道と言えます。
その為、keepalived 辺りで一度試してみるのがいいと思います。