LVS——TUN模式

      优势:

  • 负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户。
  • 若LB跑在公网上,就能对不同地域(局域网)的RS进行请求调度。

     工作过程:

  1. 客户端将请求发往前端的负载均衡器,请求报文源地址是CIP,目标地址为VIP。
  2. 负载均衡器收到报文后,发现请求的是在规则里面存在的地址,那么它将在客户端请求报文的首部再封装一层IP报文,将源地址改为DIP,目标地址改为RIP,并将此包发送给RS。
  3. RS收到请求报文后,会首先拆开第一层封装,然后发现里面还有一层IP首部的目标地址是自己tunl0接口上的VIP,所以会处理次请求报文,并将响应报文通过tunl0接口送给eth0网卡直接发送给客户端。(在这里,内核参数rp_filter和arp_filter设置为0起了很大作用)

实践操作:

1.  实验环境

                    server1              web1          IP: 172.25.254.1

                    server2               web2          IP:172.25.254.2

                    server3                LB              IP:172.25.254.3

                   foundation13       client          IP:172.25.254.250

2.  client 上搭建网络yum源(有点不合理,实验环境限制):

3. 在LB上加入IP隧道需要的模块 ipip:

modprobe 命令用于在linux系统中载入指定的模块。

Linux系统内核实现的IP隧道技术主要有三种:ipip、gre、sit ;这三种隧道技术都需要内核模块 tunnel4.ko 的支持。

ipip 需要内核模块 ipip.ko ,该方式最为简单!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已。

4. 在LB上创建一个虚拟TUN网卡接口:ip addr add 172.25.254.100/24 dev tunl0

      打开该接口的状态: ip link set up tunl0

5.  在LB上配置虚拟服务器相关:

     首先配置为LVS工作的虚拟IP和LVS的轮询方式:ipvsadm -A -t 172.25.254.100:80 -s rr

     再配置调度的真实服务器的地址和端口以及工作的模式,这里-i表示以IP隧道的模式工作:

6.  在两台web服务器上配置虚拟接口:tunl0

        server1上的配置:

        server2上的配置:

7.  在web服务器上配置内核参数rp_filter和arp_filter:

          之前我们在做LVS的DR模式的实验中了解了内核参数arp_ignorearp_announce,这两个内核参数中,arp_announce用来控制arp请求报文的,arp_ignore是用来控制响应报文的; 这里的arp_filter也是用来控制arp的响应报文的;而rp_filter则和IP数据包的响应有关。下面是rp_filter参数的一些信息介绍:

         rp_filte的作用: 用于控制系统是否开启对数据包源地址的校验。

         rp_filter参数有三个值,0、1、2,具体含义:

                    0:不开启源地址校验。

                    1:开启严格的反向路径校验。对每个进来的数据包,校验其反向路径是否是最佳路径。如果反向路径不是最佳路径,则直接丢弃该数据包。

                     2:开启松散的反向路径校验。对每个进来的数据包,校验其源地址是否可达,即反向路径是否能通(通过任意网口),如果反向路径不通,则直接丢弃该数据包。

          arp_filter参数有两个值:0、1,含义如下:

                      0: 内核接口可回复接收到的目标IP为其它接口IP地址的arp请求。看起来这样是错误的,但是通常还是有道理的,因为增加了正常通信的几率。在Linux看来,系统拥有所有配置的IP地址,而不是某个特定端口。只是在复杂的配置情况下,比如负载均衡,才会产生问题。

                     1:允许系统中多个网络接口工作在相同的网段,在回复某一接口收到的arp请求时,内核根据能否路由源地址为请求的目标IP的数据包,从此接口发出来,决定是否回复arp(通过源IP地址查询出口路由实现)。换句话说,可控制哪个网卡回复arp请求。

        现在,我们先看web服务器中该参数的情况:

        这里我们的tunl0网络接口是虚拟接口,为了提供通信成功的可能性,我们将参数为1的都设置为0:

这里介绍修改过程要用到的命令:

sysctl -w    ## 直接将修改的参数写入到内存

sysctl -p     ## 将/etc/sysctl.conf文件的信息刷新到内存

  我们这里用直接写入内存的方式:

         当然,你也可以修改配置文件,然后刷新到内存。 不同之处在于前一种关机后会失效,第二种则会永久生效。

在server2上做相同的操作:

8. 开启servre1和server2上的httpd服务:

9. 测试LB上的ipvs是否配置成功:

10. 因为实验环境web服务器和LB在一个局域网中,为了只让LB接收client的http请求,故在server1和server2上配置arp抑制:

11. 测试:在client上访问web服务器

猜你喜欢

转载自blog.csdn.net/qq_40628106/article/details/86491502