Skip to main content
Documents
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

LVS FAQ

内容:基础、原理、架构、排错、与 Nginx/HAProxy 对比、LVS 内核机制、Keepalived 相关等。

一、基础概念类

1. 什么是 LVS?它的作用是什么?

LVS(Linux Virtual Server)是内核级四层负载均衡框架。

作用:

  • 提供高并发、高性能、低延迟的负载均衡
  • 支持 TCP/UDP 四层协议
  • 通常配合 Keepalived 做主备 HA

优点:

  • 内核转发 -> 性能极高
  • 架构简单,稳定可靠
  • 适合大规模业务

2. LVS 的三种工作模式是什么?区别是什么?

① LVS-NAT(修改源/目标地址)

  • 请求和响应都经过 Director(瓶颈)
  • RS 默认路由指向 Director
  • 支持任意 OS

② LVS-DR(直接路由) <- 生产最常用

  • Director 只收请求
  • RS 直接回包给客户端
  • RS 必须与 Director 在同一二层网络
  • 需要关闭 ARP 抢答

③ LVS-TUN(IP 隧道)

  • 用 IPIP 隧道转发请求
  • RS 可跨机房
  • RS 回包不经过 Director

3. LVS 优点和缺点分别是什么?

优点:

  • 内核态负载均衡 -> 性能极强
  • 转发开销极低
  • 支持百万并发
  • 稳定、成熟、可靠
  • 无需修改后端应用

缺点:

  • 仅四层(TCP/UDP)
  • 功能简单,不支持七层(URL/COOKIE/HEADER)
  • 配置不直观,关联 Keepalived
  • 不支持 SSL 终止
  • DR模式需要二层网络限制

二、工作原理类

4. LVS-DR 模式为什么需要关闭 ARP?如何关闭?

因为 Director 和 RS 都会持有 VIP,

如果 RS 回答 ARP,会导致客户端直接访问到 RS,绕过 LVS。

解决:RS 上设置 ARP 忽略和 ARP 宣告规则:

net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2

5. LVS 是如何实现负载均衡的?

使用内核模块 ip_vs,通过:

  1. 注册虚拟服务(VIP + PORT)
  2. 根据调度算法选择 RS
  3. 转发包(DR/NAT/TUN)
  4. 使用连接跟踪同步(conntrack)

数据结构:

  • ip_vs_service
  • ip_vs_dest
  • ip_vs_conn

6. LVS 为什么性能高?

  • 完全在内核态转发,不需要用户态切换
  • 基于 hash table 做连接调度
  • 无状态(或弱状态)转发
  • 不做七层解析

三、调度算法类

7. LVS 支持哪些调度算法?哪几个最常用?

静态:

  • RR(轮询)
  • WRR(权重轮询)
  • SH(源地址 hash)
  • DH(目标地址 hash)

动态:

  • LC(最少连接)
  • WLC(加权最少连接)-> 生产最常用
  • SED(最短期望延迟)
  • NQ(不排队)

生产使用最多的:

  • WLC
  • WRR
  • SH(用于 session 保持)

8. LVS 如何实现 session 粘滞?

两种方式:

  1. 调度算法使用 SH(源地址 hash)
  2. 使用 persistence_timeout(会话保持时间)

例如:

persistence_timeout 300

四、架构/部署类

9. LVS + Keepalived 架构是什么样?为什么需要 Keepalived?

Keepalived 作用:

  • ① VRRP 实现 VIP 漂移(高可用)
  • ② 健康检查 RS(故障移除)
  • ③ 自动维护 ipvs 规则

架构:

VIP - Keepalived (MASTER)
VIP - Keepalived (BACKUP)
       |
       LVS (DR/NAT/TUN)
       |
    RS1/RS2/RS3

10. LVS DR 模式中 RS 必须满足哪些条件?

  • RS 和 LVS 必须位于 同一二层网络
  • RS 必须绑定 VIP 到 lo
  • RS 必须关闭 ARP 抢答
  • RS 的 real IP 和网关必须正确配置

11. LVS-NAT 为什么更容易成为性能瓶颈?

因为:

  • 请求和响应都经过 Director
  • Director 承受双倍流量
  • NAT 修改包头 -> CPU 负载更高

DR 模式不会。

五、故障排查类

12. 访问 VIP 无响应,但 LVS 配置正常,原因可能是什么?

常见排查方向:

  1. RS 未关闭 ARP -> 抢答 VIP
  2. DR 模式中 RS 不与 LVS 在同一网段
  3. 防火墙阻止 VRRP 组播(Keepalived)
  4. RS 回包走错路由(没有 direct return)
  5. 节点没有绑定 VIP
  6. keepalived 未生效 / 配置写错

13. VIP 漂移后仍访问旧节点,为什么?

ARP 缓存未刷新。

解决办法:

Keepalived 开启 GARP:

garp_master_delay 1
garp_master_refresh 5
garp_master_repeat 5

14. RS 健康检查不生效?原因?

  • TCP_CHECK 端口错误
  • RS 防火墙拒绝探测流量
  • 脚本检查(MISC_CHECK)无可执行权限
  • Keepalived 配置顺序错误
  • delay_loop 过大

六、对比类

15. LVS 与 Nginx、HAProxy 的区别?适用场景?

LVS 优势:

  • 最高性能(内核态转发)
  • 四层负载均衡
  • 非常稳定

LVS 劣势:

  • 不支持七层
  • 配置不如 Nginx/HAProxy 灵活
  • 不支持 SSL、压缩、URL/COOKIE 路由

HAProxy 优点:

  • 四层 + 七层
  • 健康检查能力最强
  • 性能也很高(用户态)

Nginx 优点:

  • 七层能力强
  • 静态资源强
  • SSL、Rewrite、限流能力强

结论:

场景 选择
四层极高性能 LVS
四层和七层混合复杂转发 HAProxy
七层能力强,需要 URL/Cookie/SSL Nginx

16. 为什么公司通常使用「LVS + Nginx」?

架构:

LVS(四层高性能)  
Nginx(七层能力)  
Application

优点:

  • LVS 承担巨量 TCP 链接
  • Nginx 做七层路由、限流、压缩、SSL
  • 更灵活且更稳定

七、深入原理类(中高级)

17. LVS 如何保持长连接,比如 Redis/TCP?

使用:

  • DR/TUN 模式(后端直接回包)
  • session 粘滞(SH / persistence_timeout)

18. LVS 的连接同步(conn sync)是什么?为什么要使用?

两个 LVS Director(主/备)之间同步连接状态:

sync_master   # 主
sync_backup   # 备

作用:

  • 主机挂掉时,备机能继续处理连接
  • 保证无感切换
  • 大型业务必须开启

19. LVS 对 UDP 的支持如何?

支持非常好。

UDP 无连接,因此:

  • 调度算法简单
  • 无需连接跟踪
  • 性能更高

适合 DNS、游戏、推流等业务。

20. LVS 如何保证稳定性?为什么适用于大规模业务?

  • 20 年以上成熟项目
  • 完全运行在 Linux 内核
  • 无业务逻辑,功能极简
  • 链接表结构优化
  • Hash bucket 几乎 O(1) 查询
  • 配合 Keepalived 能自动化 HA 和健康检查

八、综合场景题(中高级)

21. 公司有跨机房服务,选择哪种 LVS 模式?为什么?

LVS-TUN(Tunneling)

理由:

  • RS 可以不在同一物理网段
  • RS 可以跨三层、跨地域
  • DR 模式必须在二层网络 -> 不满足

22. 如果后端 Server 需要看到真实客户端 IP,怎么办?

  • DR/TUN 模式:RS 能看到真实 IP
  • NAT 模式:看到的是 LVS 的 IP,需要用:
  • X-Forwarded-For(七层)
  • 或者 DNAT 保留源地址(需要高级配置)

23. LVS 有哪些安全隐患?

  • VIP 抢占(ARP)
  • VRRP 组播被拦截后导致切换失败
  • 源地址欺骗(DR/TUN模式,需 ACL)
  • RS 直接暴露真实 IP(建议防火墙限制)

九、进阶

24. 如何设计一个高可用、高性能的负载均衡架构?

LVS(四层) + Keepalived(HA)

  • 内部分发 Nginx/HAProxy(七层)
  • 后端微服务 / 容器服务
  • 节点健康检查
  • Auto Scaling
  • 日志、监控、告警

25. 如何快速排查 LVS 故障?(你的思路是什么)

  1. 检查 VIP 是否存在
  2. 检查 LVS 配置(ipvsadm -Ln)
  3. 检查 Keepalived 状态(VIP 是否漂移)
  4. 检查 ARP 是否正确(RS端)
  5. 检查路由回包链路
  6. 抓包分析(tcpdump -i eth0 host VIP)
  7. 查看健康检查日志