一、LVS-TUN模式的工作原理
采用NAT模式时,由于请求和响应的报文必须通过调度器地址重写,当客户请求越来越多时,调度器处理能力将成为瓶颈。为了解决这 个问题,调度器把请求的报文通过IP隧道转发到真实的服务器。真实的服务器将响应处理后的数据直接返回给客户端。这样调度器就只处理请求入站报文,由于一 般网络服务应答数据比请求报文大很多,采用VS/TUN模式后,集群系统的最大吞吐量可以提高10倍。
VS/TUN的工作流程图如下所示,它和NAT模式不同的是,它在LB和RS之间的传输不用改写IP地址。而是把客户请求包封装在 一个IP tunnel里面,然后发送给RS节点服务器,节点服务器接收到之后解开IP tunnel后,进行响应处理。并且直接把包通过自己的外网地址发送给客户不用经过LB服务器。
原理图过程简述:
1)客户请求数据包,目标地址VIP发送到LB上。
2)LB接收到客户请求包,进行IP Tunnel封装。即在原有的包头加上IP Tunnel的包头。然后发送出去。
3)RS节点服务器根据IP Tunnel包头信息(此时就又一种逻辑上的隐形隧道,只有LB和RS之间懂)收到请求包,然后解开IP Tunnel包头信息,得到客户的请求包并进行响应处理。
4)响应处理完毕之后,RS服务器使用自己的出公网的线路,将这个响应数据包发送给客户端。源IP地址还是VIP地址。(RS节点服务器需要在本地回环接口配置VIP)
二、LVS-TUN模式下的负载均衡
实验环境:
Load Balance:172.25.254.1
Virtual IP: 172.25.254.100
server2(RS): 172.25.254.2
server3(RS): 172.25.254.3
1、在server1上:
1.配置网络
modprobe ipip
ip link set up tunl0
ip addr add 172.25.254.100 dev tunl0 #添加虚拟IP
ip addr #查看IP
2.配置yum仓库
vim /etc/yum.repos.d/rhel-source.repo
[LoadBalancer]
name=LoadBalancer
baseurl=http://172.25.4.250/rhel6.5/LoadBalancer
gpgcheck=0
3.添加规则:
yum install ipvsadm -y
/etc/init.d/ipvsadm start #开启服务
ipvsadm -C
ipvsadm -A -t 172.25.254.100:80 -s rr
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.2:80 -i #给vip添加rip,使用TUN模式
ipvsadm -a -t 172.25.254.100:80 -r 172.25.254.3:80 -i
/etc/init.d/ipvsadm save #保存策略
ipvsadm -ln #查看策略
ipvsadm -lnc #查看调度IP情况
2、在server2上:
1.安装apache
yum install httpd -y
vim /var/www/html/index.html
<h1>server2</h1>
/etc/init.d/httpd start
2.配置网络
modprobe ipip #加载模块
ip link set up tunl0
ip addr add 172.25.4.100/32 dev tunl0 #添加虚拟IP
ip addr #查看ip
3.安装arptables_jf工具
因为设置172.25.254.100/32作为vip,不可以和外部通信,所以设用arptables将其的访问全部DROP,出去的包全部为转为本机的ip
yum install arptables_jf -y
arptables -F #清空策略
arptables -A IN -d 172.25.254.100 -j DROP 拒绝172.25.254.100的访问
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2 #由于tcp三次握手原因,所以出去的时候仍要以vip地址出去才会实现握手,而真正将数据传输给客户端的就是realserver, mangle参数就是这个功能
/etc/init.d/arptables_jf save #保存策略
arptables -L #查看策略
4.关闭rp_filter
rp_filter参数的作用:
1. 减少DDoS攻击
校验数据包的反向路径,如果反向路径不合适,则直接丢弃数据包,避免过多的无效连接消耗系统资源。
2. 防止IP Spoofing
校验数据包的反向路径,如果客户端伪造的源IP地址对应的反向路径不在路由表中,或者反向路径不是最佳路径,则直接丢弃数据包,不会向伪造IP的客户端回复响应。
sysctl -a|grep .rp_filter #将过滤出的打开着的.rp_filter全部关闭
sysctl -w net.ipv4.conf.default.rp_filter=0
sysctl -w net.ipv4.conf.tunl0.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.lo.rp_filter=0
3、在server3中:
1.安装apache
yum install httpd -y
vim /var/www/html/index.html
<h1>server3</h1>
/etc/init.d/httpd start
2.配置网络
modprobe ipip #加载模块
ip link set up tunl0
ip addr add 172.25.254.100/32 dev tunl0 #添加虚拟IP,tun后面的是字母l不是1
ip addr #查看ip
3.安装arptables_jf工具
因为设置172.25.254.100/32作为vip,不可以和外部通信,所以设用arptables将其的访问全部DROP,出去的包全部转换为本机的ip
yum install arptables_jf -y
arptables -F
arptables -A IN -d 172.25.254.100 -j DROP
arptables -A OUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.3 #由于tcp三次握手原因,所以出去的时候仍要以vip地址出去才会实现握手,而真正将数据传输给客户端的就是realserver, mangle参数就是这个功能
/etc/init.d/arptables_jf save
arptables -L
4.关闭rp_filter
sysctl -a|grep .rp_filter #将过滤出的打开着的.rp_filter全部关闭
sysctl -w net.ipv4.conf.default.rp_filter = 0
sysctl -w net.ipv4.conf.tunl0.rp_filter = 0
sysctl -wnet.ipv4.conf.eth0.rp_filter = 0
4、测试:
在物理机中执行 curl 172.25.254.100出现轮询即配置生效
三、RS处于不同网段下的TUN模式的负载平衡
实验环境:
继续使用之前的环境,将server3的ip更改为172.25.56.3
Load Balance:172.25.254.1 172.25.56.1
Virtual IP: 172.25.254.100
server2(RS): 172.25.254.2
server3(RS): 172.25.56.3
1、在server3中:
1.配置网络
ip addr add 172.25.56.3/24 dev eth0
ip addr del 172.25.254.3/24 dev eth0
ip addr
2.配置arptables_jf
vim /etc/sysconfig/arptables
更改伪装策略,将172.25.254.3更改为172.25.56.3
/etc/init.d/arptables_jf restart
arptables -L
3.配置网关
route add default gw 172.25.56.250 #将RS网关指向物理机的ip地址
route -n
2、在server1中:
1.添加网络
ip addr add 172.25.56.1/24 dev eth0
2.更改规则
ipvsadm -ln
ipvsadm -d -t 172.25.254.100:80 -r 172.25.254.3:80
ipvsadm -a -t 172.25.254.100:80 -r 172.25.56.3:80 -i
ipvsadm -ln
3、测试:
在物理机中执行 curl 172.25.254.100出现轮询即配置生效