LVS-TUN模式配置

LVS-TUN模式配置

环境:

IP hostname OS
192.168.100.10
VIP:192.168.100.11
balancer centos7
192.168.100.20 server1 centos7
192.168.100.30 server2 centos7

通过IP隧道实现虚拟服务器(VS/TUN)

以下说明来自:http://zh.linuxvirtualserver.org/node/27

在VS/NAT的集群系统中,请求和响应的数据报文都需要通过负载调度器,当真实服务器的数目在10台和20台之间时,负载调度器将成为整个集群系统的新瓶颈。大多数Internet服务都有这样的特点:请求报文较短而响应报文往往包含大量的数据。如果能将请求和响应分开处理,即在负载调度器中只负责调度请求而响应直接返回给客户,将极大地提高整个集群系统的吞吐量。

IP隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。

我们利用IP隧道技术将请求报文封装转发给后端服务器,响应报文能从后端服务器直接返回给客户。但在这里,后端服务器有一组而非一个,所以我们不可能静态地建立一一对应的隧道,而是动态地选择一台服务器,将请求报文封装和转发给选出的服务器。这样,我们可以利用IP隧道的原理将一组服务器上的网络服务组成在一个IP地址上的虚拟网络服务。

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

在这里插入图片描述

VS/TUN的工作流程如图所示:它的连接调度和管理与VS/NAT中的一样,只是它的报文转发方法不同。调度器根据各个服务器的负载情况,动态地选择一台服务器,将请求报文封装在另一个IP报文中,再将封装后的IP报文转发给选出的服务器;服务器收到报文后,先将报文解封获得原来目标地址为VIP的报文,服务器发现VIP地址被配置在本地的IP隧道设备上,所以就处理这个请求,然后根据路由表将响应报文直接返回给客户。

在这里,请求报文的目标地址为VIP,响应报文的源地址也为VIP,所以响应报文不需要作任何修改,可以直接返回给客户,客户认为得到正常的服务,而不会知道是哪一台服务器处理的。

在这里插入图片描述

在VS/TUN中,响应报文根据服务器的路由表直接返回给客户,而不经过负载调度器,所以负载调度器只处于从客户到服务器的半连接中,VS/TUN的TCP状态迁移与VS/NAT的不同。我们给出半连接的TCP有限状态机,如图3.5所示,圈表示状态,箭头表示状态间的转换,箭头上的标识表示在当前状态上收到该标识的输入,迁移到下一个状态。VS/TUN的TCP状态迁移是按照半连接的TCP有限状态机进行的。

在这里插入图片描述

分发器配置

[root@balancer ~]# vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@balancer ~]# sysctl -p
net.ipv4.ip_forward = 1
[root@server1 ~]# yum -y install ipvsadm 
[root@balancer ~]# ipvsadm -A -t 192.168.100.11:80 -s rr

-i参数TUN模式
[root@balancer ~]# ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.20 -i
[root@balancer ~]# ipvsadm -a -t 192.168.100.11:80 -r 192.168.100.30 -i
[root@balancer ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  192.168.100.11:80 rr
  -> 192.168.100.20:80            Tunnel  1      0          0         
  -> 192.168.100.30:80            Tunnel  1      0          0 

Server配置server1,server2配置相同。这里只给出一个

加载模块
[root@server1 ~]# modprobe ipip
[root@server1 ~]# lsmod | grep ipip
ipip                   13472  0 
tunnel4                13252  1 ipip
ip_tunnel              25216  1 ipip
[root@server1 ~]# ifconfig
eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.100.20  netmask 255.255.255.0  broadcast 192.168.100.255
        inet6 fe80::20c:29ff:fe8b:4785  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:8b:47:85  txqueuelen 1000  (Ethernet)
        RX packets 494  bytes 43900 (42.8 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 280  bytes 35633 (34.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

tunl0: flags=193<UP,RUNNING,NOARP>  mtu 1480
        tunnel   txqueuelen 0  (IPIP Tunnel)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@server1 ~]# ifconfig tunl0 192.168.100.11 netmask 255.255.255.255
关闭arp转发
[root@server1 ~]# vim /etc/sysctl.conf 
net.ipv4.conf.tunl0.arp_ignore=1
net.ipv4.conf.tunl0.arp_announce=2
net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2
net.ipv4.conf.tunl0.rp_filter=0
net.ipv4.conf.all.rp_filter=0
[root@server1 ~]# sysctl -p
net.ipv4.conf.tunl0.arp_ignore = 1
net.ipv4.conf.tunl0.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.tunl0.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
[root@server1 ~]# yum install httpd httpd-tools -y
[root@server1 ~]# echo "server1" > /var/www/html/index.html  

三种方式对比

在这里插入图片描述

发布了65 篇原创文章 · 获赞 48 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/DoloresOOO/article/details/100051353