2009/01/03

LVS+keepalived で負荷分散

LVS と keepalived で負荷分散に挑戦してみましたよ!
CentOS release 5.2 ですよ。

構成はこんな感じ
              |192.168.1.100
+-----------+
| LVS |
+-----------+
|
+---------------+
| |
+-----------+ +-----------+
|192.168.1.4| |192.168.1.5|
+-----------+ +-----------+



ロードバランサにするマシンにLVSとkeepalivedをインストールします。
LVSは、RPMでさくっと入ります。
yum -y install ipvsadm

keepalived RPM が無いから作ります。
[root@~ ] yum -y install kernel-devel
[root@~ ] cd /usr/src/redhat/SOURCES/
[root@~ ] wget http://www.keepalived.org/software/keepalived-1.1.15.tar.gz
[root@~ ] tar zxvf keepalived-1.1.15.tar.gz
[root@~ ] cd keepalived-1.1.15

おもむろに ./configure する
[root@~ ] ./configure
Keepalived configuration
------------------------
Keepalived version : 1.1.15
Compiler : gcc
Compiler flags : -g -O2
Extra Lib : -lpopt -lssl -lcrypto
Use IPVS Framework : No
IPVS sync daemon support : No
Use VRRP Framework : Yes
Use LinkWatch : No
Use Debug flags : No

あれ?Noばっかし・・・・
カーネルのソース指定が必要なんだそうな
http://d.hatena.ne.jp/yoshifumi1975/20070731/p1
でも、何を指定すりゃいいんだろ?
Makefile.in に rpm なんてオプションがあるから試してみる。
[root@~ ] make rpm

んーなになに。うちの環境ではこれですか。
--with-kernel-dir=/lib/modules/2.6.18-92.el5/build

もっかい試す
[root@~ ] ./configure --with-kernel-dir=/lib/modules/2.6.18-92.el5/build

でも、だみだよー
/usr/src/kernels/2.6.18-92.1.6.el5-x86_64/net/core/link_watch.c... no
Keepalived configuration
------------------------
Keepalived version : 1.1.15
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 LinkWatch : No
Use Debug flags : No

link_watch.c がないってさ。なんだよー
とりあえず、ここに入ってるってさ。
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.8.tar.gz
カーネルに近いのを探して、ターゲットの下にコピーして下さい。
[root@~ ] cd ..
[root@~ ] tar zxvf linux-2.6.18.8.tar.gz
[root@~ ] cp -r linux-2.6.18.8/net/core /lib/modules/2.6.18-92.el5/build/net/

そんでなんとかこんな状態に持ってって下さい。
[root@~ ] ./configure --with-kernel-dir=/lib/modules/2.6.18-92.el5/build
Keepalived configuration
------------------------
Keepalived version : 1.1.15
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 LinkWatch : Yes
Use Debug flags : No

できた?ほしたらこれでRPMができるはず
[root@~ ] make rpm
[root@~ ] rpm -ivh /usr/src/redhat/RPMS/x86_64/keepalived-1.1.15-5.x86_64.rpm


後片付け
[root@~ ] cd ..
[root@~ ] rm -rf keepalived-1.1.15
[root@~ ] rm -f keepalived-1.1.15.tar.gz
[root@~ ] rm -rf linux-2.6.18.8
[root@~ ] rm -r linux-2.6.18.8.tar.gz




ロードバランスされる側のマシン(192.168.1.4,192.168.1.5)に、仮想IPの192.168.1.100を認識させてやります。
[root@~ ] vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.1.100
NETMASK=255.255.255.255
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
ONBOOT=yes
[root@~ ] ifup lo:0

[root@~ ] vi /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
[root@~ ] sysctl -p

Google Analytics