LVS-TUN集群中注意Real Server的内核必须打上修正ARP问题的内核补丁。该方式中 Director将客户请求分配到不同的Real Server,Real Server处理请求后直接回应给用户,这样Director就只处理客户机与服务器的一半连接,极大地提高了Director的调度处理能力, 使集群系统能容纳更多的节点数。另外TUN方式中的Real Server可以在任何LAN或WAN 上运行,这样可以构筑跨地域的集群,其应对灾难的能力也更强,但是服务器需要为IP封装付出一定的资源开销,而且后端的Real Server必须是支持IP Tunneling的操作系统。
DIP:调度器的IP地址
RIP:后台真实服务器(realserver)的IP地址
VIP:就是用于服务提供的虚拟IP
LVS的TUN模式可以说是对其NAT和DR模式的一个折衷方案,和DR一样是采用单网卡模式,它的DIP、VIP既可以和realserver在同一个网段,也可以不在同一个网段,但是它并不是在NAT和DR做的修改(也可以说是在DR上的修改,但是这里不这么说),它是采用的一种全新的隧道模式,当然在路由与交换的范畴这种隧道模式也是IPV4和IPV6两种版本共存的一种解决方案,这里并没有用到,当然TUN的性能也是介于NAT和DR之间的。
具体实现过程可以这么来说:
1、 客户端发来请求报文到达调度器,调度器给报文穿上“外衣“(就是把报文放入特定的隧道)封装成一个新的报文,根据某种调度算法在新报文中把目的地址指向某台realserver,从而把报文传给realserver,同时把这次连接写入缓存。
2、 Realserver端接到报文,脱去“外衣“根据要求做某些处理,处理结束后,根据自身绑定的VIP,直接把回复报文的目的地址指向客户端,源地址就是绑定在隧道模式下的VIP,这样就完成一个请求与回复。
安装了redhat虚拟机3个,网络适配器都是桥连接
Director上的脚本如下:
#!/bin/bash
#LVS script NAT
VIP=10.7.12.245
RIP1=10.7.11.121
RIP2=10.7.11.144
#./etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s rr
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -i
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -i
/sbin/ipvsadm
touch /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "start LVS of DirectorServer Tun"
;;
stop)
/sbin/ifconfig tunl0 down
/sbin/ipvsadm -C
rm -rf /var/lock/subsys/ipvsadm >/dev/null 2>&1
echo "Stop LVS of DirectorServer Tun"
;;
status)
if [ ! -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm TUN stoped"
exit 1
else
echo "ipvsadm TUN OK"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
exit 1
esac
exit 0
真是服务器脚本:
#!/bin/bash
#Description start LVS Realserver Tun
VIP=10.7.12.245
#./etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/ifconfig tunl0 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev tunl0
echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2">/proc/sys/net/ipv4/conf/all/arp_announce
echo "start LVS of Realserver Tun"
;;
stop)
/sbin/ifconfig tunl0 down
echo "0">/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
echo "0">/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0">/proc/sys/net/ipv4/conf/all/arp_announce
echo "stop LVS of RealServer Tun"
;;
*)
echo "Usage:$0 {start|stop}"
exit 1
esac
运行效果:
压力测试: ab -c 100 -n 10000 http://10.7.12.245/index.html
用命令 watch -n 1 'ipvsadm -Ln'
用浏览器浏览结果:
配置完毕!