LVS(Linux Virtual Server)负载均衡实战详解
LVS(Linux Virtual Server)负载均衡实战详解
一、概述
LVS(Linux Virtual Server)是Linux内核级4层负载均衡组件,基于ip_vs内核模块实现流量转发,性能远超7层负载均衡;通过ipvsadm命令行工具、Keepalived配置文件管理,是高并发生产环境核心负载均衡方案。
二、核心知识点
2.1 负载均衡项目选型(STAR法则)
STAR法则定义
- S(Situation):场景/业务背景
- T(Task/Target):任务/目标
- A(Action):执行操作
- R(Result):最终结果
STAR法则简易示例
S:又到了午饭时间,不知道和谁吃、不知道吃什么
T:吃饱
A:抓阄选1个
R:吃了东西,吃饱了
负载均衡选型实战案例
- S:公司用户量激增,单点Web服务器瓶颈,需搭建集群+负载均衡
- T:选型适配业务的负载均衡服务
- A:梳理硬件/开源负载均衡→对比优缺点→结合业务选型
- R:完成负载均衡部署,支撑高并发访问
2.2 生产高频故障:磁盘空间不足
统一故障格式
- 现象:创建文件/添加用户失败,提示
no space left on device - 原因:磁盘Block/Inode耗尽;文件被删除但进程占用(硬链接数0、进程调用数非0)
- 方案:逐层排查目录、Inode、进程占用文件
- 预防:定期清理日志、监控磁盘使用率、避免暴力删除进程占用文件
2.3 常见负载均衡对比
| 类型 | 优势 | 缺点 |
|---|---|---|
| 硬件F5/A10 | 性能极强、原厂技术支持 | 价格昂贵、需主备冗余 |
| LVS | 4层转发、性能极致、内核级 | 部署/维护成本高 |
| Nginx/OpenResty | 4/7层兼容、配置简单、支持缓存/流量镜像 | 高并发(1w+)性能下降 |
| HAProxy | 4/7层兼容、支持动态加载配置 | 配置相对复杂 |
| 云CLB | 4/7层托管、无需运维 | 仅支持域名/URL转发 |
| 云ALB | 7层精细化转发、支持请求头/流量镜像 | 仅云环境使用 |
2.4 4层 vs 7层负载均衡
- 4层负载均衡:工作在传输层,仅识别IP+端口,纯转发
- 7层负载均衡:工作在应用层,识别URL/URI/HTTP头,支持代理转发
2.5 反向代理 vs 负载均衡
- 反向代理(Nginx/HAProxy):代理客户端请求,2次请求+2次响应
- LVS负载均衡:仅转发流量,不代理、不拆解请求
2.6 LVS vs Nginx核心区别
| 维度 | LVS | Nginx |
|---|---|---|
| 工作层 | 仅4层 | 4层+7层 |
| 流量处理 | DR模式直接转发 | 代理模式(2次收发) |
| 性能 | 万级/十万级并发 | 万级内并发 |
| 易用性 | 配置复杂 | 配置简单 |
2.7 ARP协议预备知识
- 作用:IP地址→MAC地址解析,3层协议工作在2层
- 流程:广播请求→单播响应→缓存ARP记录
- ARP欺骗:恶意设备伪造ARP响应,篡改网关/目标IP的MAC映射
- 防护:IP+MAC绑定、网络设备屏蔽非法MAC
2.8 LVS核心术语
- CIP:Client IP,客户端IP
- VIP:Virtual IP,虚拟IP(对外提供服务)
- DIP:Director IP,LVS负载均衡服务器自身IP
- RS:Real Server,后端真实业务服务器
- RIP:Real Server IP,后端服务器IP
2.9 LVS 4种工作模式
- DR(Direct Routing):直接路由模式,生产最常用
- NAT:网络地址转换模式
- TUN:隧道模式
- Full NAT:完全NAT模式
2.10 LVS核心管理工具
- 内核模块:
ip_vs(LVS核心驱动) - 命令行:
ipvsadm(LVS规则增删改查) - 高可用:
Keepalived(管理VIP+LVS规则+健康检查)
三、实操步骤与命令⭐️
3.1 磁盘空间不足故障 原文全命令/输出
# 故障排查核心命令
df -h
du -sh
df -i
find / -type f |xargs dirname |uniq -c |sort -rn |head
lsof|grep delete
# 原文实操命令+完整输出
[root@web01 ~]# lsof |grep oldboy.txt
7771 root 3r REG 253,0 7 134318493 /root/oldboy.txt
[root@web01 ~]# \rm -f /root/oldboy.txt
[root@web01 ~]# lsof |grep oldboy.txt
7771 root 3r REG 253,0 7 134318493 /root/oldboy.txt (deleted)
[root@web01 ~]# ls /root/oldboy.txt
ls: 无法访问/root/oldboy.txt: 没有那个文件或目录
[root@web01 ~]# lsof |grep delete
7771 root 3r REG 253,0 7 134318493 /root/oldboy.txt (deleted)
3.2 LVS-DR模式环境准备
# 服务器规划
lb01: 10.0.0.5 # LVS主负载均衡
lb02: 10.0.0.6 # LVS备负载均衡
VIP: 10.0.0.3 # 虚拟IP
web01: 10.0.0.7 # 后端RS1
web02: 10.0.0.8 # 后端RS2
# 关闭LB节点Nginx/Keepalived(避免冲突)
systemctl stop keepalived nginx
systemctl disable keepalived nginx
# 安装LVS管理工具⭐️
yum install -y ipvsadm
# 检查ip_vs内核模块是否加载
lsmod |grep ip_vs
3.3 Web服务器配置与测试 原文全命令
# web01 Nginx配置查看
cat /etc/nginx/conf.d/lvs.oldboylinux.com.conf
server {
listen 80;
server_name lvs.oldboylinux.cn;
root /app/code/lvs;
location / {
index index.html ;
}
}
# Web服务测试命令
curl -H Host:lvs.oldboylinux.com 172.16.1.7
curl -H Host:lvs.oldboylinux.com 10.0.0.7
curl -H Host:lvs.oldboylinux.com 172.16.1.8
curl -H Host:lvs.oldboylinux.com 10.0.0.8
3.4 LVS-DR模式:负载均衡服务端配置
3.4.1 手动配置VIP⭐️
ip addr add 10.0.0.3/24 dev eth0 label eth0:0
3.4.2 ipvsadm基础命令⭐️
# 查看LVS规则
ipvsadm
# 清空LVS规则(清空前务必备份)
ipvsadm -C
# 设置TCP超时时间
ipvsadm --set 30 5 60
# 查看LVS详细规则(数字格式)
ipvsadm -ln
3.4.3 添加LVS集群规则⭐️
# 添加VIP服务:-t TCP协议 -s 调度算法wrr加权轮询 -p 会话保持20秒
ipvsadm -A -t 10.0.0.3:80 -s wrr -p 20
# 添加RS节点:-r RS地址 -g DR模式 -w 权重1
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
ipvsadm -a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
# 原文ipvsadm -ln 完整输出
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
Forward Weight ActiveConn InActConn
TCP 10.0.0.3:80 wrr persistent 20
-> 10.0.0.7:80 Route 1 0 0
-> 10.0.0.8:80 Route 1 0 0
3.4.4 LVS规则备份与恢复⭐️
# 备份LVS规则到文件
ipvsadm-save -n > /root/ipvs.txt
ipvsadm-save -n > /root/ipvsadm.conf
# 清空规则后恢复
ipvsadm -C
ipvsadm-restore < /root/ipvsadm.conf
# 原文备份规则输出
-A -t 10.0.0.3:80 -s wrr -p 20
-a -t 10.0.0.3:80 -r 10.0.0.7:80 -g -w 1
-a -t 10.0.0.3:80 -r 10.0.0.8:80 -g -w 1
3.5 LVS-DR模式:后端RS服务器配置
3.5.1 lo网卡绑定VIP⭐️
# 临时配置VIP
ip addr add 10.0.0.3/32 dev lo label lo:1
# 永久配置(创建lo:1子接口配置文件)
cat > /etc/sysconfig/network-scripts/ifcfg-lo:1 << EOF
DEVICE=lo:1
IPADDR=10.0.0.3
NETMASK=255.255.255.255
ONBOOT=yes
NAME=loopback
EOF
# 重启网络生效
systemctl restart network
# 查看网卡配置
ip a s lo
3.5.2 抑制ARP解析(DR模式核心)⭐️
# 配置内核参数,禁止RS响应VIP的ARP请求
cat > /etc/sysctl.conf << EOF
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
EOF
# 加载内核参数
sysctl -p
3.6 LVS+Keepalived高可用配置⭐️
# /etc/keepalived/keepalived.conf 原文完整配置
global_defs {
router_id lb01
}
vrrp_instance oldboy {
state MASTER
interface eth0
virtual_router_id 62
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
10.0.0.3/24 dev eth0 label eth0:0
}
}
virtual_server 10.0.0.3 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.0
persistence_timeout 20
protocol TCP
real_server 10.0.0.7 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 10.0.0.8 80 {
weight 1
TCP_CHECK {
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
3.7 LVS负载均衡排错流程⭐️
# 1. 命令行测试VIP
curl 10.0.0.3
# 2. 网络连通性检查
ping 10.0.0.3
telnet 10.0.0.3 80
# 3. 直接访问RS测试
curl 10.0.0.7
curl 10.0.0.8
# 4. 检查RS配置、LVS规则、抓包分析
3.8 负载均衡通用故障处理 原文配置命令
# 故障1:虚拟主机仅显示第一个站点 → 解决方案
proxy_set_header Host $host;
# 故障2:RS无法记录客户端真实IP → 解决方案
proxy_set_header X-Forwarded-For $remote_addr;
四、原理白话说明
4.1 LVS-DR模式核心原理
- 客户端请求目标为VIP,LVS仅修改目标MAC地址为RS的MAC
- LVS不修改IP地址、不拆解请求,直接转发流量
- RS直接响应客户端,不经过LVS,性能极致
- 要求:LVS与RS必须在同一局域网(依赖ARP解析)
4.2 LVS-NAT模式原理
- 流量进出都经过LVS,LVS修改源/目标IP
- LVS与RS可不在同一局域网
- 性能低于DR模式,支持端口映射
4.3 Full NAT模式原理
- 流量入站同NAT模式,出站同DR模式,兼顾跨网段与性能
4.4 ARP抑制原理
- RS绑定VIP但不响应ARP请求,避免客户端直接访问RS,保证流量先到LVS
五、注意事项(原文完整要求)
- LVS-DR模式禁止在LVS本机测试,小流量下转发不生效,需外部客户端测试
- DR模式LVS与RS必须同网段,否则ARP解析失败
- RS端VIP必须配置32位掩码,仅本机识别
- LVS规则清空前必须备份,避免配置丢失
- Keepalived主备
virtual_router_id、认证密码必须一致 - LVS会话保持时间
persistence_timeout根据业务调整,避免会话错乱 - RS健康检查必须配置,避免故障节点接收流量
- LVS应对高并发,访问量少时不会像nginx 1:1转发,建议抓包验证
六、总结 + 避坑指南
6.1 核心总结
- LVS是内核级4层负载均衡,DR模式生产首选,性能最高
- 部署核心:LVS端配置VIP+ipvsadm规则;RS端绑定VIP+抑制ARP
- 高可用依赖Keepalived,自动管理VIP、LVS规则、RS健康检查
- 故障排查遵循:连通性→RS本地→LVS配置→抓包流程
- 负载均衡选型:高并发用LVS-DR,中小并发用Nginx,预算充足用硬件F5
6.2 生产避坑指南
- ❌ 禁止DR模式下LVS与RS跨网段部署
- ❌ 禁止RS端不配置ARP抑制,导致VIP冲突
- ❌ 禁止清空LVS规则前不备份
- ✅ 必须配置RS健康检查,自动剔除故障节点
- ✅ 必须部署LVS主备,避免单点故障
- ✅ 高并发场景优先LVS-DR,中小并发用Nginx即可
- ✅ 代理场景必须配置Host头与真实IP透传

浙公网安备 33010602011771号