一般2.6.10以上内核版本都已经自带了ipvsadm,故不需要安装。
Ipvs 1.25编译
ipvsadm-1.25编译不过
- 去掉netlink库的依赖:去掉libipvs/Makefile的CFLAGS += -DLIBIPVS_USE_NL,去掉Makefile的LIBS += -lnl。
- 需要popt库解析命令行,在这里下载并安装http://freshmeat.net/projects/popt/.。
DR方式的LB
配置LVS主节点
1.修改proc参数
#vi /etc/sysctl.conf
net.ipv4.ip_forward = 1
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
net.ipv4.conf.eth1.send_redirects = 0
#sysctl –p
2. 添加负载均衡规则
#cat > /etc/sysconfig/ipvsadm
ipvsadm -A -t 192.168.100.20:80 -s rr
ipvsadm -a -t 192.168.100.20:80 -r 192.168.100.116:80 -g -p60
ipvsadm -a -t 192.168.100.20:80 -r 192.168.100.117:80 -g -p60
如果添加realserver时设置了-p 60参数,则同一个客户端每次刷新页面时,连接的是同一个real server,否则会轮流更替,但我加了-p
参数会报错。
设置连接保持(-p)参数是为了确保ftp、ssl等连接的稳定和可靠性。
3.添加虚拟IP地址
(比较郁闷的是,下面这个设置在机器上不生效,需要手动执行: ifconfig eth0:1 192.168.100.20 broadcast 192.168.100.255 netmask 255.255.255.0 )
#vi /etc/sysconfig/network-scripts/ifcfg-eth0:1
DEVICE=eth0:0
BROADCAST=192.168.100.255
IPADDR=192.168.100.20
NETMASK=255.255.255.0
ONBOOT=yes
TYPE=Ethernet
#service network restart
4. 保存规则并设置服务状态
#ipvsadm-save > /etc/sysconfig/ipvsadm
#chkconfig --level 35 ipvsadm on
#service ipvsadm start
配置各Real Server节点
1. 修改proc参数
#vi /etc/sysctl.conf
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2#sysctl –p
2.添加虚拟地址及路由记录
#vi /opt/add_vip.sh
#!/bin/bash
ifconfig lo:0 192.168.100.20 netmask 255.255.255.255 up
route add -host 192.168.100.20 dev lo:0
#chmod +x /opt/add_vip.sh
#/opt/add_vip.sh
#echo "/opt/add_vip.sh" >> /etc/rc.local
NAT方式的LB
在同一个网段内设置,没有成功,网上说需要设置iptables-nat,但同一个网段需要么?
验证LVS
在LVS主节点上执行
ipvsadm -L -n
LVS源码分析
LVS源码在下面网站中有详细分析,写得非常不错,如果想深入研究的,建议看一下。
http://www.yubo.org/ipvs/index.php
这儿有张netfilter的框架图,也值得看看
http://zh.linuxvirtualserver.org/files/linux2.6.32.2netfilter.JPG