この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは。サンドリバー砂川です。
プロジェクトで冗長構成のサーバを構築する際
keepalivedとIPVSだと、kernel等のバージョンに気を配らなければならないので結構面倒です。
そこで最近は、IPVSの代わりにpoundを使って手軽に冗長化してたりします。
今回はkeepalivedとpoundを使って冗長化する方法を掲載します。
※今回はLB編なのでpoundが出てきません。
poundの方を知りたい方は、数日中に記事を書くのでもうしばらくお待ちください。
この記事で使用するソフト
keepalived
サーバIP例
- LB01(master) 10.0.0.10
- LB02(backup) 10.0.0.11
- virtual IP(vip) 10.0.0.30
各サーバは2台以上でも可能ですが、今回は簡潔にするために2台で構築します。
LB01,02共通の作業
keepalivedインストール
IPVSとkeepalivedを連携させて冗長化をする場合、kernelのバージョン等に注意しなければなりません。しかし今回負荷分散部分はpoundに任せるため、単純にコンパイルするだけでOKです。
# cd /usr/local/src
# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz
# tar zxvf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19
# ./configure
.
.
.
Use VRRP Framework : Yes
.
.
configure結果に上が出力されていればOK。コンパイルします。
# make
# make install
keepalived設定
LB01の/etc/keepalived/keepalived.confを以下のように記述
! Configuration File for keepalived
global_defs {
notification_email { #フェイルオーバー発生時に送るメールの宛先等を設定
example@kbmj.com
}
notification_email_from example@kbmj.com
smtp_server localhost
smtp_connect_timeout 30
}
vrrp_instance WEB {
state MASTER #マスターかバックアップかを設定
interface eth0
smtp_alert
virtual_router_id 2 #同じidを持つサーバ間で死活監視を行うので、LB01、02共に同じ数字を設定
priority 100 #priorityが高いサーバから順にマスター設定される
advert_int 1
authentication {
auth_type PASS
auth_pass 1111 #LB01、02で共通のものを設定
}
virtual_ipaddress {
10.0.0.30/24 #使用するvipを設定
}
}
LB02の/etc/keepalived/keepalived.confも、基本的にLB01と同じですが、一部をBACKUP用の設定に書き換える必要があります。
state MASTER →state BACKUP
priority 100 → priority 50
LB01、02共にkeepalived.confを設定し終えたら、試しにkeepalivedを起動してみます。
両方のサーバで以下のコマンドを入力
# /usr/sbin/keepalived start
動作チェック
# ip addr show
LB01
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.30/24 scope global secondary eth0
LB02
inet 10.0.0.11/24 brd 10.0.0.255 scope global eth0
LB01のeth0インタフェースにvip(10.0.0.30)が割り振られているのが分かります。
この状態で10.0.0.30にpingを打つと、LB01にパケットが届きます。
今度は冗長化をテストする為にLB01のkeepalivedを停止してみます。
LB01で
# /usr/sbin/keepalived stop
# ip addr show
LB01
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0
LB02
inet 10.0.0.11/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.30/24 scope global secondary eth0
LB02のkeepalivedがマスターとなり、LB02のeth0インタフェースにvipが割り振られました。
この状態で10.0.0.30にpingを打つと、LB02にパケットが届きます。
今度は再びLB01のkeepalivedを起動してみます。
LB01で
# /usr/sbin/keepalived start
# ip addr show
LB01
inet 10.0.0.10/24 brd 10.0.0.255 scope global eth0
inet 10.0.0.30/24 scope global secondary eth0
LB02
inet 10.0.0.11/24 brd 10.0.0.255 scope global eth0
LB01の方がpriorityの設定値が高いため、再びLB01にvipが割り振られました。
これで、vipでアクセスすればLBサーバが両方ともダウンしていない限り、生きているほうにアクセスできるということになります。
LBサーバが冗長化されました。
次回はpoundを使ったwebサーバの負荷分散と冗長化、keepalivedとの連携について書く予定です。