LVS之TUN(隧道模式)

有关lvs的相关知识可以去查看之前写的DR模型

VS/TUN的体系结构如图所示,各个服务器将VIP地址配置在自己的IP隧道设备上。

LVS之TUN(隧道模式)_第1张图片
LVS之TUN(隧道模式)_第2张图片

VS/TUN模式的工作原理:

(1)IP隧道技术又称为IP封装技术,它可以将带有源和目标IP地址的数据报文使用新的源和目标IP进行第二次封装,这样这个报文就可以发送到一个指定的目标主机上;
(2)VS/TUN模式下,调度器和后端服务器组之间使用IP隧道技术。当客户端发送的请求(CIP-->VIP)被director接收后,director修改该报文,加上IP隧道两端的IP地址作为新的源和目标地址,并将请求转发给后端被选中的一个目标;
(3)当后端服务器接收到报文后,首先解封报文得到原有的CIP-->VIP,该后端服务器发现自身的tun接口上配置了VIP,因此接受该数据包。
(4)当请求处理完成后,结果将不会重新交给director,而是直接返回给客户端;在后端服务器返回给客户端数据包时,由于使用的是普通网卡接口,根据一般的路由条目,源IP地址将是该网卡接口上的地址,例如是RIP。因此,要让响应数据包的源IP为VIP,必须添加一条特殊的路由条目,明确指定该路由的源地址是VIP。

采用VS/TUN模式时的基本属性和要求:

(1)Real  Server的RIP和director的DIP不用处于同一物理网络中,且RIP必须可以和公网通信。也就是说集群节点可以跨互联网实现。
(2)real server的 tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应报文的源IP。
(3)director给realserver时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP。而realsever响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP。这样客户端就无法区分这个VIP到底是director的还是服务器组中的。
(4)需要添加一条特殊的路由条目,使得后端服务器返回响应给客户端时的源IP为VIP。
(5)director只处理入站请求,响应请求由realserver完成。

  一般来说,VS/TUN模式会用来负载调度缓存服务器组,这些缓存服务器一般放置在不同网络环境,可以就近返回数据给客户端。在请求对象不能在Cache服务器本地命中的情况下,Cache服务器要向源服务器发请求,将结果取回,最后将结果返回给客户。

环境配置

server1 virt-server(调度器)
server2 real-sever(后端服务器)
server3 real-sever(后端服务器)
在server1上:
[root@server1 ~]# modprobe ipip  # 添加隧道模式模块
[root@server1 ~]# ip addr show  # 发现多了一块隧道模式的网卡

LVS之TUN(隧道模式)_第3张图片

[root@server1 ~]# ip addr del 172.25.78.100/24 dev eth0   # 把eth0上的虚拟IP删除
[root@server1 ~]# ip addr add 172.25.78.100/24 dev tunl0  # 添加到tunl0网卡上

在这里插入图片描述

[root@server1 ~]# ip link set up tunl0     # 激活tunl0网卡
[root@server1 ~]# ip addr show tunl0

在这里插入图片描述

[root@server1 ~]# ipvsadm -C   # 清除之前的策略
[root@server1 ~]# ipvsadm -A -t 172.25.78.100:80 -s rr  # 添加轮询算法
[root@server1 ~]# ipvsadm -a -t 172.25.78.100:80 -r 172.25.78.2 -i  # -i表示隧道模式
[root@server1 ~]# ipvsadm -a -t 172.25.78.100:80 -r 172.25.78.3 -i
[root@server1 ~]# ipvsadm -L

在这里插入图片描述

在后端服务器上
[root@server2 ~]# modprobe ipip
[root@server2 ~]# ip addr del 172.25.78.100/32 dev eth0
[root@server2 ~]# ip addr add 172.25.78.100/32 dev tunl0
[root@server2 ~]# ip link set up tunl0
[root@server2 ~]# ip addr show
[root@server2 ~]# sysctl -a | grep rp_filter  # 查看反向检验参数,-a表示显示所有的参数,rp_filter参数用于控制系统是否开启对数据包源地址的校验

LVS之TUN(隧道模式)_第4张图片

因为隧道模式实现的是不同网段的主机进行通信,如果信息要从服务端返回到客户端时,由于客户端和服务端不在同一个网段,数据根本出不去,所以我们需要关闭反向参数检验
0:不开启源地址校验。
1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。

[root@server2 ~]# sysctl -w net.ipv4.conf.lo.rp_filter=0  # -w表示临时改变某个指定参数的值     
net.ipv4.conf.lo.rp_filter = 0
[root@server2 ~]# sysctl -w net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.rp_filter = 0
[root@server2 ~]# sysctl -w net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0
[root@server2 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.default.rp_filter = 0
[root@server2 ~]# sysctl -p   # -p表示从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载,使修改生效
[root@server2 ~]# sysctl -a | grep rp_filter

LVS之TUN(隧道模式)_第5张图片

[root@server3 ~]# modprobe ipip
[root@server3 ~]# ip addr del 172.25.78.100/32 dev eth0
[root@server3 ~]# ip addr add 172.25.78.100/32 dev tunl0
[root@server3 ~]# ip link set up tunl0   # 激活tunl0网卡
[root@server3 ~]# ip addr show

LVS之TUN(隧道模式)_第6张图片

[root@server3 ~]#  sysctl -w net.ipv4.conf.lo.rp_filter=0
net.ipv4.conf.lo.rp_filter = 0
[root@server3 ~]#  sysctl -w net.ipv4.conf.eth0.rp_filter=0
net.ipv4.conf.eth0.rp_filter = 0
[root@server3 ~]#  sysctl -w net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.tunl0.rp_filter = 0
[root@server3 ~]# vim /etc/sysctl.conf
net.ipv4.conf.default.rp_filter = 0
[root@server3 ~]# sysctl -p
[root@server3 ~]#  sysctl -a | grep rp_filter

LVS之TUN(隧道模式)_第7张图片

开始测试

[root@foundation78 ~]# curl 172.25.78.100
www.westos.org -- server3
[root@foundation78 ~]# curl 172.25.78.100
www.westos.org ---server2
[root@foundation78 ~]# curl 172.25.78.100
www.westos.org -- server3
[root@foundation78 ~]# curl 172.25.78.100
www.westos.org ---server2

LVS之TUN(隧道模式)_第8张图片

你可能感兴趣的:(运维)