一、基础概念
- LVS 核心
Linux Virtual Server,内核层高性能高可用负载均衡集群技术,章文嵩博士开发,Linux 内核标准模块,核心是把前端请求分发到后端真实服务器(RS),提升并发和可用性。
- 集群 vs 分布式
|------|----------------------|---------------------------|
| 维度 | 集群 | 分布式 |
| 部署 | 同一业务部署在多台服务器 | 业务拆分子业务,各子业务部署在不同服务器 |
| 节点功能 | 所有节点功能、代码、数据一致 | 各节点功能、代码、数据不同,组合成完整业务 |
| 效率提升 | 提高单位时间处理任务数(提升并发) | 缩短单个任务执行时间 |
| 故障影响 | 单节点故障,其他节点可替代,业务不受影响 | 影响单节点故障,对应子业务失效,整体业务可能出问题 |
- 集群类型
LB(负载均衡):多主机分摊访问请求,核心是 LVS 的应用场景
HA(高可用):解决单点故障(SPOF),核心指标可用性 A=MTBF/(MTBF+MTTR),常用 3/4/5 个 9 衡量
HPC(高性能计算):海量数据并行计算,非 LVS 相关重点
- 性能扩展方式
Scale UP(向上扩展):升级单台服务器硬件,上限低、成本高
Scale Out(向外扩展):增加服务器数量,通过调度分配请求,LVS 是该方式的核心实现
二、LVS 核心术语
VS:Virtual Server,调度器,负责请求分发
RS:Real Server,真实服务器,实际处理用户请求
CIP:Client IP,客户端 IP
VIP:Virtual IP,对外提供服务的虚拟 IP,客户端访问入口
DIP:Director IP,调度器内网 IP,和后端 RS 通信
RIP:Real Server IP,真实服务器 IP
核心访问流程:CIP <--> VIP == DIP <--> RIP
三、LVS 四大工作模式
核心对比表
|---------|-----------------|--------------------------|------------------------|------|---------------------------|
| 模式 | 转发核心 | 网络要求 | 数据流向 | 端口映射 | 核心特点 / 适用场景 |
| NAT | 修改请求目标 IP(DNAT) | RIP&DIP 同私网,RS 网关指向 DIP | 请求 + 响应均经 VS | 支持 | 配置简单,VS 易成瓶颈,适合小型集群 |
| DR | 重新封装 MAC 首部 | VS&RS 同一物理网络,RS 网关指向路由 | 请求经 VS,响应 RS 直连客户端 | 不支持 | 性能最优,无 VS 瓶颈,需解决 VIP 地址冲突 |
| TUN | 原 IP 外封装新 IP 首部 | DIP/VIP/RIP 均为公网,RS 支持隧道 | 支持隧道请求经 VS,响应 RS 直连客户端 | 不支持 | 支持跨网络 / 跨地域部署 RS |
| FULLNAT | 同时修改请求源 + 目标 IP | VIP 公网,DIP/RIP 私网(可不同网段) | 请求 + 响应均经 VS | 支持 | 内核默认不支持,复杂网络场景可用 |
重点模式细节
- NAT 模式
核心:多目标 IP 的 DNAT,VS 做地址 / 端口转换,RS 只认 DIP
缺点:所有报文经 VS,高并发下 VS 易阻塞
注意:做 LVS 时需清空 iptables 规则,避免干扰 IPVS 工作
- DR 模式
关键:VS 和所有 RS 都要配置 VIP,需解决 ARP 地址冲突
冲突解决:修改 RS 内核 ARP 参数(arp_ignore=1、arp_announce=2),或用 arptables、前端网关静态绑定
特点:源 / 目标 IP / 端口不变,仅改 MAC,转发效率最高
四、LVS 调度算法
分静态(不考虑 RS 负载)和动态(根据 RS 实时负载调度),4.15 + 内核新增 2 种专用算法
- 静态算法
RR:轮询,请求平均分配,适合 RS 配置一致的场景
WRR:加权轮询,为 RS 设权重,权重高被调度次数多,适合 RS 配置不一致
SH:源地址哈希,同一源 IP 始终到同一 RS,实现会话绑定,易导致负载不均
DH:目标地址哈希,同一目标 IP 始终到同一 RS,适合正向代理缓存(如宽带运营商)
- 动态算法(负载值 Overhead 越小,优先级越高)
LC:最少连接,Overhead = 活跃连接 ×256 + 非活跃连接,适合长连接应用
WLC:加权最少连接,LVS默认算法,Overhead=(活跃 ×256 + 非活跃)/ 权重,适配绝大多数场景
SED:最短预期延迟,初始高权重 RS 优先,Overhead=(活跃 + 1 + 非活跃)×256 / 权重
NQ:永不排队,第一轮均匀分配,后续按 SED 调度,避免低权重 RS 无请求
LBLC/LBLCR:基于本地的最少连接(动态 DH),适合正向代理,LBLCR 解决 LBLC 负载不均问题
- 4.15 + 内核新增算法
FO:加权故障转移,调度到未过载的最高权重 RS,可标记过载节点,适合灰度发布
OVF:溢出连接,调度到权重最高且活跃连接 < 权重的 RS,适合高并发场景
五、LVS 部署工具:ipvsadm
- 基础信息
安装:yum install ipvsadm -y
核心文件:主程序 /usr/sbin/ipvsadm,规则文件 /etc/sysconfig/ipvsadm
服务:ipvsadm.service,开启开机自启可持久化规则
- 核心命令(高频)
集群服务管理
新增:ipvsadm -A -t VIP: 端口 -s 算法(如 rr/wrr/wlc)
修改:ipvsadm -E -t VIP: 端口 -s 新算法 [-p 超时时间]
删除:ipvsadm -D -t VIP: 端口
清空所有规则:ipvsadm -C
保存规则:ipvsadm -Sn > 配置文件路径
重载规则:ipvsadm -R < 配置文件路径
真实服务器(RS)管理
新增:ipvsadm -a -t VIP: 端口 -r RIP: 端口 -m/-g/-i [-w 权重]
-m:NAT 模式,-g:DR 模式(默认),-i:TUN 模式
修改:ipvsadm -e (参数同新增)
删除:ipvsadm -d -t VIP: 端口 -r RIP: 端口
查看 / 统计
查看规则:ipvsadm -Ln(-n 不解析 IP,更清晰)
流量统计:ipvsadm -Ln --rate(查看 CPS / 入站 / 出站速率)
清空计数器:ipvsadm -Z [-t VIP: 端口]
六、实战核心配置(NAT/DR)
- NAT 模式(核心步骤)
环境设置
一个同时有仅主机模式和nat模式的vs主机,两台仅主机模式是主机
VS主机中
root@vsnode \~\]# vmset.sh eth0 172.25.254.100 vsnode \[root@vsnode \~\]# vmset.sh eth1 192.168.0.100 vsnode noroute RS1,RS2都差不多 \[root@RS1 \~\]# vmset.sh eth0 192.168.0.10 RS1 noroute \[root@RS1 \~\]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 \[root@RS1 \~\]# nmcli connection reload \[root@RS1 \~\]# nmcli connection up eth0 \[root@RS1 \~\]# dnf install httpd -y \[root@RS1 \~\]# systemctl enable --now httpd \[root@RS1 \~\]# echo RS1 - 192.168.0.10 \> /var/www/html/index.html 测试:  模式实现 vs机上 开启内核路由功能;编写策略;更改权重 \[root@vsnode \~\]# echo net.ipv4.ip_forward=1 \>\> /etc/sysctl.conf \[root@vsnode \~\]# sysctl -p net.ipv4.ip_forward = 1 \[root@vsnode \~\]# ipvsadm -C \[root@vsnode \~\]# ipvsadm -A -t 172.25.254.100:80 -s wrr \[root@vsnode \~\]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 1 \[root@vsnode \~\]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m -w 1 \[root@vsnode \~\]# ipvsadm -e -t 172.25.254.100:80 -r 192.168.0.10:80 -m -w 2  2. DR 模式(核心步骤,重点解决 VIP 冲突) 在路由器中(两种网络类型) \[root@router \~\]# systemctl disable --now ipvsadm.service Removed "/etc/systemd/system/multi-user.target.wants/ipvsadm.service". \[root@router \~\]# ipvsadm -C \[root@router \~\]# vmset.sh eth0 172.25.254.100 vsnode \[root@router \~\]# vmset.sh eth1 192.168.0.100 vsnode noroute、 设定内核路由功能 \[root@router \~\]# echo net.ipv4.ip_forward=1 \>\> /etc/sysctl.conf 数据转发策略 \[root@router \~\]# iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.0.100 vsnode 调度器 \[root@vsnode \~\]# vmset.sh eth0 192.168.0.200 vsnode noroute \[root@vsnode \~\]# vim /etc/NetworkManager/system-connections/eth0.nmconnection \[root@vsnode \~\]# iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.100 检测  #客户端 \[root@client \~\]# vmset.sh eth0 172.25.254.99 client 测试  rs1 rs2差不多 \[root@RS1 \~\]# vmset.sh eth0 192.168.0.10 RS1 noroute \[root@RS1 \~\]# nmcli connection modify eth0 ipv4.gateway 192.168.0.100 \[root@RS1 \~\]# nmcli connection reload \[root@RS1 \~\]# nmcli connection up eth0 \[root@RS1 \~\]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 0.0.0.0 192.168.0.100 0.0.0.0 UG 100 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0 设定vip \[root@RS1 \~\]# cd /etc/NetworkManager/system-connections/ \[root@RS1 system-connections\]# cp -p eth0.nmconnection lo.nmconnection \[root@RS1 system-connections\]# vim lo.nmconnection \[connection
id=lo
type=loopback
interface-name=lo
ethernet
ipv4
address1=127.0.0.1/8
address2=192.168.0.200/32
method=manual
root@RS1 system-connections\]# nmcli connection reload \[root@RS1 system-connections\]# nmcli connection up lo #arp禁止响应 \[root@rs1 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/all/arp_ignore \[root@rs1 \~\]# echo 1 \> /proc/sys/net/ipv4/conf/lo/arp_ignore \[root@rs1 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/lo/arp_announce \[root@rs1 \~\]# echo 2 \> /proc/sys/net/ipv4/conf/all/arp_announce 测试  七、核心总结 LVS 是四层(TCP/UDP) 负载均衡,内核层实现,性能远高于应用层的 Nginx/HAProxy,适合高并发入口调度 生产环境首选 DR 模式,性能最优,需重点解决 VIP 的 ARP 冲突问题;小型集群可选用 NAT 模式,配置简单 调度算法默认用WLC,需会话保持用持久连接,灰度发布用 4.15 + 内核的FO 算法 ipvsadm 是 LVS 核心配置工具,高频命令需熟记,规则一定要保存 + 开机自启 多端口调度错乱用防火墙标记,这是 LVS 实战必备技巧 生产环境常搭配 Keepalived 实现 VS 的高可用,解决调度器单点故障问题