Keepalived†
LinuxでVRRPを喋る時に利用するプログラム。
非常に細かい制御が可能で、特定プロセスのトラッキング、ユニキャストVRRPも実装出来る。
また、VRRPv3に対応しているので、実行プロトコルを変更すればIPv6でVRRPも可能。
単独で利用する事は少なく、ロードバランサー(HAProxy、UltraMonkey)と組み合わせたり、
リバースプロキシ自体の冗長化として使う場合が多い。
インストール†
上記のオフィシャルにソースコードが置いてあるので、
Linuxにダウンロードして通常通りにビルドする。
# tar zxvf keepalived-1.3.5.tar.gz
# cd keepalived-1.3.5
# ./configure --prefix=/usr/local/keepalived-1.3.5
# make && make install
# cd /usr/local
# ln -s /usr/local/keepalived-1.3.5 keepalived
また、面倒な場合はパッケージ管理で導入する事も可能。
# yum install keepalived
今回は下記構成例を作成する。
前述した通り、中身はVRRPなので詳細はVRRPのRFCを見れば大体わかる。
今回は敢えてNICを分割し、それぞれでVRRPv2とVRRPv3を喋る構成だが、
デュアルスタックなどの場合はVRRPv3で設定を一纏めにする事も可能。
・IPアドレス、NIC情報
NIC | VRID | 仮想IP | サーバ1(Backup) | サーバ2(Master) |
eth0 | 10 | 10.0.0.254 | 10.0.0.1 | 10.0.0.2 |
eth1 | 80 | fe80::10:0:0:254 | fe80::10:0:0:1 | fe80::10:0:0:2 |
・オプション定義
- HAProxyのプロセスをtrack対象とする
- 平文でVRRPの認証を行う
- VRRP切り替え時のメール送信は行わない
- 自動切り戻し(preempt)を有効にする
- パケット効率化の為にユニキャストVRRPを利用する
- プライオリティは「サーバ1:1/サーバ2:2」とする
・実コンフィグ
+
| | サーバ1(Backup)
|
##
## Mail Notification
##
global_defs {
notification_email {
# hoge-test★gmail.com ## メール送信しないのでコメント
}
}
##
## Process Check
##
vrrp_script check_haproxy {
script "pkill -0 -x haproxy" ## HAProxyのプロセスtrack設定
interval 1 ## 1秒毎に確認
fall 5 ## 5回プロセス確認が失敗したらVRRP切替
raise 10 ## 10回プロセス確認が成功したらVRRP切戻
}
##
## eth0
##
vrrp_instance eth0-ipv4 {
# nopreempt ## 自動切戻(preempt)の有効化
vrrp_version 2 ## VRRPv2を利用する
state BACKUP ## 常時バックアップにする事でプライオリティを優先化
interface eth0 ## VRRPv2を出力するNIC
virtual_router_id 10 ## VRIDを設定
garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間
advert_int 1 ## VRRPパケット送信間隔。単位は秒
priority 1 ## VRRPプライオリティ
unicast_src_ip 10.0.0.1 ## VRRPを送信する、送信元IPアドレス
unicast_peer {
10.0.0.1 ## ユニキャストVRRP送信先(自サーバ)
10.0.0.2 ## ユニキャストVRRP送信先(他サーバ)
}
authentication {
auth_type PASS ## VRRPに認証を追加
auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード
}
virtual_ipaddress {
10.0.0.254 ## VRRP代表アドレス。所謂、仮想IPアドレス
}
track_script {
check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定
}
}
##
## eth1
##
vrrp_instance eth1-ipv6 {
# nopreempt ## 自動切戻(preempt)の有効化
native_ipv6 ## IPv6でVRRPパケットをやり取りする場合に設定
vrrp_version 3 ## IPv6でVRRPを実行する為に、VRRPv3を指定
state BACKUP ## 常時バックアップにする事でプライオリティを優先化
interface eth1 ## VRRPv3を出力するNIC
virtual_router_id 80 ## VRIDを設定
garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間
advert_int 1 ## VRRPパケット送信間隔。単位は秒
priority 1 ## VRRPプライオリティ
unicast_src_ip fe80::10:0:0:1 ## VRRPを送信する、送信元IPアドレス
unicast_peer {
fe80::10:0:0:1 ## ユニキャストVRRP送信先(自サーバ)
fe80::10:0:0:2 ## ユニキャストVRRP送信先(他サーバ)
}
authentication {
auth_type PASS ## VRRPに認証を追加
auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード
}
virtual_ipaddress {
fe80::10:0:0:254 ## VRRP代表アドレス。所謂、仮想IPアドレス
}
track_script {
check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定
}
}
|
+
| | サーバ2(Master)
|
##
## Mail Notification
##
global_defs {
notification_email {
# hoge-test★gmail.com ## メール送信しないのでコメント
}
}
##
## Process Check
##
vrrp_script check_haproxy {
script "pkill -0 -x haproxy" ## HAProxyのプロセスtrack設定
interval 1 ## 1秒毎に確認
fall 5 ## 5回プロセス確認が失敗したらVRRP切替
raise 10 ## 10回プロセス確認が成功したらVRRP切戻
}
##
## eth0
##
vrrp_instance eth0-ipv4 {
# nopreempt ## 自動切戻(preempt)の有効化
vrrp_version 2 ## VRRPv2を利用する
state BACKUP ## 常時バックアップにする事でプライオリティを優先化
interface eth0 ## VRRPv2を出力するNIC
virtual_router_id 10 ## VRIDを設定
garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間
advert_int 1 ## VRRPパケット送信間隔。単位は秒
priority 2 ## VRRPプライオリティ
unicast_src_ip 10.0.0.2 ## VRRPを送信する、送信元IPアドレス
unicast_peer {
10.0.0.1 ## ユニキャストVRRP送信先(他サーバ)
10.0.0.2 ## ユニキャストVRRP送信先(自サーバ)
}
authentication {
auth_type PASS ## VRRPに認証を追加
auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード
}
virtual_ipaddress {
10.0.0.254 ## VRRP代表アドレス。所謂、仮想IPアドレス
}
track_script {
check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定
}
}
##
## eth1
##
vrrp_instance eth1-ipv6 {
# nopreempt ## 自動切戻(preempt)の有効化
native_ipv6 ## IPv6でVRRPパケットをやり取りする場合に設定
vrrp_version 3 ## IPv6でVRRPを実行する為に、VRRPv3を指定
state BACKUP ## 常時バックアップにする事でプライオリティを優先化
interface eth1 ## VRRPv3を出力するNIC
virtual_router_id 80 ## VRIDを設定
garp_master_delay 5 ## 自サーバがMasterになった後、GARP再送までの待ち時間
advert_int 1 ## VRRPパケット送信間隔。単位は秒
priority 2 ## VRRPプライオリティ
unicast_src_ip fe80::10:0:0:2 ## VRRPを送信する、送信元IPアドレス
unicast_peer {
fe80::10:0:0:1 ## ユニキャストVRRP送信先(他サーバ)
fe80::10:0:0:2 ## ユニキャストVRRP送信先(自サーバ)
}
authentication {
auth_type PASS ## VRRPに認証を追加
auth_pass vrrp_pass ## VRRPの認証パスワード。左記だと"vrrp_pass"がパスワード
}
virtual_ipaddress {
fe80::10:0:0:254 ## VRRP代表アドレス。所謂、仮想IPアドレス
}
track_script {
check_haproxy ## trackスクリプトとして、HAProxyのプロセスチェックを指定
}
}
|