深入浅出 LVS 负载均衡(三)实操 NAT、TUNNEL 模型

深入浅出 LVS 负载均衡系列概览(已完结)

📌 本系列按照负载均衡器对数据包的处理方式分类,从计算机间通信的角度出发,浅谈 NAT、FULLNAT、DR、TUN 模型的实现原理。
LVS(Linux Virtual Server) 是一个虚拟服务器集群系统。工作在 OSI 模型的传输层,即四层负载均衡。LVS 本身实现了 NAT、DR、TUN 模型,这些模型仅做数据包的转发,而不会与客户端建立连接,成本低效率高。FULLNAT 基于 NAT 实现,LVS 本身不支持,需要额外对内核打补丁后才能使用。

之前介绍了 LVS 负载均衡 NAT、FULLNAT、DR、TUN 模型的实现原理。现在来动手实践一下~

实验环境

LVS 目前已经是 Linux 内核中的一部分,在内核中的模块叫做 ipvs,支持 NAT、DR、TUNNEL 模型。用户不能直接操作 ipvs 模块,需要安装交互软件 ipvsadm,使用 ipvsadm 和 ipvs 进行交互。


我使用 3 台 UCloud 云主机来搭建实验环境,创建云主机的时候选择分时购买,更划算一点。

  • 实验机器及环境

    • 3 台 UCloud 云主机,CentOS 7.9 64 位,1 核 1 G,需要注意一下防火墙规则,我选择的是【Web 服务器推荐】,开放 22、3389、80、443 的端口号,这个可以自行配置
      • 两台 Real Server:RS01、RS02,一台负载均衡服务器:LB01
      • RS01:10.23.190.76、RS02:10.23.122.152、LB01:10.23.21.184
    • RS01、RS02 安装 httpd,快速启动 http 服务器,且配置不同的请求响应
    • LB01 安装 ipvsadm,并启动 ipvsadm
  • 实验机器展示

    实验机器

NAT 模式实操

NAT

先来回顾一下 NAT 模式的特点:

  • NAT 模式修改数据包的「目标 IP 地址」或 「源 IP 地址」,所有的请求数据包、响应数据包都要经过负载均衡器,所以 NAT 模式支持对端口的转换**
  • 真实服务器的默认网关是负载均衡器,所以真实服务器和负载均衡器必须在同一个网段

实操开始,首先我们要做一些前置的准备工作,即把该安装的软件和服务,安装和启动起来。

1. RS01、RS02 安装 httpd,快速启动 http 服务

  • yum install httpd -y && service httpd start

  • echo "Hello From RS01/RS02" > /var/www/html/index.html

  • 验证:curl 0.0.0.0,返回对应的信息

2. LB01 安装 ipvsadm,并启动 ipvsadm

  • yum install ipvsadm && ipvsadm --save> /etc/sysconfig/ipvsadm && service ipvsadm start

    看到下图就表示成功启动了 ipvsadm

ipvsadm

3. 对照 NAT 模式来配置具体的负载规则。

  • RS01、RS02

    1. 设置默认网关为 DIP,即 LB01 的内网 IP - 10.23.21.184
      • 查看 RS01、RS02 当前的默认网关

        • route -n , 可以看到当前的默认网关是 10.23.0.1

          route -n
      • 设置默认网关为 10.23.21.184

        • route add default gw 10.23.21.184

        • 输入命令并按下回车之后,会很长时间没有响应,是正常的。我们等它连接断掉之后,再通过 LB01 登陆到 RS01、RS02 上

      • 删除之前的默认网关

        • route del default gw 10.23.0.1

  • LB01

    1. 配置路由入口规则,使用 -A 参数

      • 因为实验使用的是云主机,而云主机的 EIP 或者说外网 IP 地址,本身就是通过 NAT 方式映射到了绑定的云主机上,所以不能将 EIP 当作 VIP 绑定端口。这里就直接将内网 IP 当作 DIP 使用。
      • ipvsadm -A -t 10.23.21.184:8000 -s rr
    2. 配置路由入口规则,使用 -a 参数

      ipvsadm -a -t 10.23.21.184:8000 -r 10.23.190.76:80 -m
      ipvsadm -a -t 10.23.21.184:8000 -r 10.23.122.152:80 -m

  • 验证配置

    • ipvsadm -ln

    • 开启路由转发

      • echo 1 >/proc/sys/net/ipv4/ip\_forward

    这里大概解释下对 ipvsadm 的配置信息

    • -A 添加一条新的虚拟服务器记录,即添加一台新的虚拟服务器

    • -a 添加一条新的真实服务器记录,即在虚拟服务器中添加一台真实服务器

    • -t 真实服务器提供的是 TCP 服务

    • -s 负载均衡使用的调度算法,rr 表示轮询

    • -w 设置权重

    • -r 指定真实服务器

    • -m 指定 LVS 使用 NAT 模式

    • -g 指定 LVS 使用 DR 模式

    • -i 指定 LVS 使用 TUNNEL 模式

可以看到,我们配置的是使用 NAT 模式,调度算法为轮询。到这里我们的配置就全部完成了,接下来让我们验证一下 LB01 能不能按照预期负载到 RS01、RS02 。使用浏览器直接打开 LB01 的外网 IP 地址。

|---------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------|
| | |

由于浏览器的缓存机制,在短时间内刷新的时候,返回可能不会发生变化。可以使用 curl 更准确的查看。

验证

成功撒花✿✿ヽ(°▽°)ノ✿~

TUNNEL 模式实操

TUN

回顾一下 TUNNEL 模式的特点:

  • TUNNEL 模式不改变原数据包,而是在原数据包上新增一层 IP 首部信息。所以 TUNNEl 模式不支持对端口的转换,且真实服务器必须能够支持解析两层 IP 首部信息
  • 真实服务器和负载均衡器可以不在同一个网段中
  • 真实服务器需要更改 ARP 协议,"隐藏" lo 接口上的 VIP

TUNNEL 模式和其他模式有点不同,不能像之前那样直接使用 VIP 来充当 DIP。所以我们需要额外一个 DIP:10.23.21.180。

开始配置具体的负载规则~

  • RS01、RS02

    • 安装 ipip 模块

      • modprobe ipip
    • 验证 ipip 模块是否加载成功

      • lsmod | grep ipip
    • 修改 ARP 协议

      bash 复制代码
      *   echo 1 > /proc/sys/net/ipv4/conf/tunl0/arp\_ignore
      *   echo 2 > /proc/sys/net/ipv4/conf/tunl0/arp\_announce
      *   echo 1 > /proc/sys/net/ipv4/conf/all/arp\_ignore
      *   echo 2 > /proc/sys/net/ipv4/conf/all/arp\_announce
      
      
      rp\_filter 表示是否开启对数据包源地址的校验,这里我们直接关闭校验即可。
      
      *   echo 0 > /proc/sys/net/ipv4/conf/tunl0/rp\_filter
      *   echo 0 > /proc/sys/net/ipv4/conf/all/rp\_filter
    • 配置 DIP

      • ifconfig tunl0 10.23.21.180 broadcast 10.23.21.180 netmask 255.255.255.255 up
      • route add -host 10.23.21.180 tunl0
    • 验证配置

      • ifconfig

        ifconfig
      • route -n

        route -n
  • LB01

    • 配置路由入口规则

      • ipvsadm -A -t 10.23.21.180:80 -s wrr
    • 配置路由出口规则,由于在不同的网段,这里需要配置 RS01、RS02 的外网地址

      markdown 复制代码
      *   ipvsadm -a -t 10.23.21.180:80 -r 10.23.190.76 -i -w 1
      *   ipvsadm -a -t 10.23.21.180:80 -r 10.23.122.152 -i -w 1
    • 配置 DIP

      markdown 复制代码
      *   安装 ipip 模块  `modprobe ipip`
      *   ifconfig tunl0 10.23.21.180 broadcast 10.23.21.180 netmask 255.255.255.255 up
      *   route add -host 10.23.21.180 tunl0
  • 验证配置

    • ipvsadm -ln

    • route -n

      route -n

    配置完成,我们再申请一台云主机来验证实操结果。DIP 是我们虚拟出来的 IP 地址,所以实际在网络中是找不到的,我们需要先手动将访问 DIP 的路由,访问到 LB01 上。

    • route add -host 10.23.21.180 gw 10.23.21.184

    • route -n

      route -n

    现在让我们来验证一下 TUNNEL 模型是否成功~

成功撒花✿✿ヽ(°▽°)ノ✿~

预告:下篇继续 DR 模型的实操,及使用 Keepalived 实现 DR 模型的高可用。

原创不易,期待点赞收藏,任何建议欢迎评论区交流~
more about me

相关推荐
眷怀12 小时前
网卡绑定bonding
linux·运维·服务器·网络·云计算
数勋API13 小时前
银行卡归属地查询API接口如何用PHP调用
开发语言·云计算·php
tmgmforex202416 小时前
亚马逊云计算部门挑战英伟达,提供免费AI计算能力
人工智能·科技·云计算
petaexpress16 小时前
多链路负载均衡设置在哪里?
网络·智能路由器·负载均衡·多链路负载均衡
运维佬18 小时前
nginx配置负载均衡详解
运维·nginx·负载均衡
CCSBRIDGE19 小时前
给阿里云OSS绑定域名并启用SSL
阿里云·云计算·ssl
沈艺强20 小时前
云计算在esxi 主机上创建 4g磁盘,同时在此磁盘上部署linux
云计算
九河云1 天前
AWS EC2镜像费用详解:什么是免费的,什么是收费的?
服务器·云计算·aws
杰森V+1 天前
融云:社交泛娱乐出海机会尚存,跨境电商异军突起
网络·云计算
腾讯蓝鲸智云2 天前
大模型在蓝鲸运维体系应用——蓝鲸运维开发智能助手
运维·自动化·云计算·sass