##(1)VS/TUN的简介##
1.ip隧道技术:
是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。隧道技术是一种数据包封装技术,它是将原始ip包(其报头包含原始发送者和最终目的地)封装在另一个数据包(称为封装的ip包)的数据净荷中的传输。
2.TUN模式的优点:
采用NAT模式时,由于请求和响应的报文必须通过调度器LB地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这个问题,调度器把请求数据包的报文通过ip隧道转发到真实的服务器RS。RS将响应处理后的数据包直接返回给客户端。这样调度器就只处理请求入站报文,由于一般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。
3.TUN和NAT的差异:
VS/TUN和VS/NAT的工作模式不同的是,它在LB和RS之间的传输不用改写ip地址。而是把客户请求包封装在一个ip tunnel里面。然后发送给RS节点服务器,节点服务器接收到之后解开ip tunnel后,进行响应处理,,并且直接将响应包通过自己的外网地址发送给客户端,不用经过LB服务器。
##(2)VS/TUN原理##
1.客户发送请求,目标地址VIP,请求数据包发送到LB。
2.LB接收到客户请求包,进行ip tunnel封装。在原有的报头加上ip tunnel的报头。然后发送出去。
3.RS节点服务器根据iptunnel报头信息(此时就是一种逻辑上的隐形隧道,只有LB和RS之间懂)受到请求包后,然后解开ip tunnel的报头信息,得到客户的请求包并进行响应处理。
4.响应处理完毕之后,RS服务器使用自己的公网线路,将响应数据包发送给客户端。源ip地址还是VIP地址(RS节点服务器需要在本地回环接口配置VIP)
##(3)LVS-TUN模式下的负载均衡##
1.实验环境:
server1(LB):172.25.67.1
server2(RS):172.25.67.2
server3(RS):172.25.67.3
VIP:172.25.67.100
2.在server1中:
1)配置网络
ip:172.25.67.1
modprobe ipip #导入模块
ip link set up tunl0 #添加虚拟网卡
ip addr add 172.25.67.100 dev tunl0 #为虚拟网卡设置ip
2)配置yum仓库
vim /etc/yum.repos.d/rhel-source.repo
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.67.250/rhel6.5/LoadBalancer
gpgcheck=0
3)设定策略
yum install ipvsadm -y
/etc/init.d/ipvsadm start #打开服务
ipvsadm -A -t 172.25.67.100:80 -s rr
ipvsadm -a -t 172.25.67.100:80 -r 172.25.67.2:80 -i
ipvsadm -a -t 172.25.67.100:80 -r 172.25.67.3:80 -i
/etc/init.d/ipvsadm save #保存策略
ipvsadm -ln #查看策略
3.在server2中:
1)配置网络:
ip:172.25.67.2
modprobe ipip #打开隧道
ip link set up tunl0 #设定虚拟网卡
ip addr add 172.25.67.100/32 dev tunl0 #为虚拟网卡设定ip
2)安装arptables_jf
yum install arptables_jf -y #安装服务
arptables -F #清空策略
arptables -A IN -d 172.25.67.100 -j DROP #禁止172.25.67.100直接访问
arptables -A OUT -s 172.25.67.100 -j mangle –mangle-ip-s 172.25.67.2 #将响应包要以vip的身份返回给客户端,否则客户端不能接收到响应包
/etc/init.d/arptables_jf save #保存策略
/etc/init.d/arptables_jf restart #重启服务
arptables -L #查看策略
3)修改rp_filter:
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -a |grep rp_filter
为什么要修改这个参数呢?是因为:
rp_filter参数用于控制系统是否开启对数据包源地址的校验。
有三个值,0、1、2,具体含义:
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。
2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不同,则直接丢弃该数据包。
4)安装httpd并且编写默认发布文件:
yum install httpd -y #安装httpd服务
/etc/init.d/httpd start #打开httpd服务
vim /var/www/html/index.html #编辑发布文件
server2
/etc/init.d/httpd restart #重启httpd
curl localhostm #查看发布文件是否生效
4.在server3中:
1)配置网络:
ip:172.25.67.3
modprobe ipip #打开隧道
ip link set up tunl0 #设定虚拟网卡
ip addr add 172.25.67.100/32 dev tunl0 #为虚拟网卡设定ip
2)安装arptables_jf
yum install arptables_jf -y #安装服务
arptables -F #清空策略
arptables -A IN -d 172.25.67.100 -j DROP
arptables -A OUT -s 172.25.67.100 -j mangle –mangle-ip-s 172.25.67.3
/etc/init.d/arptables_jf save #保存策略
/etc/init.d/arptables_jf restart #重启服务
arptables -L #查看策略
3)修改rp_filter:
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -a |grep rp_filter
4)安装httpd并且编写默认发布文件:
yum install httpd -y #安装httpd服务
/etc/init.d/httpd start #打开httpd服务
vim /var/www/html/index.html #编辑发布文件
server3
/etc/init.d/httpd restart #重启httpd
curl localhostm #查看发布文件是否生效
5.测试:
在客户端测试
ip:172.25.254.67
for i in {1..10};do curl 172.25.67.100;done