LVS-TUN模式工作原理
和DR模式差不多,但是比DR多了一个隧道技术以支持realserver不在同一个物理环境中。就是realserver一个在北京,一个工作在上海。
在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP
1.客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
2.负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
3.RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己lo接口上的VIP,所以会处理次请求报文,并将响应报文通过lo接口送给eth0网卡(这个网卡一般指和调度器在一个网段的网卡)直接发送给客户端。注意:需要设置lo接口的VIP不能在公网上出现
LVS-TUN的特点
特点:
(1)RIP,DIP可以使用私有地址;
(2)RIP和DIP可以不再同一个网络中,且RIP的网关未必需要指向DIP;
(3)支持端口映射;
(4)RS的OS可以使用任意类型;
(5)请求报文经由Director,响应报文也经由Director
配置环境
sfj1(172.25.69.1)负载均衡服务器
sfj2(172.25.69.2)后端真实服务器web1
sfj3(172.25.69.3)后端真实服务器web2
负载均衡服务器
[root@sfj1 ~]# modprobe ipip #添加隧道模式模块
[root@sfj1 ~]# ip addr show # 多出一个tunl0网卡
[root@sfj1 ~]# ip addr add 172.25.69.100/24 dev tunl0 # 添加IP
[root@sfj1 ~]# ip addr show
[root@sfj1 ~]# ip link set up tunl0 #激活tunl0网卡
[root@sfj1 ~]# ip addr show
添加策略
[root@sfj1 ~]# ipvsadm -A -t 172.25.69.100:80 -s rr
[root@sfj1 ~]# ipvsadm -a -t 172.25.69.100:80 -r 172.25.69.2:80 -i
[root@sfj1 ~]# ipvsadm -a -t 172.25.69.100:80 -r 172.25.69.3:80 -i
[root@sfj1 ~]# ipvsadm -Ln
[root@sfj1 ~]# cat /etc/sysconfig/ipvsadm #文件方式查看策略
后端服务器sfj2
[root@sfj2 network-scripts]# modprobe ipip
[root@sfj2 ~]# ip addr add 172.25.69.100/24 dev tunl0
[root@sfj2 ~]# ip link set up tunl0
[root@sfj2 ~]# ip addr show
此时在客户端访问172.25.69.100会失败,因为隧道模式,有反向校验的功能,需要将其sfj2,sfj3的反向校验功能关闭,否则后端服务器不会返回数据
[root@sfj2 ~]# sysctl -a | grep rp_filter # 查看反响检验参数
[root@sfj2 ~]# sysctl -w net.ipv4.conf.all.rp_filter=0 # -w为临时改变
net.ipv4.conf.all.rp_filter = 0
[root@sfj2 ~]# sysctl -w net.ipv4.conf.default.rp_filter=0
net.ipv4.conf.default.rp_filter = 0
[root@sfj2 ~]# sysctl -w net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.rp_filter = 0
[root@sfj2 ~]# sysctl net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0
[root@sfj2 ~]# sysctl -a | grep rp_filter
[root@sfj2 ~]# sysctl -p # -p表示从文件中加载系统参数,使修改生效
[root@sfj2 ~]# sysctl -a | grep rp_filter
后端服务器sfj3
与sfj2配置相同
客户端测试
成功进行轮询
验证完毕后卸载隧道模式模块网卡
modprobe -r ipip #卸载