Virtual server via IP tunneling(VS-TUN)
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持"IP Tunneling"(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。
LVS-TUN模型实现负载均衡的工作方式
TUN的工作机制跟DR一样,只不过在转发的时候,它需要重新包装IP报文。这里的real server(图中为RIP)离得都比较远。用户请求以后,到director上的VIP上,它跟DR模型一样,每个realserver上既有RIP又有VIP,Director就挑选一个real server进行响应,但是director和real server并不在同一个网络上,这时候就用到隧道了,director进行转发的时候,一定要记得CIP和VIP不能动。我们转发是这样的,让它的CIP和VIP不动,在它上面再加一个IP首部,再加的IP首部源地址是DIP,目标地址的RIP的IP地址。收到报文的RIP,拆掉报文以后发现了里面还有一个封装,它就知道了,这就是隧道。
实验环境:
物理机: 172.25.254.55
Server1:LVS服务器 (DIP)172.25.254.1 (VIP)172.25.254.100
server2:172.25.254.2 (VIP)172.25.254.100
server3: 172.25.254.3 (VIP)172.25.254.100
Server1
[root@server1 ~]# ip addr add 172.25.254.100/24 dev eth0 //添加VIP
[root@server1 ~]# ip addr
[root@server1 ~]# vim /etc/sysctl.conf //开启本地路由转发
Net.ipv4.ip_forward = 1
[root@server1 ~]# yum install ipvsadm -y
[root@server1 ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@server1 ~]# ipvsadm -a -t 172.25.154.100:80 -r 172.25.254.2 -i
[root@server1 ~]# ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3 -i
[root@server1 ~]# ipvsadm -ln
Server2:
[root@server2 ~]# modprobe ipip //加载ipip模块手动加载tunl0隧道
[root@server2 ~]# ifconfig -a
[root@server2 network-scripts]# vim ifcfg-tunl0 //配置VIP
[root@server2 network-scripts]# /etc/init.d/network restart
[root@server2 network-scripts]# vim /etc/sysctl.conf //关闭ARP转发
在末尾添加:net.ipv4.conf.tunl0.arp_ignore =1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore =1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter =0
net.ipv4.conf.all.rp_filter = 0
root@server2 network-scripts]#vim /etc/sysctl.conf //关闭本地路由转发
Net.ipv4.ip_forward = 0
[root@server2 network-scripts]# sysctl -p
[root@server2 network-scripts]# vim /var/www/html/index.html
www.wetos.org---server2
Server3:
[root@server3 ~]# modprobe ipip //加载ipip模块手动加载tunl0隧道
[root@server3 ~]# ifconfig -a
[root@server3network-scripts]# vim ifcfg-tunl0
[root@server3 network-scripts]# /etc/init.d/network restart
[root@server3 network-scripts]# vim /etc/sysctl.conf //关闭ARP转发
添加:net.ipv4.conf.tunl0.arp_ignore =1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore =1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter =0
net.ipv4.conf.all.rp_filter = 0
root@server3network-scripts]#vim /etc/sysctl.conf 关闭路由转发
Net.ipv4.ip_forward = 0
[root@server3 network-scripts]# sysctl -p
[root@server3 network-scripts]# vim /var/www/html/index.html
www.westos.com---server3
物理机:
[root@foundation55 ~] #curl 172.25.254.100