構築/Linux サーバ/lvs
提供: スゴイようぃっきー!
目次 |
概要
- ipvsadm + keepalived を利用して冗長化したロードバランサを構築する。
- 設定は以下
- VIP : 192.168.3.10
- lvs 1 : 192.168.3.11
- lvs 1 : 192.168.3.12
- webserver 1 : 192.168.3.21
- webserver 2 : 192.168.3.22
- 上記環境のためDSR設定
※webserver は後にapache + proxy_balanceを構築する。
前提条件
- 構築/Linux サーバ/CentOS 5.4で作成した仮想マシンを複製(on VMware Server / on VMware ESXi)して利用する。
IPVSの構築
- ipvsadmパッケージをyumインストールする。
[root@Sulu-lvs01 ~]# yum -y install ipvsadm
留意事項
- ipvsadmのバージョンについて注意するべしとのKLabの記事がある。
lv1ではソースからコンパイル、lv2ではyum installを行ったが今のところyumのバージョンでも問題が起きていない。
[root@Sulu-lvs01 ~]# ipvsadm -v ipvsadm v1.24 2005/12/10 (compiled with popt and IPVS v1.2.1) [root@Sulu-lvs02 keepalived-1.1.19]# ipvsadm -v ipvsadm v1.24 2003/06/07 (compiled with popt and IPVS v1.2.0)
- ソースからコンパイルするが、特に躓くことはなかった。
wget http://www.linux-vs.org/software/kernel-2.6/ipvsadm-1.24.tar.gz tar zxf ipvsadm-1.24.tar.gz cd ipvsadm-1.24 ./configure make make install
keepalivedの構築
インストール
ソースを取得して解凍する。
[root@Sulu-lvs01 ~]# wget http://www.keepalived.org/software/keepalived-1.1.19.tar.gz [root@Sulu-lvs01 ~]# tar zxvf keepalived-1.1.19.tar.gz
confiugreを行う。
[root@Sulu-lvs01 ~]# cd keepalived-1.1.19 [root@Sulu-lvs01 keepalived-1.1.19]#./configure -with-kernel-dir=/usr/src/kernels/2.6.18-164.11.1.el5-i686/ ・ ・ Keepalived configuration ------------------------ Keepalived version : 1.1.19 Compiler : gcc Compiler flags : -g -O2 Extra Lib : -lpopt -lssl -lcrypto Use IPVS Framework : Yes IPVS sync daemon support : Yes Use VRRP Framework : Yes Use Debug flags : No
※作業ログ
configure時に "-with-kernel-dir=/usr/src/kernels/2.6.18-164.11.1.el5-i686/" をしないと、Noのステータスが残り、このままだとIPVSが利用できない。このパスはkernel-devをインストールした際にできたもので、ip_vs.hが入っている場所でもある。
(find / -name ip_vs.h でパスを確認した)
Use IPVS Framework : No IPVS sync daemon support : No 以下はconfigure時のログ checking net/ip_vs.h usability... no checking net/ip_vs.h presence... no
x86_64のパスは以下のとおりだった。
/usr/src/kernels/2.6.18-164.15.1.el5-x86_64/
specファイルを修正する。
[root@Sulu-lvs01 keepalived-1.1.19]# vi keepalived.spec
keepalived.specを編集1
specの中のバージョン表記がなぜか1.1.18だったので、1.1.19に変更
Version: 1.1.18
↓ Version: 1.1.19
keepalived.specを編集2
"--with-kernel-dir"をさきほどのconfigureと同じように指定する。
--with-kernel-dir="/lib/modules/%{kernel}/build"
↓
--with-kernel-dir="/usr/src/kernels/2.6.18-164.11.1.el5-i686/"
アーカイブを指定の場所へコピーする。
[root@Sulu-lvs01 keepalived-1.1.19]# cp ../keepalived-1.1.19.tar.gz /usr/src/redhat/SOURCES/keepalived-1.1.19.tar.gz
keepalived.specのファイル権限が不在ユーザーであると、rpmがコケルのでchownしておく。
[root@Sulu-lvs01 keepalived-1.1.19]# chown root.root ./ -R
rpmを作成する。
[root@Sulu-lvs01 keepalived-1.1.19]# make rpm
rpmをインストールする。
[root@Sulu-lvs01 keepalived-1.1.19]# rpm -ivh /usr/src/redhat/RPMS/i386/keepalived-1.1.19-5.i386.rpm
keepalived.confの設定
- /etc/keepalived/keepalived.confを参考にして変更する
XXXの部分は空気を読んで。。
ViewVCでソースを参照
global_defs {
notification_email {
XXX@XXX
}
notification_email_from lvs-alert@XXX
smtp_server 192.168.3.XXX
smtp_connect_timeout 30
}
vrrp_instance V_W {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
nopreemp
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.3.100
}
}
virtual_server_group HTTP100 {
192.168.3.100 80
}
virtual_server group HTTP100 {
delay_loop 6
lb_algo rr
lb_kind DR
persistence_timeout 0
protocol TCP
sorry_server 192.168.3.XXX 80
real_server 192.168.3.111 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /test.html
status_code 200
}
connect_port 80
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.3.112 80 {
weight 1
inhibit_on_failure
HTTP_GET {
url {
path /test.html
status_code 200
}
connect_port 80
connect_timeout 5
nb_get_retry 3
delay_before_retry 3
}
}
}
留意事項
- kernel-develやopensssl-develが必要。構築/Linux サーバ/CentOS 5.4と同じイメージなら問題ない。
- rpmファイルを作成した際にホスト名に関する警告が出たが気にしないことにしておいた。
[root@Sulu-lvs01 keepalived-1.1.19]# make rpm ・ libpopt.so.0 libssl.so.6 rtld(GNU_HASH) 伸張ファイルの検査中: /usr/lib/rpm/check-files /var/tmp/keepalived-1.1.19-5-root 警告: ホスト名を正式なものにできません: Sulu-lvs01 書き込み完了: /usr/src/redhat/SRPMS/keepalived-1.1.19-5.src.rpm 書き込み完了: /usr/src/redhat/RPMS/i386/keepalived-1.1.19-5.i386.rpm 実行中(%clean): /bin/sh -e /var/tmp/rpm-tmp.52041 + umask 022 + cd /usr/src/redhat/BUILD + cd keepalived-1.1.19 + /bin/rm -rf /var/tmp/keepalived-1.1.19-5-root + exit 0
web serverの準備と、keepalivedの起動
web serverの準備
- lvsが受けているVIPを自身のものとして応答させるために、web server側に以下のコマンドを実行する。
既にproxy balancerを構築しているならproxy balancerが動作しているサーバに実施する。
iptables -t nat -A PREROUTING -p tcp -d 192.168.3.100 -j REDIRECT /etc/init.d/iptables save
- 死活監視用のhtmlをweb server 1 と 2にそれぞれ作成する。
web1# echo "web 1" > /var/www/html/test.html web2# echo "web 2" > /var/www/html/test.html
動作の確認
- 以下KLabの記事を参考に
- 以下は
192.168.3.111 活動中
192.168.3.112 死亡中
の例
[root@Sulu-lvs01 ~]# ipvsadm -L -n IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.3.100:80 rr -> 192.168.3.112:80 Route 0 0 0 -> 192.168.3.111:80 Route 1 0 0
※confにinhibit_on_failureを記述しておかないと、死亡したサーバがリストされないので注意したほうが良い。
初期構築時にweb serverの用意ができていなかったりテストページが動作不良しているときに混乱する。
