

深入浅出 LVS 负载均衡(三)实操 NAT、DR 模型
source link: https://zhuanlan.zhihu.com/p/381484413
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

深入浅出 LVS 负载均衡(三)实操 NAT、DR 模型
之前介绍了 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 模式修改数据包的「目标 IP 地址」或「源 IP 地址」,所有的请求数据包、响应数据包都要经过负载均衡器,所以NAT模式支持对端口的转换
- 真实服务器的默认网关是负载均衡器,所以真实服务器和负载均衡器必须在同一个网段
实操开始,首先要做一些前置的准备工作,即把该安装的软件和服务,安装和启动起来。
RS01、RS02 安装 httpd,快速启动 http 服务
yum install httpd -y && service httpd start
echo "HelloFrom RS01/RS02" > /var/www/html/index.html
验证:curl 0.0.0.0,返回对应的信息:
LB01 安装 ipvsadm,并启动 ipvsadm
yum install ipvsadm && ipvsadm --save> /etc/sysconfig/ipvsadm && service ipvsadm start
看到下图就表示成功启动了 ipvsadm
做完这些前置准备工作之后,接下来对照 NAT 模式来配置具体的负载规则。
RS01、RS02设置默认网关为 DIP,即 LB01 的内网 IP - 10.23.21.184
- 查看 RS01、RS02 当前的默认网关
route -n
- 可以看到当前的默认网关是 10.23.0.1
设置默认网关为 10.23.21.184
- route add default gw 10.23.21.184
- 输入命令并按下回车之后,会很长时间没有响应,是正常的。等它连接断掉之后,再通过 LB01 登陆到 RS01、RS02 上
删除之前的默认网关
- route del default gw 10.23.0.1
配置路由入口规则,使用 -A 参数
- 因为实验使用的是云主机,而云主机的 EIP 或者说外网 IP 地址,本身就是通过 NAT 方式映射到了绑定的云主机上,所以不能将 EIP 当作 VIP 绑定端口。这里就直接将内网 IP 当作 DIP 使用
ipvsadm -A -t 10.23.21.184:8000 -s rr
配置路由入口规则,使用 -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 模式实操
回顾一下 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 协议
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
route -n
配置路由入口规则
ipvsadm -A -t 10.23.21.180:80 -s wrr
配置路由出口规则,由于在不同的网段,这里需要配置 RS01、RS02 的外网地址
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
- 安装 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
配置完成,再申请一台云主机来验证实操结果。
DIP 是虚拟出来的 IP 地址,所以实际在网络中是找不到的,需要先手动将访问 DIP 的路由,访问到 LB01 上。
route add -host 10.23.21.180 gw 10.23.21.184
- 验证一下(route -n)
最后来验证一下 TUNNEL 模型是否成功。
验证成功~
下篇将继续围绕 DR 模型的实操,及使用 Keepalived 实现 DR 模型的高可用。
其他系列文章:
Recommend
-
19
今天总结一下负载均衡中LVS与Nginx的区别,好几篇博文一开始就说LVS是单向的,Nginx是双向的,我个人认为这是不准确的,LVS三种模式中,虽然DR模式以及TUN模式只有请求的报文经过Director,但是NAT模式,Real Server回复的报文也会经过Director Server地...
-
10
深入浅出 LVS 负载均衡系列(一):NAT、FULLNAT 模型原理LVS(Linux Virtual Server)是一个虚拟服务器集群系统。工作在 OSI 模型的传输层,即四层负载均衡。LVS 本身实现了 NAT、DR、TUN 模型,这些模型仅做数据包的转发,而不会与客户端建立连接,...
-
10
深入浅出 LVS 负载均衡系列(二):DR、TUN 模型原理上篇从计算机间的通信说起,知道通信必要的六要素是 源 IP 地址、端口号、源 MAC 地址,目标 IP 地址、端口号、目标 MAC 地址。其中,端口号标志了在应用层的两个具体应用信息,即快递的具体发送人...
-
2
本文主要讲述 LVS-NAT 原理介绍和配置实践,HA 高可用方案基于 Keepalived。 LVS-NAT 原理介绍和配置实践 2019 年 09 月 03 日 - 拆分 LVS-Keepalived 中 LVS-NAT2019 年 08 月 23 日 - 更新 LVS/NAT、LVS/DR、...
-
7
一.LVS-DR数据包流向分析1.为方便进行原理分析,将client与群集机器放在同一网络中,数据包流经的路线为1-2-3-4
-
13
http重定向原理下载网站用的较多,其实也算一种负载均衡,工作在应用层的业务代码中 根据用户的http请求计算出一个真实的web服务器地址,并将该web服务器地址写入http重定向响应中返回给客户浏览器,由浏览器重新进行访问
-
11
LVS四层负载均衡集群(1)集群功能分类 - LB 原创 资本家的鱼 2022-06-13...
-
4
LVS四层负载均衡集群(6)LVS工作模式 原创 资本家的鱼 2022-06-13 02:19...
-
5
LVS 负载均衡 本篇主要介绍一下 lvs 是什么 以及它的 nat 模式的搭建 配合nginx来演示
-
7
LVS负载均衡DR模式 精选 原创 阿晴晴晴 2023-01-07 10:12:48...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK