LVS-DR

某所の奴、設定したのでまとめておく。OSはRedHat ES4なんか?
2.6.9-42.ELsmp #1 SMP Wed Jul 12 23:32:02 EDT 2006 x86_64 x86_64 x86_64 GNU/Linux
[lb]
まずは、コマンド(ipvsadm)を持ってきて、インスコ。
kernelのversionにかなり依存するらしいので、以下で確認。
$ grep IP_VS_VERSION_CODE /usr/src/linux/include/net/ip_vs.h
#define IP_VS_VERSION_CODE 0x010201
展開できれば、makeするだけだが、sourceが入ってない場合は、link張らなきゃ。
ln -s /usr/src/kernels/2.6.9-42.EL-smp-x86_64 /usr/src/linux
IP forwardを有効にする。
# vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
# sysctl -p
ESには、必要なmoduleが既に入ってたので、insmodする。入ってなければkernel compileね。rebootの際にも必要なので、rc.localにでも入れとけって感じ。
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_rr.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_lc.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_wrr.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_wlc.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_lblc.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_lblcr.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_sh.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_ftp.ko
# insmod /lib/modules/2.6.9-42.ELsmp/kernel/net/ipv4/ipvs/ip_vs_dh.ko
eth0:0とかで、targetのIPを設定。ここでは、x.y.z.100 としておく。web鯖はx.y.z.201, x.y.z.202 とする。
# vi /etc/sysconfig/network-scripts/ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static
BROADCAST=x.y.z.255
IPADDR=x.y.z.100
NETMASK=255.255.255.0
NETWORK=x.y.z.0
ONBOOT=yes
TYPE=Ethernet
# ifup ifcfg-eth0:0
# ipvsadm -C
# ipvsadm -A -t x.y.z.100:0 -s rr -p 14400
# ipvsadm -a -t x.y.z.100:0 -r x.y.z.201 -g
# ipvsadm -a -t x.y.z.100:0 -r x.y.z.202 -g
# service ipvsadm save
# service ipvsadm start
# chkconfig ipvsadm on
こんだけ。80/443とか分けてもいいけど、http/httpsのばたこん切替えで問題があるんで、port 0で行く。cookie継続の問題には-p(persistent)で対処。でも、これでもproxyでglobal IPが切り替わってくるclientには対応できないんだよね。
[web]
lo:0にtargetのIPを設定。
# vi /etc/sysconfig/network-scripts/ifcfg-lo:0
DEVICE=lo:0
IPADDR=x.y.z.100
NETMASK=255.255.255.255
NETWORK=x.y.z.100
BROADCAST=x.y.z.100
ONBOOT=yes
NAME=loopback:0
# ifup ifcfg-lo:0
で、arp応答しないように、
# vi /etc/sysctl.conf
net.ipv4.conf.eth0.arp_ignore = 1
net.ipv4.conf.eth0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
# sysctl -p
いきなりDRだったけど、NATの方が設定面倒っぽかったからね。LVSだと、L4で、複数proxy対応の為、L7にしろって。色々試したけど、どれもダメ。そりゃそうかも、SSL 通信を解析できたら問題ぢゃん。mod_proxy_balancer, haproxy, poundってやったので、後でまとめる予定。はあ。