LVS FAQ
内容:基础、原理、架构、排错、与 Nginx/HAProxy 对比、LVS 内核机制、Keepalived 相关等。
LVS(Linux Virtual Server)是内核级四层负载均衡框架。
作用:
- 提供高并发、高性能、低延迟的负载均衡
- 支持 TCP/UDP 四层协议
- 通常配合 Keepalived 做主备 HA
优点:
- 内核转发 -> 性能极高
- 架构简单,稳定可靠
- 适合大规模业务
- 请求和响应都经过 Director(瓶颈)
- RS 默认路由指向 Director
- 支持任意 OS
- Director 只收请求
- RS 直接回包给客户端
- RS 必须与 Director 在同一二层网络
- 需要关闭 ARP 抢答
- 用 IPIP 隧道转发请求
- RS 可跨机房
- RS 回包不经过 Director
优点:
- 内核态负载均衡 -> 性能极强
- 转发开销极低
- 支持百万并发
- 稳定、成熟、可靠
- 无需修改后端应用
缺点:
- 仅四层(TCP/UDP)
- 功能简单,不支持七层(URL/COOKIE/HEADER)
- 配置不直观,关联 Keepalived
- 不支持 SSL 终止
- DR模式需要二层网络限制
因为 Director 和 RS 都会持有 VIP,
如果 RS 回答 ARP,会导致客户端直接访问到 RS,绕过 LVS。
解决:RS 上设置 ARP 忽略和 ARP 宣告规则:
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
使用内核模块 ip_vs,通过:
- 注册虚拟服务(VIP + PORT)
- 根据调度算法选择 RS
- 转发包(DR/NAT/TUN)
- 使用连接跟踪同步(conntrack)
数据结构:
- ip_vs_service
- ip_vs_dest
- ip_vs_conn
- 完全在内核态转发,不需要用户态切换
- 基于 hash table 做连接调度
- 无状态(或弱状态)转发
- 不做七层解析
静态:
- RR(轮询)
- WRR(权重轮询)
- SH(源地址 hash)
- DH(目标地址 hash)
动态:
- LC(最少连接)
- WLC(加权最少连接)-> 生产最常用
- SED(最短期望延迟)
- NQ(不排队)
生产使用最多的:
- WLC
- WRR
- SH(用于 session 保持)
两种方式:
- 调度算法使用 SH(源地址 hash)
- 使用 persistence_timeout(会话保持时间)
例如:
persistence_timeout 300
Keepalived 作用:
- ① VRRP 实现 VIP 漂移(高可用)
- ② 健康检查 RS(故障移除)
- ③ 自动维护 ipvs 规则
架构:
VIP - Keepalived (MASTER)
VIP - Keepalived (BACKUP)
|
LVS (DR/NAT/TUN)
|
RS1/RS2/RS3
- RS 和 LVS 必须位于 同一二层网络
- RS 必须绑定 VIP 到 lo
- RS 必须关闭 ARP 抢答
- RS 的 real IP 和网关必须正确配置
因为:
- 请求和响应都经过 Director
- Director 承受双倍流量
- NAT 修改包头 -> CPU 负载更高
DR 模式不会。
常见排查方向:
- RS 未关闭 ARP -> 抢答 VIP
- DR 模式中 RS 不与 LVS 在同一网段
- 防火墙阻止 VRRP 组播(Keepalived)
- RS 回包走错路由(没有 direct return)
- 节点没有绑定 VIP
- keepalived 未生效 / 配置写错
ARP 缓存未刷新。
解决办法:
Keepalived 开启 GARP:
garp_master_delay 1
garp_master_refresh 5
garp_master_repeat 5
- TCP_CHECK 端口错误
- RS 防火墙拒绝探测流量
- 脚本检查(MISC_CHECK)无可执行权限
- Keepalived 配置顺序错误
- delay_loop 过大
LVS 优势:
- 最高性能(内核态转发)
- 四层负载均衡
- 非常稳定
LVS 劣势:
- 不支持七层
- 配置不如 Nginx/HAProxy 灵活
- 不支持 SSL、压缩、URL/COOKIE 路由
HAProxy 优点:
- 四层 + 七层
- 健康检查能力最强
- 性能也很高(用户态)
Nginx 优点:
- 七层能力强
- 静态资源强
- SSL、Rewrite、限流能力强
结论:
| 场景 | 选择 |
|---|---|
| 四层极高性能 | LVS |
| 四层和七层混合复杂转发 | HAProxy |
| 七层能力强,需要 URL/Cookie/SSL | Nginx |
架构:
LVS(四层高性能)
↓
Nginx(七层能力)
↓
Application
优点:
- LVS 承担巨量 TCP 链接
- Nginx 做七层路由、限流、压缩、SSL
- 更灵活且更稳定
使用:
- DR/TUN 模式(后端直接回包)
- session 粘滞(SH / persistence_timeout)
两个 LVS Director(主/备)之间同步连接状态:
sync_master # 主
sync_backup # 备
作用:
- 主机挂掉时,备机能继续处理连接
- 保证无感切换
- 大型业务必须开启
支持非常好。
UDP 无连接,因此:
- 调度算法简单
- 无需连接跟踪
- 性能更高
适合 DNS、游戏、推流等业务。
- 20 年以上成熟项目
- 完全运行在 Linux 内核
- 无业务逻辑,功能极简
- 链接表结构优化
- Hash bucket 几乎 O(1) 查询
- 配合 Keepalived 能自动化 HA 和健康检查
LVS-TUN(Tunneling)
理由:
- RS 可以不在同一物理网段
- RS 可以跨三层、跨地域
- DR 模式必须在二层网络 -> 不满足
- DR/TUN 模式:RS 能看到真实 IP
- NAT 模式:看到的是 LVS 的 IP,需要用:
- X-Forwarded-For(七层)
- 或者 DNAT 保留源地址(需要高级配置)
- VIP 抢占(ARP)
- VRRP 组播被拦截后导致切换失败
- 源地址欺骗(DR/TUN模式,需 ACL)
- RS 直接暴露真实 IP(建议防火墙限制)
LVS(四层) + Keepalived(HA)
- 内部分发 Nginx/HAProxy(七层)
- 后端微服务 / 容器服务
- 节点健康检查
- Auto Scaling
- 日志、监控、告警
- 检查 VIP 是否存在
- 检查 LVS 配置(ipvsadm -Ln)
- 检查 Keepalived 状态(VIP 是否漂移)
- 检查 ARP 是否正确(RS端)
- 检查路由回包链路
- 抓包分析(tcpdump -i eth0 host VIP)
- 查看健康检查日志