Nginx + LVS + Keepalived 百万并发架构实战技术分析
一、新闻概述
1. 标题
百万并发架构实战:Nginx + LVS + Keepalived 架构
2. 发布时间
2025 年 1 月 15 日(资料整理)
3. 来源
架构师陈哥(微信公众号)
二、核心内容
1. 事件摘要
A. 主要内容
本文详细介绍了 Nginx + LVS + Keepalived 三层负载均衡架构,该架构是支撑百万级并发访问的主流解决方案。
B. 核心亮点
- 三层架构设计:LVS(四层)+ Nginx(七层)+ 业务集群
- 高性能:LVS 运行在内核态,可支撑百万级并发连接
- 高可用:Keepalived 提供主备切换和健康检查
- 灵活性:Nginx 提供丰富的七层路由功能
2. 关键信息
A. 涉及技术
- LVS(Linux Virtual Server)
- Nginx
- Keepalived
- VRRP 协议
- DR 模式(Direct Routing)
B. 性能指标
- LVS 可支撑数十万甚至上百万并发连接
- 适用于互联网业务快速发展的场景
3. 背景介绍
A. 技术需求
在互联网业务快速发展的大背景下,支撑百万并发访问成为大型网站和分布式应用设计的关键目标。
B. 解决方案
Nginx + LVS + Keepalived 架构以其高性能、可扩展性和高可用性,成为常见的解决方案。
三、详细报道
1. 架构概述
A. 整体架构
graph TD
Client[客户端] -->|请求| LVS[LVS 四层负载均衡]
LVS -->|转发| Nginx1[Nginx 七层代理 1]
LVS -->|转发| Nginx2[Nginx 七层代理 2]
Nginx1 -->|HTTP路由| App1[业务服务器1]
Nginx1 -->|HTTP路由| App2[业务服务器2]
Nginx2 -->|HTTP路由| App3[业务服务器3]
Nginx2 -->|HTTP路由| App4[业务服务器4]B. 架构分层
客户端
↓
LVS(四层负载,抗并发)
↓
Nginx(七层负载,协议处理)
↓
业务集群2. LVS 负载入口
A. 技术特点
LVS(Linux Virtual Server)是四层负载均衡解决方案,运行在内核态。
核心优势:
- 性能极高:运行在内核态,零拷贝技术
- 抗并发能力强:轻松支撑数十万甚至上百万并发连接
- 只负责转发:不解析 HTTP 协议内容,仅处理 TCP/UDP 数据包
B. 工作模式
LVS 支持多种工作模式,本文主要介绍 DR 模式(Direct Routing):
DR 模式特点:
- 请求经过 LVS,响应不经过 LVS
- 真实服务器直接响应客户端
- 性能最优,要求 LVS 和服务器在同一物理网络
C. LVS Director 架构
graph TB
subgraph "LVS Director 集群"
LVSMaster[LVS Master<br/>主节点]
LVSSlave[LVS Slave<br/>备节点]
end
subgraph "Keepalived 管理"
VRRP[VRRP 协议<br/>VIP 管理]
Health[健康检查]
end
subgraph "ipvsadm 规则"
Rules[DR 模式<br/>负载均衡规则]
end
LVSMaster --> VRRP
LVSSlave --> VRRP
VRRP --> Rules
Health --> LVSMaster
Health --> LVSSlave3. Keepalived 高可用保障
A. 核心功能
Keepalived 是 LVS 集群的高可用保障组件。
主要功能:
- VIP(Virtual IP)管理:通过 VRRP 协议实现虚拟 IP 漂移
- 主备切换:当主节点故障时,备节点自动接管 VIP
- 健康检查:自动检测后端节点状态,剔除异常节点
B. VRRP 协议
VRRP(Virtual Router Redundancy Protocol)是虚拟路由器冗余协议。
工作原理:
- 主节点定期发送 VRRP 广播
- 备节点监听广播
- 主节点故障时,备节点根据优先级接管 VIP
- 客户端始终通过 VIP 访问服务
C. 故障切换流程
sequenceDiagram
participant C as 客户端
participant VIP as 虚拟IP (VIP)
participant M as LVS Master
participant S as LVS Slave
C->>VIP: 正常访问
VIP->>M: 转发请求
M->>C: 返回响应
Note over M: 主节点故障
S->>VIP: 检测到主节点故障
S->>VIP: 接管 VIP
VIP->>S: VIP 绑定到备节点
C->>VIP: 继续访问
VIP->>S: 转发请求
S->>C: 返回响应4. Nginx 七层反向代理
A. 部署位置
Nginx 可以部署为两种角色:
- 后端真实服务器的七层代理
- 独立的七层反向代理集群
B. 核心职责
Nginx 七层负载均衡功能:
| 功能 | 说明 |
|---|---|
| HTTP/HTTPS 解析 | 处理 HTTP 协议,SSL 卸载 |
| 路由与反向代理 | 基于域名、路径、请求头路由 |
| 限流与熔断 | 保护后端服务,防止雪崩 |
| 缓存支持 | 静态资源缓存,减轻后端压力 |
| 灰度发布 | 支持 AB 测试、金丝雀发布 |
| 健康检查 | 自动检测后端服务状态 |
C. 架构优势
Nginx 不直接承受"连接洪峰",前面有 LVS 做缓冲:
- LVS 处理大量并发连接
- Nginx 专注于业务逻辑路由
- 分层设计,职责清晰
四、技术细节
1. 数据流向分析
graph LR
C[客户端] -->|DNS解析| VIP[VIP: 1.2.3.4]
VIP -->|MAC地址替换| LVS[LVS Master]
LVS -->|改写MAC地址| NG[Nginx集群]
NG -->|HTTP路由| APP1[应用服务器1]
NG -->|HTTP路由| APP2[应用服务器2]
APP1 -->|直接响应| C
APP2 -->|直接响应| CDR 模式数据包处理流程:
- 客户端请求到达 VIP
- LVS 接收请求,改写目标 MAC 地址为真实服务器 MAC
- 转发到 Nginx 服务器(不修改 IP 地址)
- Nginx 处理后转发到业务服务器
- 业务服务器直接响应客户端(不经过 LVS)
2. 性能分析
A. 各层性能特点
| 组件 | 运行空间 | 主要职责 | 性能特点 |
|---|---|---|---|
| LVS | 内核态 | TCP/UDP 转发 | 极高,百万级并发 |
| Nginx | 用户态 | HTTP 处理 | 高,万级并发 |
| 业务服务器 | 用户态 | 业务逻辑 | 取决于应用 |
B. 为什么需要分层
问题:为什么不单独使用 Nginx 或 LVS?
答案:
- 单独 LVS:无法处理七层逻辑(如基于路径的路由)
- 单独 Nginx:用户态处理,性能不如内核态,连接数受限
- 组合方案:LVS 抗连接洪峰,Nginx 处理业务逻辑,各司其职
3. 高可用保障
A. 多层高可用
graph TB
subgraph "第一层:LVS 高可用"
LVS_M[LVS Master]
LVS_S[LVS Slave]
end
subgraph "第二层:Nginx 高可用"
NG1[Nginx 1]
NG2[Nginx 2]
NG3[Nginx 3]
end
subgraph "第三层:应用高可用"
APP1[应用集群]
APP2[应用集群]
end
LVS_M -.VRRP.-> LVS_S
LVS_M --> NG1
LVS_M --> NG2
LVS_S --> NG2
LVS_S --> NG3
NG1 --> APP1
NG2 --> APP1
NG2 --> APP2
NG3 --> APP2B. 故障场景处理
| 故障点 | 检测机制 | 处理方式 |
|---|---|---|
| LVS Master 宕机 | VRRP 心跳超时 | Slave 接管 VIP |
| Nginx 宕机 | Keepalived 健康检查 | LVS 剔除异常节点 |
| 应用服务宕机 | Nginx 被动健康检查 | Nginx 转发到健康节点 |
五、影响分析
1. 行业影响
A. 技术趋势
- 三层负载均衡架构已成为互联网行业标准实践
- 开源解决方案(LVS + Nginx + Keepalived)成本优势明显
- 云原生时代,该架构仍在物理机/虚拟机场景广泛应用
B. 替代方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| LVS + Nginx + Keepalived | 成熟稳定、成本低、性能高 | 运维复杂 | 传统IDC、私有云 |
| 硬件负载均衡(F5等) | 功能完善、易用 | 昂贵、封闭 | 大型企业 |
| 云负载均衡(ALB/SLB) | 托管服务、弹性 | 成本随流量线性增长 | 公有云 |
2. 技术趋势
A. 云原生演进
- Kubernetes Service:基于 iptables/IPVS 的服务发现
- Ingress Controller:类似 Nginx 的七层路由
- 云厂商托管服务:逐步替代自建负载均衡
B. 技术融合
- LVS 的 IPVS 模块被 Kubernetes 直接采用
- Nginx 成为 Ingress Controller 主流实现
- Keepalived 在边缘节点仍广泛使用
六、实践建议
1. 架构选型
适用场景:
- 日活百万级以上的互联网应用
- 需要高并发、高可用的企业级系统
- 自建机房或私有云环境
不适用场景:
- 初创期流量较小的应用
- 纯公有云部署(建议使用云厂商托管服务)
- 团队缺乏运维能力
2. 运维要点
A. 监控告警
- LVS 连接数、丢包率
- Nginx QPS、响应时间、错误率
- Keepalived VIP 状态
- 后端服务健康状态
B. 容量规划
- LVS:根据并发连接数规划(单机可支撑 10 万+ 并发)
- Nginx:根据 QPS 规划(单机可支撑 1 万+ QPS)
- 业务服务器:根据应用性能规划
C. 安全防护
- 限制 SYN flood 攻击
- 配置访问频率限制
- 定期检查漏洞
- 确保 SSL 证书安全
3. 最佳实践
- 配置管理:使用配置管理工具(Ansible、SaltStack)
- 灰度发布:利用 Nginx 的灰度能力平滑上线
- 压测验证:上线前进行充分压测
- 文档完善:维护架构文档和应急预案
- 定期演练:定期进行故障切换演练
七、总结
Nginx + LVS + Keepalived 架构是经典的三层负载均衡解决方案,通过职责分离实现了高性能和高可用性的平衡:
- LVS:内核态四层负载,抗连接洪峰
- Nginx:用户态七层代理,灵活路由
- Keepalived:高可用保障,主备切换
该架构经过互联网大厂多年验证,是支撑百万级并发的成熟方案。在云原生时代,虽然出现了更多托管服务,但理解这套架构的底层原理,对于构建高可用系统仍然具有重要意义。