LVS-TUN集群概述
DR方式是通过MAC,规模是一个交换网络。而TUN方式,是通过给数据包加上新的IP头部来实现,这个可以跨整个广域网。TUN模式可以解决DR模式下不能跨网段的问题,甚至可以跨公网进行。
LVS/TUN使用IP Tunneling技术,在Director机器和Real Server机器之间架设一个IP Tunnel,通过IP Tunnel将负载分配到Real Server机器上。Director和Real Server之间的关系比较松散,可以是在同一个网络中,也可以是在不同的网络中,只要两者能够通过IP Tunnel相连就行。收到负载分配的Real Server机器处理完后会直接将反馈数据送回给客户,而不必通过Director机器。实际应用中,服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务器必须支持IP隧道协议
LVS-TUN原理

在原有的IP报文外再次封装一层IP首部,内部IP首部(源地址为CIP,目标IP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)
当用户请求到达Director Server,此时请求的数据报文会先到内核空间的PREROUTING链。此时报文的源IP为CIP,目标IP为VIP。
PREROUTING检查发现数据包的目标IP是本机,将数据包送至INPUT链
IPVS比对数据包请求的服务是否为集群服务,若是,在请求报文的首部再次封装一层IP报文,封装源IP为DIP,目标IP为RIP。然后发至POSTROUTING链。此时源IP为DIP,目标IP为RIP
POSTROUTING链根据最新封装的IP报文,将数据包发至RS(因为在外层封装多了一层IP首部,所以可以理解为此时通过隧道传输)。此时源IP为DIP,目标IP为RIP
RS接收到报文后发现是自己的IP地址,就将报文接收下来,拆除掉最外层的IP后,会发现里面还有一层IP首部,而且目标是自己的tunl接口VIP,那么此时RS开始处理此请求,处理完成之后,通过tunl接口送给ens33网卡,然后向外传递。此时的源IP地址为VIP,目标IP为CIP
响应报文最终送达至客户端
LVS-TUN模型特性
RIP、VIP、DIP全是公网地址
RS的网关不会也不可能指向DIP
所有的请求报文经由Director Server,但响应报文必须不能进过Director Server
此模式不支持端口映射
RS的操作系统得支持隧道功能
LVS-TUN模型优缺点
缺点:由于后端服务器RS处理数据后响应发送给用户,此时需要租借大量IP(特别是后端服务器使用较多的情况下)。
优点:实现lvs-tun模式时,LVS调度器将TCP/IP请求进行重新封装并转发给后端服务器,由目标应用服务器直接回复用户。负载调度器和应用服务器之间是通过IP隧道来进行转发,故两者可以存在于不同的网段中(如异地机房,好处是可以容灾,通过智能dns(DNS view)实现边界最近访问)。

所有节点加载ipip模块
modprobe ipip
lsmod | grep ipip
ipip 13465 0
tunnel4 13252 1 ipip
ip_tunnel 25163 1 ipip
为tunl0设备配置VIP
ip link set up tunl0 #激活隧道
ip addr add 192.168.1.88 dev tunl0 #添加虚拟ip
ifconfig tunl0创建负载均衡策略
ipvsadm -C
ipvsadm -A -t 192.168.1.100:80 -s rr
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.22:80 -i
ipvsadm -a -t 192.168.1.100:80 -r 192.168.1.23:80 -i
ipvsadm --save -n > /etc/sysconfig/ipvsadm
后端服务器关闭ARP转发
net.ipv4.conf.ens33.arp_ignore = 1
net.ipv4.conf.ens33.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.tunl0.rp_filter = 0rp_filter定义系统是否开启对数据包源地址的校验
net.ipv4.conf.tunl0.rp_filter默认为1,需要改为0,关闭此功能。Linux的rp_filter用于实现反向过滤技术,它验证反向数据包的流向,以避免伪装IP攻击。然而,在LVS TUN模式中,我们的数据包是有问题的,因为从realserver ens33出去的IP数据包的源IP地址应该为192.168.1.22,而不是VIP地址。所以必须关闭这一项功能。DR和TUN在网络层实际上使用了一个伪装IP数据包的功能。
net.ipv4.conf.all.rp_filter = 0#这个值默认就是0,此功能就是关闭的。所以在LVS DR模式中,不需要修改这一样内核参数
NAT/DR/TUN比较

