1. 集群简介
1.1 集群概述
- 通过网络将大量服务器集中,对外提供统一服务,客户端感知为一台服务器 。
- 任务调度是集群系统的核心技术。
1.2 集群目的
- 提高性能:适用于计算密集型场景(如天气预报、核试验模拟)。
- 降低成本:对比百万级超级计算机,价格更便宜,性价比更高。
- 提高可扩展性:弹性伸缩。新增节点即可扩容。
- 增加可靠性:多节点冗余,避免单点故障。
1.3 集群分类
- 负载均衡集群(LB集群):客户端请求平均分摊到集群节点。
- 高可用集群(HA集群):避免单点故障,故障节点自动切换,保障服务持续可用。
- 高性能计算集群(HPC):并行计算,解决复杂科学问题。
2. LVS 软件简介
- Linux 虚拟服务器(LVS):章文嵩在国防科技大学读博期间创建。
- 实现高可用、可伸缩的 Web、Mail、Cache (缓存)等网络服务。
- 目标:基于 Linux + LVS,构建高可用、高性能、低成本服务器集群。
LVS工作在传输层四层(TCP/UDP),它的本质是虚拟路由调度,只做请求调度分发,不处理业务、不拆包重组。
工作原理:像路由器一样转发数据包,只改 IP 端口,不解析应用数据
2.1 LVS 组成
- 前端:负载均衡层:一台或多台调度器(Director Server)。
- 中间:服务器群组层:真实提供服务的服务器(Real Server)。
- 底端:数据共享存储层 :提供共享存储空间(如NFS等),保证数据一致性。
2.2 LVS 术语
- Director Server(调度器) :分发请求到真实服务器的服务器(仅作NAT地址转换,充当路由)
- Real Server(真实服务器) :实际提供业务服务的服务器
- VIP(虚拟 IP):对外暴露、用户访问的虚拟 IP。客户端只连 VIP
- DIP(调度器 IP):调度器连接后端节点的中转 IP(相当于RIP的网关)。
- RIP(真实 IP):后端集群节点服务器的IP地址。
如下图:客户端封包指向调度器,调度器转换地址,源地址不变,目标地址从VIP变成了RIP。回复的时候,服务端的包到达调度器,源地址是8网段,目标地址是DIP,调度器转换地址为客户端的ip

原理解析: DS同时拥有VIP和DIP。VIP用于和客户端通信,DIP用于和RIP通信(这里只做分发,不处理数据,不进行拆包)。请求到达调度器,调度器仅作NAT地址转换。
流量走向: 入站:客户端→VIP→DS (NAT地址转换,将目标地址转换成内网地址)路由转发→RIP 出站:RIP→网关
DIP→DS(NAT地址转换,将源地址转换成公网地址)→回传给客户端 换句话讲,调度器DS起到路由的作用,是集群内网核心路由,DIP
是后端服务器的默认网关
2.3 LVS 工作模式
- VS/NAT(NAT 模式) :通过网络地址转换实现虚拟服务器;大并发时调度器易成瓶颈。
- VS/DR(DR 模式):直接路由技术实现虚拟服务器;节点需配置 VIP,需注意MAC地址广播
- VS/TUN(隧道模式。用的少):IP 隧道封装转发;跨网段部署,成本高。

2.4 LVS 负载均衡调度算法(10 种,常用 4 种)
- 轮询(Round Robin):请求依次分配,节点权重一致。
- 加权轮询(Weighted Round Robin):性能高的节点可以增加更多权重,分配更多请求。
- 最少连接(Least Connections):优先分配给当前连接数最少的节点。(当服务器连接数一致时,采用轮询算法)
- 加权最少连接(Weighted Least Connections):结合权重与连接数,性能最优。(当服务器连接数一致时,采用加权算法)
下列几种了解即可:
- 源地址散列(Source Hashing)
- 目标地址散列(Destination Hashing)
- 基于局部性的最少连接
- 带复制的基于局部性的最少连接
- 最短的期望延迟
- 最少队列调度
3. LVS-NAT 集群

LVS-NAT 集群流程详解:
-
- 客户端请求阶段(客户端 → LVS)
- 客户端发送请求包:
- IP 头:src=192.168.4.10,dst=192.168.4.5(VIP)
- TCP 头:sport=随机端口,dport=80
- 数据包到达 LVS 调度器,调度器根据调度算法(如轮询)选中 RS1(192.168.8.100)
-
- LVS 做 DNAT 改写(LVS → RS
- LVS 对数据包进行目的地址转换(DNAT):
- IP 头改写:src=192.168.4.10(不变),dst=192.168.8.100(改为 RS1 的 RIP)
- TCP 头不变:端口号保持不变(80)
- 数据包通过 DIP 所在的内网网段,转发给 RS1。
-
- RS 处理请求并回包(RS → LVS)
- RS1 收到请求后,处理并生成响应包:
- IP 头:src=192.168.8.100,dst=192.168.4.10(客户端 IP)
- 由于 RS1 的默认网关是 LVS 的 DIP(192.168.8.5),响应包必须先发给 LVS 调度器,无法直接回客户端。
-
- LVS 做 SNAT 改写(LVS → 客户端)
- LVS 对响应包进行源地址转换(SNAT):
- IP 头改写:src=192.168.4.5(VIP),dst=192.168.4.10(不变)
- 数据包通过外网网卡,发回给客户端。
-
- 客户端收到响应
- 客户端收到响应包,看到的源 IP 是 VIP(192.168.4.5),完全无感知后端 RS 的存在。
可以看得出来,LVS在客户端发起请求的时候,把目的IP从VIP改成RIP,回复的时候把源IP从RIP改成VIP
客户端的通信对象,从头到尾必须是 VIP,无论发出请求还是接收回复都是VIP。也就是我给A发请求,收到的回复必须是A给的,不然就是陌生人,陌生人的东西不能收,就会丢包
3.1 实验环境
- 使用 template 模板机 ,准备 4 台虚拟机。
- 配置 IP,使用 WindTerm 远程连接。
- 双网卡配置参考 Day03。

注意:web1,2的4网段是后续LVS-DR 集群的实验用得到的,不要配置过早,倘若过早配置,会因最短路径原则导致nat实验出问题
3.2 安装 ipvsadm(lvs 主机)
- ipvsadm是lvs集群管理命令,需要安装软件ipvsadm
- 虚拟机lvs主机操作
bash
[root@lvs ~]# dnf -y install ipvsadm #安装软件
[root@lvs ~]# ipvsadm -v #查看版本
3.3 ipvsadm 用法
虚拟服务器:由 LVS 调度器搭建而成的统一对外访问入口,并非真实业务主机
创建虚拟服务器
-A:添加虚拟服务器,创建集群-t:指定集群地址,即VIP端口(VIP,Virtual IP)-s:指定集群算法(rr|wrr|lc|wlc|...)
bash
[root@lvs ~]# ipvsadm -A -t 192.168.4.5:80 -s rr #添加虚拟服务器,VIP 4.50:80,算法为轮询
[root@lvs ~]# ipvsadm -Ln #查看集群详细列表
添加/删除真实服务器
-a:添加真实服务器-d:删除真实服务器-r:指定真实服务器的地址(Real Server)-w:为节点服务器设置权重,默认为1-m:NAT 模式;-g:DR 模式;-i:TUN 模式
bash
[root@lvs ~]# ipvsadm -A -t 192.168.4.5:80 -r 192.168.8.100:80 -m #向集群添加成员,NAT模式
[root@lvs ~]# ipvsadm -A -t 192.168.4.5:80 -r 192.168.8.200:80 -m #向集群添加成员,NAT模式
如果使用的算法是rr(轮询),此时使用-w增加权重是无效的,只有使用wrr时候使用-w才有效
常用查看/清空命令
- 查看集群成员列表:ipvsadm -Ln
- 清空集群配置:ipvsadm -C
bash
[root@lvs ~]# ipvsadm -Ln #查看集群列表,同时列出IP地址和端口号
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 192.168.4.5:80 rr
-> 192.168.8.100:80 Masq 1 0 0
-> 192.168.8.200:80 Masq 1 0 0
[root@lvs ~]# ipvsadm -d -r 192.168.8.200:80 -t 192.168.4.5:80 #删除集群中的8.200主机
[root@lvs ~]# ipvsadm -Ln #查看集群列表
[root@lvs ~]# ipvsadm -C #清空集群配置
[root@lvs ~]# ipvsadm -Ln #查看集群列表,已经没有成员
4. LVS-NAT 案例
4.1 部署流程
- Real Server(web1/web2)
- 部署 httpd 服务。
- Director Server(lvs) :
- 开启路由转发
- 安装并启用ipvsadm
- 创建虚拟服务器
- 向虚拟服务器中加入节点
- Client
- 访问虚拟服务器,访问测试
4.2 部署 Web 服务器(web1/web2)
web1
- web1主机安装httpd
- web1主机安装httpd服务,编写首页文件,启动服务
bash
[root@web1 ~]# dnf -y install httpd #安装软件包
[root@web1 ~]# echo web1 > /var/www/html/index.html #修改首页文件
[root@web1 ~]# systemctl enable httpd --now #启动服务
[root@web1 ~]# ss -nutlp | grep :80 #查看端口
[root@web1 ~]# curl 192.168.8.100 #自己访问自己测试,可以
web2
- web2主机安装httpd
- web2主机安装httpd服务,编写首页文件,启动服务
bash
[root@web2 ~]# dnf -y install httpd #安装软件包
[root@web2 ~]# echo web2> /var/www/html/index.html #修改首页文件
[root@web2 ~]# systemctl enable httpd --now #启动服务
[root@web2 ~]# ss -nutlp | grep :80 #查看端口
[root@web2 ~]# curl 192.168.8.200 #自己访问自己测试,可以
4.3 部署 LVS 调度器
- lvs主机启用路由转发并启动服务
- Linux是天生的"软路由",但需要开启路由转发功能,即可使用NAT功能
- 临时开启:echo 1 > /proc/sys/net/ipv4/ip_forward(重启失效)
- 永久开启:修改/etc/sysctl.conf
开启路由转发(永久)
bash
[root@lvs ~]# dnf -y install ipvsadm #安装ipvsadm软件
#如果已经安装,无需重复安装
[root@lvs ~]# vim /etc/sysctl.conf #修改配置文件,开启路由转发
...此处省略1万字...
net.ipv4.ip_forward = 1 #末尾增加配置
[root@lvs ~]# sysctl -p #刷新配置
[root@lvs ~]# ipvsadm --save > /etc/sysconfig/ipvsadm #--save意思是保存,生成永久规则文件
- 开启路由转发分为两步:
- 修改 /etc/sysctl.conf 设置 net.ipv4.ip_forward = 1
- 执行 sysctl -p 使其生效
创建虚拟服务器(VIP:192.168.4.5,算法 rr)
bash
ipvsadm -A -t 192.168.4.5:80 -s rr #创建虚拟服务器,算法轮询
ipvsadm -a -t 192.168.4.5:80 -r 192.168.8.100:80 -m -w 1 #添加真实服务器8.100
ipvsadm -a -t 192.168.4.5:80 -r 192.168.8.200:80 -m -w 1 #添加真实服务器8.200
ipvsadm -Ln
...
TCP 192.168.4.5:80 rr
-> 192.168.8.100:80 Masq 1 0 0
-> 192.168.8.200:80 Masq 1 0 0
...
ipvsadm --save > /etc/sysconfig/ipvsadm #保存配置信息
4.4 Web 服务器配置网关(指向 lvs 的 DIP)
web1
- web1服务器配置网关:192.168.8.5(lvs调度器的DIP地址)
bash
nmcli connection modify ens160 ipv4.method manual ipv4.gateway 192.168.8.5 connection.autoconnect yes
nmcli connection up ens160
web2
- web2服务器配置网关:192.168.8.5(lvs调度器的DIP地址)
bash
nmcli connection modify ens160 ipv4.method manual ipv4.gateway 192.168.8.5 connection.autoconnect yes
nmcli connection up ens160
注意:如果之前配置环境时,web1和web2都提前配置了ens192,会和192.168.4.0网段有冲突,本次实验需要禁用该网卡:
nmcli connection down ens192
4.5 Client 访问测试
bash
curl 192.168.4.5 # 轮询返回 web1/web2
dnf -y install httpd-tools
ab -c 1000 -n 1000 http://192.168.4.5/index.html/
# web 服务器查看访问日志
cat /var/log/httpd/access_log
4.6 修改算法为加权轮询(wrr)
-E:修改已存在的虚拟服务器(VIP)的算法、超时等的参数
-e:修改真实服务器(RS)的参数,改权重、改转发模式等
- web1 权重 2,web2 权重 1
bash
ipvsadm -E -t 192.168.4.5:80 -s wrr #修改集群算法为加权轮询
ipvsadm -e -t 192.168.4.5:80 -r 192.168.8.100:80 -w 2 -m #修改8.100权重
ipvsadm -Ln #查看集群列表
ipvsadm --save > /etc/sysconfig/ipvsadm #保存配置
LVS-NAT部署 步骤总结:
- 环境准备(网络拓扑)
- 部署 Web 服务器(web1 / web2)
*- 安装 httpd
-
- 编写首页文件
-
- 启动并设置开机自启
- 部署 LVS 调度器
- 开启路由转发
- 绑定 VIP 到网卡
- 安装并配置 LVS
- Web 服务器配置网关(指向 LVS 的 DIP)
- 访问测试
5. LVS-DR 集群
5.1 案例说明
- web1/web2 使用 ens192 网卡;lvs 使用 ens192 网卡。

LVS-NAT 集群流程详解:
步骤 1:客户端发起请求
- 客户端(192.168.4.10)发送 HTTP 请求到 VIP:192.168.4.15
- 数据包的 IP 头:
- src: 192.168.4.10(客户端 IP)
- dst: 192.168.4.15(VIP)
- 数据包的 MAC 头:
- src: 客户端网卡MAC
- dst: LVS调度器的MAC地址(因为客户端认为 VIP 在 LVS 上)
步骤 2:LVS 调度器接收并转发请求(关键:只改 MAC,不改 IP)
- LVS 收到数据包后,识别到这是访问 VIP 的请求,根据调度算法(比如轮询)选中一台 RS(比如 RS1 192.168.4.100)。
- LVS 不会修改 IP 头,IP 地址还是 192.168.4.10 → 192.168.4.15。
- LVS 只修改二层 MAC 地址:
- 新的目的 MAC:RS1(192.168.4.100)的网卡 MAC
- 源 MAC:LVS 调度器的网卡 MAC
- 数据包通过二层网络,直接转发给 RS1。
DR 模式的灵魂:IP 层地址不变,只改 MAC 层地址,实现 "转发不中转"
步骤 3:RS1 接收并处理请求(核心:VIP 绑定在 lo 回环)
- RS1 收到数据包后,检查 IP 头:目的 IP 是 192.168.4.15(VIP)。
- 因为 RS1 的 lo:0 接口上绑定了 192.168.4.15/32,所以它会认为这个 IP 是自己的,正常接收并处理请求。
- 这里必须配合 ARP 抑制配置(伪装ip),防止 RS1 对外宣称 "VIP 是我的",导致客户端 ARP 解析混乱。
步骤 4:RS1 直接返回响应(关键:不经过 LVS) - RS1 处理完请求后,生成响应包:
- IP 头:src: 192.168.4.15(VIP),dst: 192.168.4.10(客户端 IP)
- MAC 头:src: RS1的MAC,dst: 客户端MAC(或网关 MAC,由路由决定)
- 响应包直接从 RS1 发回客户端,完全不经过 LVS 调度器
- 客户端收到响应后,看到的源 IP 是 VIP,完全感知不到后端 RS 的存在。
所以DS 只负责给请求"带个路",RS 处理完直接"自己回家"。
为什么配置伪装ip?
配置伪装IP(隐藏VIP) 是为了"隐藏自己,避免冲突",解决ARP冲突
VIP和伪装ip一致,是为了让客户端以为是VIP给他的回复,不至于丢包
5.2 部署流程
- Real Server :
- 部署 httpd → 配置 lo 网卡 VIP(伪装IP地址) → 调整内核 ARP 参数。
- Director Server :
- 开启路由转发 → 安装 ipvsadm → 创建虚拟服务器 → 添加节点。
- Client :
- 访问 虚拟服务器,访问测试。
5.3 ARP 广播问题
- VIP 同时配置在调度器和所有真实服务器,ARP 广播会导致多主机响应 VIP,引发冲突。
- 解决:真实服务器禁止响应 VIP 的 ARP 请求。
所以要设置伪装ip解决arp问题
- 当客户端发起访问 VIP 对应的域名的请求时,根据网络通信原理会产生 ARP 广播
- 因为调度器和真实的服务器在同一网络并且 VIP 设置在集群中的每个节点上
- 此时集群内的真实服务器会尝试回答来自客户端的 ARP 广播,这就会产生问题,大家都说我是 "VIP"
5.4 内核 ARP 参数(web1/web2)
bash
vim /etc/sysctl.conf
# 添加
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
sysctl -p
- arp_ignore=1:忽略非本机 IP 的 ARP 请求。
- arp_announce=2:不向外宣告 lo 网卡 VIP。
6. LVS-DR 案例
6.1 Web 服务器配置伪装 IP(VIP:192.168.4.15)
web1
- web1安装network服务,配置伪装IP,配置在lo网卡的虚拟接口上
- 伪装IP配在本地回环 lo 网卡,可通过内核参数禁止 lo 上 VIP 发送 ARP 应答,只让调度器响应 ARP
bash
[root@web1 ~]# nmcli connection up ens192 #DR模式激活此网卡
[root@web1 ~]# dnf -y install network-scripts #安装network服务
[root@web1 ~]# cd /etc/sysconfig/network-scripts/
[root@web1 network-scripts]# cp ifcfg-lo ifcfg-lo:0 #复制lo网卡配置文件
[root@web1 network-scripts]# vim ifcfg-lo:0
DEVICE=lo:0 #设备名称
IPADDR=192.168.4.15 #伪装IP地址
NETMASK=255.255.255.255 #子网掩码32
ONBOOT=yes #开机自动启动此配置
BOOTPROTO=static #配置方式为静态手动配置
- web1防止地址冲突,修改内核参数,禁止对外广播自己是192.168.4.15
bash
[root@web1 ~]# vim /etc/sysctl.conf
#手动写入如下4行内容
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_announce = 2
#当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应
#本机不要向外宣告自己的lo回环地址是192.168.4.15
[root@web1 ~]# sysctl -p
[root@web1 ~]# systemctl restart network #重启网络服务
[root@web1 ~]# ip a s #查看ip地址,lo网卡上边已经有了4.15的伪装IP
ip a s :查看全部ip,包括伪装IP和VIP
web2
bash
dnf -y install network-scripts
cd /etc/sysconfig/network-scripts/
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
ONBOOT=yes
BOOTPROTO=static
# 配置内核参数(同上)
vim /etc/sysctl.conf
sysctl -p
systemctl restart network
ip a s
6.2 LVS 调度器配置 VIP
bash
dnf -y install network-scripts
cd /etc/sysconfig/network-scripts/
cp ifcfg-ens192 ifcfg-ens192:0
vim ifcfg-ens192:0
DEVICE=ens192:0
IPADDR=192.168.4.15
NETMASK=255.255.255.255
ONBOOT=yes
BOOTPROTO=static
systemctl restart network
ip a s
6.3 创建虚拟服务器(DR 模式,算法 wlc)
bash
ipvsadm -A -t 192.168.4.15:80 -s wlc
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.100:80 -g -w 2
ipvsadm -a -t 192.168.4.15:80 -r 192.168.4.200:80 -g -w 1
ipvsadm -Ln
6.4 Client 访问测试(wlc 算法,比例 2:1)
bash
curl 192.168.4.15
curl 192.168.4.15
curl 192.168.4.15
7. 总结
- 掌握 LVS 调度器的作用与核心术语。
- 掌握 LVS-NAT 模式:原理、配置、网关设置、算法调整。
- 掌握 LVS-DR 模式:原理、ARP 问题、内核参数、lo 网卡 VIP 配置。
- 理解 伪装 VIP 的作用:保证响应直接返回客户端,减轻调度器压力。
重点理解原理和配置步骤,不要死记硬背配置命令