访问效果

涉及内容:浏览拆分、 DNS 解析、反向代理、负载均衡、数据库等
1 集群
1.1 集群类型简介
对于⼀个业务项⽬集群来说,根据业务中的特性和特点,它主要有三种分类:
高扩展 (LB) :单个主机负载不足的时候,采取增加主机的方式来满足负载需求的解决方案。
高可用(HA):集群中的某主机失效时,避免业务中断,我们将其任务转交给其他主机的解决方案。
高性能 (HPA) :通过某些技术,实现同样资源来承受更多用户请求负载的解决方案。
1.2 高扩展集群
⾼ 扩展集群 (Load Balancing Cluster), 也称 " 负载均衡集群 " 。
它是指在当前业务环境集群中,所有的主机节点都处于正常的工作活动状态,它们共同承担起用户的请求带来的工作负载压力,保证用户的正常访问。
1.3 高可用集群
⾼可⽤集群 (High Availability Cluster) ,也称 " 主机冗余 " 集群。
它是指将 核心业务使用多台 ( 一般是 2 台 ) 主机共同工作,支撑并保障核心业务的正常运行,尤其是业务的对外不间断的对外提供服务。核心特点就是 " 冗余 " .
它存在的目的就是为了解决单点故障 (Single Point of Failure) 问题的。
A = MTBF / (MTBF + MTTR)
MTBF(Mean Time Between Failure), 即平均故障间隔时间,表示产品多长时间出现一次问题。
MTTR(Mean Time To Restoration) ,即平均恢复时间 产品,从故障到稳定状态的维修花费时间。

1 年 = 365 天 = 8760 小时。
90 % 的可用性 = ( 1 - 90 % ) * 365 = 36.5 天 , 又称 1 个 9 。
1.4 ⾼性能集群(HPA)
⾼性能集群 (High Perfermance Computing Cluster) ,也称科学计算集群。
它是基于前两种技术实现的集群基础上,将多个计算机通过高速网络连接起来,协同工作以完成复杂的计算任务或处理大量数据的系统。高效利用这些主机资源,结合某些特有的技术方案,提供的强大的计算能力,从而实现特定用户 | 大型任务的高复杂度数据处理功能,比如生物计算、大场景模拟计算、预测计算等。
1.5 集群实现细节
前置知识:OSI 七层模型
物理层 ( 网线、 MAC)
数据链路层 (ARP 、 PPTP)
网络层 (IP 、 ICMP)
传输层 (Port)
会话层 (Session , ssl , tsl 、 rpc)
表示层 ( 各种文件格式, JPEG 、 ASCll)
应用层 (HTTP / HTTPS 、各种应用服务 )
LVS 可以实现二~四层的负载均衡效果
Nginx 可以实现四~七等的负载均衡效果
Haproxy 可以实现四~七层的负载均衡效果
阿里云 可以实现四~七层的负载均衡效果
阿里云ALB(七层负载均衡),阿里云NLB(四层负载均衡),阿里云 CLB(传统型负载均衡)
https://help.aliyun.com/zh/slb/
AWS 可以实现四~七层的负载均衡效果
ALB(七层负载均衡),AWS NLB(四层负载均衡),AWS CLB(传统型负载均衡)
https://aws.amazon.com/cn/elasticloadbalancing/
1.6 ⼯作的协议层次分类[M]
⼯作在传输层(四层)的负载均衡:
传输层负载均衡基于四层通用协议( TCP / UDP )进行调度
LVS
nginx (基于 stream 划模块)
haproxy (基于 tcp 模式)
阿里云 NLB 和 CLB
AWS NLB 和 CLB
⼯作在应⽤层(七层)的负载均衡:
应用层负载均衡通常基于应用层特定协议进行调度,又被称为 proxy server
基于 http 协议的负载均衡: nginx , httpd , haproxy ( mode http ) , ......
基于 fastcgi 协议的负载均衡: nginx , httpd , ......
基于 mysql 协议的负载均衡: mysql-proxy , mycat , ......
2 LVS基础
防⽕墙的五表五链
security : 对数据包的 mac 信息进行过滤
filter :对主机接收的数据包实现过滤功能,它是 iptables 的默认规则。
nat : 对主机接收的数据包实现转换功能,端口映射,地址映射等 , 使用场景比较多表。
mangle : 用于对特定数据包的修改,报文拆开,修改,封装表
raw : 特殊场景下实现的自定义规则
PREROUTING : 数据包进入路由表之前 INPUT : 通过路由表后目的地为本机
FORWARD : 通过路由表后,目的地不为本机 OUTPUT : 由本机产生,向外转发
POSTROUTIONG : 发送到网卡接口之前
效果图

数据包转发场景:
nat 【 prerouting 】 forwardfilter 的 forwardnat 的 postrouting 离开主机
数据包处理场景:
nat 【 prerouting 】 forwardfilter 【 input 】 local processroutingnat 【 output 】 filter 【 output 】 nat
【 postrouting 】离开主机
SNAT 和 DNAT
⽹络数据包,我们主要是根据请求报⽂中的数据地址转换划分为 SNAT 和 DNAT ,⽽不是响应数据包。

1.1 LVS简介
LVS ,全称 Linux Virtual Server ,即 Linux 虚拟服务器。它是 1998 年 5 月由章文嵩博士发起的一个中国的开源软件项目,官方网站是 http :// www.linuxvirtualserver.org 。
LVS 基于 IP 负载均衡 | 内容请求分发等技术,整合了一些特有的理念和思想后的一套解决方案。普通的 linux 主机可以基于 lvs 提供的负载均衡技术,实现一个高扩展的 linux 的服务器集群。
官方网站: http :// www.linuxvirtualserver.org /
完整资料: http :// www.austintek.com / LVS / LVS-HOWTO / HOWTO / index.html
1.2 项目结构
⼀般来说,LVS集群有三部分组成
负载调度器 (load balancer) ,负责将客户的请求调度到后端主机上。
服务器池 (server pool) ,真正响应用户请求的后端主机。
共享存储 (shared storage) ,存储配置、元数据等相关信息
LVS 集群提供了四种主要的资源调度功能:
NAT(NAT) 修改请求数据包的目标 ip 地址,实现请求转发功能
Tunneling(TUN) 给请求数据包外部增加新的 ip 首部,实现请求转发功能
DirectRouting(DR) 修改请求数据包的 mac 地址,实现请求转发功能
FULLNAT 结合 SYNPROXY 技术,修改数据包的源 ip 地址和目标 ip 地址,实现请求转发功能
1.3 常见术语
物理术语 - ⽤于描述主机的常见术语
DS:Director Server。
指的是 LVS 集群中的负责调度 (Dispatcher) 或者负载均衡 (Load Balancer) 的主机,即部署 LVS 的主机。 也称 VS(Virtual Server) 。
RS:Real Server。
指的是这正相应用户主机的后端服务器主机。 也称 BS(Backend Server) 。
逻辑术语 - 用于描述逻辑关系的常见术语
VIP:Virtual Server IP
LVS 主机上用于向外部用户提供服务的 ip 地址,作为用户请求的目标的 IP 地址。
它是一个在物理主机上没有物理网卡的 ip 地址,一般用于 LVS 主机的外网 ip 。
DIP:Director Server IP
LVS 主机上和后端提供真正服务的主机通信的 IP 地址。
它是一个独立的物理网卡上的地址,一般用于 LVS 主机的内网 ip 。
RIP:Real Server IP
在 LVS 调度主机后端,真正响应用户请求的主机 IP 地址。
CIP:Client IP
发起请求的用户客户端 IP 地址。 一般都是外网 ip 地址。
这四者之间的访问关系: CIP <--> VIP == DIP <--> RIP

实践的时候往往在 LVS 上配置两个网卡,⼀个对外,⼀个对内
为了达到不同网段的 ip 地址能够达到正常的通信,我们需要开启 linux 服务的 ip 转发功能
方法一:在 / etc / sysctl.conf 中开启功能 net.ipv4.ip_forward = 1
方法二:直接修改 ip_forward 文件 echo 1 > / proc / sys / net / ipv4 / ip_forward
注意: 0 代表禁用, 1 代表开启。
1.4 工作流程
在 LVS 集群环境中,用户请求的处理流程如下:
1 用户在客户端发起访问服务的请求
2 经过层层的 dns 解析原理,获取服务的提供 ip 地址 -- VIP
3 客户端向 VIP 所在的 LVS 主机 (VS) 发起服务请求
4 LVS 主机 (VS) 接收到用户请求,根据自身的配置,将用户请求转交到后端的某主机 (RS)
5 用户请求经 LVS 的 DIP 网卡,进入到公司内网环境
6 根据数据包的结构,找到真正提供服务的后端主机 (RS)
7 公司内部的后端主机,处理用户请求后,采用某种方式返回给客户端

1.3 软件环境
LVS 软件 由 2 部分程序组成: ipvs 和 ipvsadm 。
ipvs(ip virtual server):一个 支持多种 IP 负载均衡技术的 IP 虚拟服务器的软件。
ipvsadm 是工作在用户空间的命令行工具,负责为 ipvs 的资源调度编写转交规则。
查看内核模块关于 ipvs 的信息
grep -i -C 2 ipvs /boot/config-6.8.0-51-generic 注:颜色的是uname -r 系统的版本号
注:里面字符的表示含义如下
m 表现为模块方式,按需加载。
y 表现为直接内签到内核中,开机就加载。
modinfo ip_vs # 查看模块信息
1.4 软件部署
ubuntu系统为例
apt info ipvsadm #查看版本信息
apt install ipvsadm #安装软件
dpkg -L ipvsadm #查看软件
ipvsadm --version #查看版本信息
1.5 集群状态查看
命令格式: ipvsadm - Ln
格式详解:
- L 显示当前的服务或者目标主机信息
- n 地址和端口的数字输出
有规则⽂件 /proc/net/ip_vs 专⻔记录这些规则信息

1.6 工作模式解读
LVS 官方支持三种工作模式,分别是 NAT 模式, DR 模式, TUN 模式
1. NAT 模式
NAT : Network address translation (网络地址转换)
LVS 本质上使用的类似于 iptables 里面的 DNAT 策略
- LVS 工作于内核上,而不是 iptables 的五表五链上
整个网络环境需要涉及到两个网段:公网网段、私网网段
请求报文和响应报文都必须经由 LVS 转发, LVS 易成为系统瓶颈
- 数据包进入到私网的时候,转换的是目标 ip 地址,因为提供服务的是 RIP 主机
- 数据包进入到外网的时候,转换的是源 ip 地址,因为数据包来的时候,找的就是 VIP
RIP 和 DIP 应在同一个 IP 网络,且应使用私网地址;
- 由于数据包在流转的时候,尤其是 RS 响应的数据包要走到 lvs 主机,所以必须 配置网关地址DIP
- 支持端口映射,可修改请求报文的目标 PORT
其他内容
- VS 必须是 Linux 系统, RS 可以是任意 OS 系统
- LVS 主机需要开启 ip_forward 转发
小结
NAT 双网段 来去数据包流经LVS主机 LVS主机开启数据包转发
2. DR 模式
DR : Direct Routing(直接路由)
是 LVS 的 默认模式 ,应用广泛,通过为请求报文重新封装一个 MAC 首部进行转发,源 MAC 是 DIP 所在的接口的 MAC ,目标 MAC 是某挑选出的 RS 的 RIP 所在接口的 MAC 地址;源 IP/ PORT ,以及目标 IP / PORT 均保持不变,但源 MAC 和目标 MAC 会发生改变, DR 模式下,数据链路层之上的内容不会发生变化。
DR模式的特点
LVS 服务器 和 RS 服务器 上都配置有 VIP 地址
RS 的 RIP 可以使用私网地址,也可以是公网地址
LVS 服务器只处理请求报文,不处理响应报文
RS 服务器可以使用大多数 OS 系统(支持相关网络设置即可)
3 TUN 模式
TUN : IP tunneling ( IP 隧道)
TUN 模式不修改请求报文的 IP 首部(源 IP 为 CIP ,目标 IP 为 VIP ),而是在原 IP 报文之外再封装一个 IP 首部 (源 IP 为 DIP ,目标 IP 为 RIP ),再将报文发往后端 RS , RS 直接响应客户端(源 IP 是 VIP ,目标 IP 是 CIP ), TUN 模式与 DR 模式的区别是 TUN 模式下 LVS 服务器和后端 RS 可以不在同一个物理网络,可以跨公网。
相较于 DR 模型来说,它修改的是 更深层的 ip 报文,所以性能有些差。但是好处是可以跨网络。
3 调度分类
lvs 的调度算法,站在 " 是否考虑到后端主机负载 " 的⻆度可以划分为以下三类
静态方法:仅仅从调度策略本身实现的功能角度进行工作 RR 、 WRR 、 DH 、 SH
RR : Round Robin ,轮询算法
WRR : Weight RR ,加权轮询算法
SH : Source Hash ,源 IP 地址 hash
DH : Destinatio Hash ,目标 IP 地址 hash
动态方法:在满足调度策略本身实现功的前提下,还要考虑后端主机的动态负载效果
LC 、 WLC 、 LBLC 、 LBLCR 、 SED 、 NQ
LC : Least Connections ,最少连接算法
WLC : Weighted Least Connections ,加权最少连接算法,此算法是 LVS 的 默认调度算法
SED : Shortest Expected Delay ,最短延迟调度算法,此算法是 WLC 算法的改进版
LBLC : Locality-Based Least Connections ,基于局部性的最少链接调度算法
LBLCR : Locality-Based Least Connections with Replication ,带复制的基于局部性的最少链接调度算法
高版本内核中新增的调度算法 : 在 4.15 版本的内核中新增的方法 FO 、 OVF 、 MH 、 TNDR 等
FO : Weighted Fail Over ,权重过载算法
OVF : Overflow-connection ,溢出连接算法
MH : Masquerading Hashing ,源 IP 地址 hash
TNDR : Two Node Direct Routing ,直接路由调度,而不使用 NAT 网络转换
4 LVS实践
1.增加集群
命令格式: ipvsadm - A - t | u | f service_address : port [ - s scheduler] [ - p [timeout]]
格式详解:
- A 增加 lvs 集群
- t 指定 lvs 主机地址信息
- t 指定 lvs 集群服务主机的 tcp 端口
- u 指定 lvs 集群服务主机的 udp 端口
-f 指定 lvs 集群服务主机采用的防火墙自定义规则的标记,默认是数字
- s 指定 lvs 集群的调度策略,默认是 wlc
例:
ipvsadm - A - t 192.168.8.14 : 80
ipvsadm - A - t 192.168.8.15 : 80
2.编辑集群
命令格式: ipvsadm - E - t service_address : port [ - s scheduler]
格式详解:
- E 编辑 lvs 集群的信息
注意: 更改集群信息的时候,只能更改已存在的 lvs 集群的细节属性,不能直接将 lvs 的地址更改
例:
ipvsadm - E - t 192.168.8.15 : 80 - s lc
ipvsadm - E - t 192.168.8.14 : 80 - p 30
3.删除集群
命令格式: ipvsadm - D - t service_address : port
格式详解:
- D 删除指定 lvs 集群的信息
- C 删除所有 lvs 集群的信息
注意: 删除集群信息的时候,必须指定已存在的 lvs 集群地址,协议也必须正确
例:
方法 1 :
ipvsadm - D - t 192.168.8.14 : 80
ipvsadm - D - t 192.168.8.15 : 80
方法 2 :
ipvsadm - C
4.主机命令
增加主机
命令格式: ipvsadm - a - t service_address : port - r server-address : port - g | m | i [options]
格式详解:
- a 给 lvs 集群增加一个真实主机 RS
- r 指定真实主机的地址信息,格式是 IP : [Port],Port 可以省略
- g | m | i 设定后端主机的转发模式
- g 采用默认的 direct routing 模式
- m 采用 masquerading 的 nat 模式
- i 采用 ipip 的 tunneling 模式
三者只能选择其一
- w 指定真实主机的权重信息
例:
ipvsadm - A - t 192.168.8.14 : 80
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.16
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.16
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168

添加主机的时候,增加扩展属性
- r 指定 RS 主机端口的效果,只有采用 - m 参数的时候会生效,否则都使用默认的 80 端口
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.15 : 88
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.15 : 88 - m
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.15 : 89 - m - w 3

注意:
在向 lvs 集群中增加真实主机的话,一定要保证指定的 lvs 集群地址存在而且正确。
lvs 本质上是一种网络扩展方案,即使网络不通,也可以随意增加真实主机的地址,只是不能用。
- r 指定 RS 主机端口的效果,只有采用 - m 参数的时候会生效,否则都使用默认的 80 端口。
编辑主机
命令格式: ipvsadm - e - t service_address : port - r server-address : port [options]
格式详解:
- e 修改真实主机的属性信息
- m 设定真实主机的转发模型信息为 nat 模型
注意:
修改真实主机信息的时候,必须指定已存在的 lvs 集群地址,协议也必须正确
- m 和 - i 不能同时使用
ipvsadm - e - t 192.168.8.14 : 80 - r 192.168.8.16 : 80 - m # 转换成 NAT 模式
注意: Tun 转发模式的标志是 Tunnel , Nat 转发模式的标志是 Masq
对非默认端口的 RS 主机使用 - i ,它只会对同 ip 的默认 80 端口生效
如果想让 Rs 主机的模式从 nat 模式转换为其他模式的话,⽆法直接修改,只能先删后增。
删除主机
命令格式: ipvsadm - d - t service_address : port - r server-address : port
格式详解:
- d 删除真实主机的属性信息
注意:
lvs 服务主机和 rs 真实主机的地址必须指定正确
单个删除 RS 主机有些繁琐,我们可以直接采用删除 lvs 主机的效果清空所有目标主机
单个清理主机
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168.8.15 : 89
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168.8.16
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168.16
ipvsadm - d - t 192.168.8.14 : 80 - r 192.168
规则命令
对于 ipvsadm 来说,我们可以通过 ipvsadm-save 的命令来查看和保存 lvs 的相关规则。
命令格式: ipvsadm-save [ - n]
格式详解:
- n 以精确的数字格式打印出 lvs 规则,如果不加 - n 的话,他会基于域名解析,将相应的 ip 转换成主机名展示 使用 ipvsadm - Sn 可以实现同样的效果
保存规则
通过 ipvsadm-save + > 的方式实现 规则的保存
ipvsadm-save - n > n-ipvsadm
ipvsadm-save > non-ipvsadm
清空规则
命令格式: ipvsadm - C
格式详解:
- C 清空 lvs 服务集群规则
导⼊规则
命令格式: ipvsadm-restore < 规则文件
注意:
我们在导入的规则的时候,如果备份是基于主机名的 lvs 规则,主机名解析记录的正确与否很关键。 我们使用 ipvsadm - R 也可是实现同样的效果
导⼊ 携带 -n 的备份规则⽂件
ipvsadm-restore < n-ipvsadm
规则保存
对于 ipvsadm 设置的规则来说,它是我们操作 lvs 规则的常⻅⽅法,⽽且是以命令⾏的⽅式来运⾏的,但是这种命令⾏编写的规则,好处就是灵活⽣效快,但是缺点就是重启主机后规则⾃动清空。
准备规则
ipvsadm -A -t 192.168.8.14:80
ipvsadm -A -t 192.168.8.15:80
ipvsadm -a -t 192.168.8.15:80 -r 192.168.8.17
ipvsadm -a -t 192.168.8.14:80 -r 192.168.8.18
cat /etc/ipvsadm.rules #查看默认的规则保存⽂件
service ipvsadm save #保存规则
增加⼀条规则
ipvsadm -a -t 192.168.8.14:80 -r 10.0.0.130 -m -w 30
ipvsadm -Ln
保存新规则到规则⽂件
ipvsadm-save -n > /etc/ipvsadm.rules
cat /etc/ipvsadm.rules
但是这种⽅式保存服务后,重启主机后,默认不会⾃动加载
reboot
ipvsadm -Ln
代码实现效果如下


但是这种⽅式保存服务后,重启主机后,默认不会⾃动加载
开机自动加载方式1
修改 ipvsadm 的配置⽂件
root @ubuntu24-13: ~ # vim /etc/default/ipvsadm
# if you want to start ipvsadm on boot set this to true
AUTO = "true" # 将 false 改为 true
重启主机后,可以看到会⾃动加载规则⽂件
开机自动加载方式2
root @ubuntu24-13: ~ # cat /etc/rc.local
#!/bin/bash
ipvsadm-restore < / etc / ipvsadm.rules
为该文件增加执行权限
root @ubuntu24-13: ~ # chmod +x /etc/rc.local
Rocky系统规则保存策略
ipvsadm - A - t 192.168.8.14 : 80
ipvsadm - A - t 192.168.8.15 : 80
ipvsadm - a - t 192.168.8.15 : 80 - r 192.168.8.17
ipvsadm - a - t 192.168.8.14 : 80 - r 192.168.8.18
ipvsadm-save - n > / etc / sysconfig / ipvsadm #保存规则
systemctl enable ipvsadm.service #设置为开启⾃启
5 防⽕墙标识
FWM:FireWall Mark
LVS ( Linux Virtual Server )的防火墙标记 FWM ( Firewall Mark )是一种用于在 LVS 负载均衡环境中对报文进行分类和管理的技术。
功能定制
1 使⽤ iptables 定义防⽕墙标记
在 Director 主机上执行命令
iptables - t mangle - A PREROUTING - d $vip - p $proto – m multiport -- dports $port1 , $port2 , …
- j MARK -- set-mark NUMBER 。
命令解析
- t mangle 指定操作的是 mangle 表;
- A PREROUTING 将规则追加到 PREROUTING 链;
- d $vip 指定目标地址为 LVS 的 VIP 地址;
- p $proto 指定协议;
- m multiport -- dports $port1 , $port2 , … 指定目标端口;
- j MARK -- set-mark NUMBER 表示执行 MARK 动作并设置标记值为 NUMBER 。
2 基于标记定义集群服务
在 Director 主机上执行命令
ipvsadm - A -f NUMBER (options)
命令解析
- A 表示添加一个新的集群服务,
-f NUMBER 指定基于标记 NUMBER 来定义集群,
(options) 可设置调度算法等其他选项。
3 iptables 命令实践
对于 ubuntu 服务器版本的话,默认没有 iptables 命令
apt install iptables
iptables - t mangle - A PREROUTING - d 192.168.8.13 - p tcp - m multiport -- dports 80 , 443 - j MARK
-- set-mark 10 # 定制防⽕墙标记
定制转发规则
ipvsadm - C
ipvsadm - A -f 10 - s rr
ipvsadm - a -f 10 - r 192.168.8.7 - g
ipvsadm - a -f 10 - r 192.168.8.17 - g
解释上面的命令

效果如下: FWM 10 rr就是上面要求的结果。FWM 11 wlc 是不加-s 调度策略,直接使⽤默认的调度策略结果。

6 NAT实践[M]
前提操作条件

注意:
为了避免网络效果出错,我们应该讲宿主机上的 vmnet1 网卡信息给清空掉或者直接将网卡禁用
后端主机在没有网的情况下部署 web ,采用系统镜像的方式来安装。
最终达到的效果
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
配置主机⽹络环境
各个主机的⽹卡设备基本配置

定制lvs-client主机ip (略 不用更改)
定制lvs-server主机ip
定制⽹卡配置, ens33 是 NAT 模式, ens37 是仅主机模式,仅主机模式不⽤配置⽹关
root@ubuntu24-13:~# cat /etc/netplan/50-cloud-init.yaml
network:
version: 2
ethernets:
ens33:
addresses:
- 10.0.0.13/24
nameservers:
addresses:
- 10.0.0.2
routes:
- to: default
via: 10.0.0.2
ens37:
addresses:
- 192.168.8.13/24
netplan apply 重启生效
定制lvs-RS1主机ip
定制网卡服务
[root@openeuler-14 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
DEFROUTE=yes
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.8.14
PREFIX=24
[root@openeuler-14 ~]# nmcli connection down ens33 关闭网卡的连接
[root@openeuler-14 ~]# systemctl restart NetworkManager 重启网卡服务
定制lvs-RS2主机ip
定制⽹卡服务
[root@rocky9-15 ~]# cat /etc/NetworkManager/system-connections/ens160.nmconnection
[connection]
id=ens160
type=ethernet
autoconnect-priority=-999
interface-name=ens160
[ipv4]
address1=192.168.8.15/24
method=manual
[root@rocky9-15 ~]# nmcli connection down ens160 关闭网卡的连接
[root@rocky9-15 ~]# systemctl restart NetworkManager 重启网卡服务
lvs-server主机定制数据包转发
定制内核参数
root@ubuntu24-13:~# cat /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1
root@ubuntu24-13:~# sysctl -p /etc/sysctl.d/forward.conf
net.ipv4.ip_forward = 1
测试效果
root@ubuntu24-13:~# sysctl -a | grep ip_forw
net.ipv4.ip_forward = 1
RS1和RS2 主机定制⽹关
注意:如果⽹关不指向 lvs 主机的 ip 地址,那么数据包交给其他主机,导致数据包⽆法原路通过 lvs 返回出去。但是因为他们属于同⼀个⽹段,数据包还是可以抓取到的,只不过没有意义⽽已。
[root @openeuler-14 ~ ] # ip route add default via 192.168.8.13
[root @openeuler-14 ~ ] # ip route list
default via 192.168.8.13 dev ens33
[root @rocky9-15 ~ ] # ip route add default via 192.168.8.13
[root @rocky9-15 ~ ] # ip route list
default via 192.168.8.13 dev ens160
RS1和RS2主机 定制本地镜像服务
挂载磁盘
[root @openeuler-14 ~ ] # mkdir /image
[root @openeuler-14 ~ ] # mount /dev/cdrom /image/
mount : / image : WARNING : source write-protected, mounted read-only.
定制软件源
[root @openeuler-14 ~ ] # mv /etc/yum.repos.d/openEuler.repo{,.bak}
[root @openeuler-14 ~ ] # cat > /etc/yum.repos.d/openEuler.repo <<-eof
[local_openeuler]
name = Local OpenEuler Repository
baseurl = file :/// image
enabled = 1
gpgcheck = 0
eof
更新软件源
[root @openeuler-14 ~ ] # yum makecache
关闭防⽕墙服务和selinux
[root @openeuler-14 ~ ] # systemctl disable --now firewalld.service
[root @openeuler-14 ~ ] # setenforce 0
部署httpd服务
[root @openeuler-14 ~ ] # yum install -y httpd vim
[root @openeuler-14 ~ ] # echo '<h1>hello RS1</h1>' > /var/www/html/index.html
[root @openeuler-14 ~ ] # systemctl start httpd
挂载磁盘
[root @rocky9-15 ~ ] # mkdir /image
[root @rocky9-15 ~ ] # mount /dev/cdrom /image
mount : / image : WARNING : source write-protected, mounted read-only.
定制软件源
[root @rocky9-15 ~ ] # mkdir /etc/yum.repos.d/bak
[root @rocky9-15 ~ ] # mv /etc/yum.repos.d/rocky* /etc/yum.repos.d/bak/
[root @rocky9-15 ~ ] # cat > /etc/yum.repos.d/rocky.repo <<-eof
[local-rocky-baseos]
name = Local Rocky 9.4 BaseOS Repository
baseurl = file :/// image / BaseOS
enabled = 1
gpgcheck = 0
[local-rocky-appstream]
name = Local Rocky 9.4 AppStream Repository
baseurl = file :/// image / AppStream
enabled = 1
gpgcheck = 0
eof
更新软件源
[root @rocky9-15 ~ ] # yum makecache
(下面的操作跟RS1上的操作一样 略)
lvs-server主机定制集群
root @ubuntu24-13: ~ # apt install ipvsadm 安装ipvsadm
定制lvs集群服务
root @ubuntu24-13: ~ # ipvsadm -A -t 10.0.0.13:80 -s rr
增加RS主机列表
root @ubuntu24-13: ~ # ipvsadm -a -t 10.0.0.13:80 -r 192.168.8.14 -m
root @ubuntu24-13: ~ # ipvsadm -a -t 10.0.0.13:80 -r 192.168.8.15 -m
注意: 我们这里用的是 nat 模式,所以再添加 RS 主机的时候,需要使用 - m 选项
客⼾端访问 lvs 的对外 ip 地址
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS2 </ h1 >
[root @rocky9-12 ~ ] # curl 10.0.0.13
< h1 > hello RS1 </ h1 >
结果显示:可以看到实现了流量的正常转发效果

按照我们刚才的实验情况:这四类 IP 的具体情况如下:
CIP : 10.0.0.12 VIP : 10.0.0.13 DIP : 192.168.8.13
RIP1 : 192.168.8.14 RIP2 : 192.168.8.15
1 用户向具有公网 ip 地址的 LVS 主机地址 (VIP) 发起请求, (Src = CIP , Dst = VIP)
2 LVS 主机接收到数据包后,修改数据包的目标地址为后端 RS1 主机并转发出去, (Src = CIP , Dst = RIP1)
3 后端 RS1 主机处理完请求后,返回数据包给 LVS 主机, (Src = RIP1 , Dst = CIP)
4 LVS 主机接收到数据包后,修改数据包的源地址为 LVS 的公网地址 (VIP) 并转发出去, (Src = VIP , Dst = RIP1)
抓取数据包
yum install tcpdump -y 安装 在除了客户机上的所有主机进行安装
tcpdump -nn -i ens160 抓包 网卡 不是唯一的 根据网卡的实际名字进行修改 两个网卡选NAT的
curl 10.0.0.13 【在客户机上进行测试】
得到如下结果

7 多业务NAT实践
⼀个 lvs 调度器,实现多种不同业务集群的负载均衡
主机资源

: