LVS-----TUN模式

TUN模式

采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 TUN技术后,集群系统的最大吞吐量可以提高10倍。

 原理图LVS-----TUN模式_第1张图片

实例图

LVS-----TUN模式_第2张图片注意:所有主机的防火墙和 Selinux 都关闭,若原本的主机上没有配置 VIP 那么我们在做下面的操作的时候就不需要执行 ip addr del  直接用 ifconfig 添加 tunl0 的 VIP 即可

# 关闭防火墙
systemctl disable --now firewalld

# 临时关闭selinux
setenforce 0
# 永久关闭selinux
sed -i "s/SELINUX=enforcing/SELINUX=permissive/g" /etc/selinux/config

 前面的步骤同 LVS---DR 笔记里面的相同,需要修改的是 LVS 主机上的规则和 VIP;可参照以下笔记进行实验

LVS-----DR模式-CSDN博客https://blog.csdn.net/m0_75087717/article/details/146902882?spm=1001.2014.3001.5501

配置 VIP

[root@lvs ~]# ip addr del 172.16.0.100/32 dev lo
[root@lvs ~]# lsmod | grep ipip
[root@lvs ~]# ifconfig tunl0 172.25.250.100 netmask 255.255.255.255 up

#当使用 tunl0 设置后,会自动开启 ipip 模式
[root@lvs ~]# lsmod | grep ipip
ipip                   20480  0
tunnel4                16384  1 ipip
ip_tunnel              36864  1 ipip


#用 ip a 查看会发现多了一个设备出来
[root@lvs ~]# ip ad
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens160:  mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:0c:29:02:b0:3a brd ff:ff:ff:ff:ff:ff
    altname enp3s0
    inet 172.25.250.8/24 brd 172.25.250.255 scope global noprefixroute ens160
       valid_lft forever preferred_lft forever
    inet6 fe80::20c:29ff:fe02:b03a/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: tunl0@NONE:  mtu 1480 qdisc noqueue state UNKNOWN group default qlen 1000
    link/ipip 0.0.0.0 brd 0.0.0.0
    inet 172.25.250.100/32 scope global tunl0
       valid_lft forever preferred_lft forever

配置 RS

注意:rs1 和 rs2 添加 VIP 的时候使用命令的时候都需要使用 ifconfig ,若一台使用 ip addr add,一台使用 ifconfig 会导致客户端访问失败

rs1

#删除原有的VIP
[root@rs1 ~]# ip addr del 172.16.0.100/32 dev lo
[root@rs1 ~]# ip a show lo
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
[root@rs1 ~]# ifconfig tunl0 172.25.250.100 netmask 255.255.255.255 up
[root@rs1 ~]# lsmod | grep ipip
ipip                   20480  0
tunnel4                16384  1 ipip
ip_tunnel              36864  1 ipip

rs2

#删除原有的 VIP
[root@rs2 ~]# ip addr del 172.16.0.100/32 dev lo

#添加 tunl0 的 VIP
[root@rs2 ~]# ifconfig tunl0 172.25.250.100 netmask 255.255.255.255 up
[root@rs2 ~]# lsmod | grep ipip
ipip                   20480  0
tunnel4                16384  1 ipip
ip_tunnel              36864  1 ipip

在 RS 上增加内核参数

配置内核参数的目的:解决多个服务器处于同一个网段使用相同IP地冲突的问题

rs1

#添加内核参数
[root@rs1 ~]# vim /etc/sysctl.conf
[root@rs1 ~]# cat /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@rs1 ~]# 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

rs2

#添加内核参数
[root@rs2 ~]# vim /etc/sysctl.conf
[root@rs2 ~]# cat /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@rs2 ~]# 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

配置 LVS 规则

#清空规则
[root@lvs ~]# ipvsadm -C

#查看是否情况完成
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn

#添加规则,tun 模式用 -i
[root@lvs ~]# ipvsadm -A -t 172.25.250.100:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 172.25.250.7:80 -i -w 3
[root@lvs ~]# ipvsadm -a -t 172.25.250.100:80 -r 172.25.250.17:80 -i -w 1
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.250.100:80 wrr
  -> 172.25.250.7:80              Tunnel  3      0          0         
  -> 172.25.250.17:80             Tunnel  1      0          0         

#重启服务
[root@lvs ~]# systemctl restart ipvsadm

#再次查看确保规则还在
[root@lvs ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
TCP  172.25.250.100:80 wrr
  -> 172.25.250.7:80              Tunnel  3      0          0         
  -> 172.25.250.17:80             Tunnel  3      0          0 

测试

[root@client ~]# curl 172.25.250.100
rs1 172.25.250.7
[root@client ~]# curl 172.25.250.100
rs1 172.25.250.7
[root@client ~]# curl 172.25.250.100
rs1 172.25.250.7
[root@client ~]# curl 172.25.250.100
rs2 172.25.250.17
[root@client ~]# curl 172.25.250.100
rs1 172.25.250.7
[root@client ~]# curl 172.25.250.100
rs1 172.25.250.7
[root@client ~]# curl 172.25.250.100
rs1 172.25.250.7
[root@client ~]# curl 172.25.250.100
rs2 172.25.250.17

因为这是的权重写的是 3:1 所以返回的次数也就是 3 次 1 次

测试成功,TUN 模式项目搭建完成

总结

TUN模式:请求过 lvs,响应不过 lvs,它必须开通 tunl0 --> ipip 模式

你可能感兴趣的:(lvs,服务器,网络,linux,运维,tun)