负载均衡架构设计:F5 ↔ Nginx/HAProxy ↔ Keepalived 全链路映射

一、前言

经过前面 7 篇文章的学习,我们已经掌握了 Nginx 的核心功能、HTTP 改写、SSL/TLS、主动健康检查以及 Tengine 增强特性。本文将这些知识点串联起来,从架构设计的角度,建立 F5(硬件负载均衡)↔ Nginx/HAProxy(软件负载均衡)↔ Keepalived(高可用)的全链路映射。


二、整体架构

传统三层架构

复制代码
用户请求
    │
    ▼
┌─────────────────────────────────────┐
│  L4 层:F5 / HAProxy+Keepalived     │
│  VIP 负载均衡                        │
│  职责:SSL 卸载、四层分发            │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│  L7 层:Nginx / Tengine             │
│  域名路由、反向代理                  │
│  职责:七层 HTTP 处理                │
└──────────────┬──────────────────────┘
               │
               ▼
┌─────────────────────────────────────┐
│  后端:APISIX / 业务服务             │
│  动态路由、限流、鉴权                │
└─────────────────────────────────────┘

生产拓扑

复制代码
┌─────────────────────────────────────────────────────┐
│                     公网/内网用户                      │
└──────────────────────┬──────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────┐
│                  DNS 解析                              │
│  www.example.com → 10.205.106.80(VIP)               │
│  api.example.com  → 10.205.106.80(VIP)               │
└──────────────────────┬──────────────────────────────┘
                       │
                       ▼
┌─────────────────────────────────────────────────────┐
│  L4 层:F5 / HAProxy + Keepalived                    │
│                                                     │
│  ┌─────────────────────────────────────────────────┐│
│  │  Keepalived(VRRP)                              ││
│  │  MASTER: 10.205.106.80(VIP)                    ││
│  │  BACKUP: 10.205.106.81                           ││
│  │  心跳检测 → VIP 漂移                             ││
│  └──────────────┬──────────────────────────────────┘│
│                 │                                    │
│  ┌──────────────▼──────────────────────────────────┐│
│  │  HAProxy / F5(L4 负载均衡)                     ││
│  │  mode tcp(四层转发)                            ││
│  │  Nginx 集群作为后端                              ││
│  └──────────────┬──────────────────────────────────┘│
└─────────────────┬────────────────────────────────────┘
                  │
                  ▼
┌─────────────────────────────────────────────────────┐
│  L7 层:Nginx / Tengine 集群                        │
│                                                     │
│  Nginx-1:10.205.xxx.1  Nginx-2:10.205.xxx.2        │
│                                                     │
│  server_name www.example.com → 后端集群 A           │
│  server_name m.example.com   → 后端集群 B           │
│  server_name api.example.com → APISIX 网关          │
│                                                     │
│  SSL 卸载(证书在此终结)                            │
│  健康检查(Tengine check 模块)                     │
│  动态 upstream(Tengine dyups 模块)                │
└──────────────────┬──────────────────────────────────┘
                   │
                   ▼
┌─────────────────────────────────────────────────────┐
│  后端服务层                                          │
│                                                     │
│  APISIX 网关(动态路由、限流、鉴权)                  │
│  Web 服务器(PHP/Java/Node.js)                     │
│  数据库(MySQL/Redis/MongoDB)                      │
└─────────────────────────────────────────────────────┘

三、F5 ↔ Nginx ↔ HAProxy 概念映射

核心概念映射表

F5 概念 Nginx 对应 HAProxy 对应 Keepalived 对应
VIP (Virtual IP) 无原生 VIP,需 Keepalived 无原生 VIP,需 Keepalived VRRP 虚拟 IP
VS (Virtual Server) server { listen } frontend ---
Pool upstream { } backend ---
Pool Member server IP:PORT; server IP:PORT check ---
Monitor(健康检查) max_fails + fail_timeout(被动) option httpchk / check ---
SNAT proxy_set_header option forwardfor ---
Profile (TCP/HTTP/SSL) 模块配置 mode tcp / http ---
iRules Lua / rewrite 模块 ACL + use_backend ---
Persistence ip_hash stick-table / cookie ---
HA Active/Standby 无原生 HA 无原生 HA VRRP 主备切换
心跳线 --- --- VRRP 组播/单播

最常见的工作模式

模式 1:F5(L4)→ Nginx(L7)→ 后端

复制代码
F5 做四层转发(只看 IP:Port),Nginx 做七层路由(看域名)

模式 2:F5(L4 + SSL)→ Nginx(L7)→ 后端

复制代码
F5 做 SSL 卸载 + 四层转发,Nginx 只做七层路由,不需要证书

模式 3:HAProxy + Keepalived(L4)→ Nginx(L7)→ 后端

复制代码
开源方案替代 F5,HAProxy 做四层转发,Keepalived 提供 VIP 漂移

四、Keepalived 高可用核心

VRRP 协议

复制代码
Keepalived 通过 VRRP(Virtual Router Redundancy Protocol)实现 VIP 漂移:

MASTER(10.205.106.80)          BACKUP(10.205.106.81)
  ┌──────────────────┐           ┌──────────────────┐
  │ 持有 VIP          │           │ 不持有 VIP        │
  │ 10.205.106.200   │           │                   │
  │                  │   VRRP    │                   │
  │ 发送 VRRP 组播   │◄─────────►│ 接收 VRRP 组播    │
  │ 每隔 1 秒        │  心跳     │ 等待 MASTER 超时  │
  └────────┬─────────┘           └────────┬─────────┘
           │                              │
           │  MASTER 宕机后                │
           │  3 秒内收不到 VRRP 组播       │
           │                              │
           │  ────────────────────────────►│
           │                               │
           │                    自己变成 MASTER
           │                    加上 VIP,发送 gratuitous ARP
           │                    开始处理流量
           ▼

配置示例

nginx 复制代码
# MASTER 节点
vrrp_instance VI_1 {
    state MASTER               # 初始状态:MASTER
    interface eth0             # 绑定的网卡
    virtual_router_id 51       # VRRP 组 ID(同一组内必须一致)
    priority 100               # 优先级(越高越优先成为 MASTER)
    advert_int 1               # 心跳间隔 1 秒
    nopreempt                  # 不抢占(避免不必要的切换)
    
    virtual_ipaddress {
        10.205.106.200/24      # VIP 地址
    }
    
    track_script {
        check_haproxy          # 监控脚本
    }
}

健康检查脚本

生产环境建议做5层检测

复制代码
层级 1:进程检测(最快速)
  pgrep haproxy → 进程是否存在
  
层级 2:端口检测(最常用)
  ss -tlnp | grep 8080 → 端口是否监听
  
层级 3:网关检测(网络是否正常)
  ping -c 1 10.205.106.1 → 网关是否可达
  
层级 4:系统负载检测(避免误判)
  uptime → CPU 负载是否过高
  
层级 5:后端可用性检测(最准确)
  curl -s http://127.0.0.1:8080/health → 后端是否正常

五、全链路故障排查

排查路径

复制代码
用户访问不通
    │
    ▼
① DNS 解析是否正确?
   dig www.example.com
   返回 VIP 地址?
    │
    ├── 否 → DNS 配置问题
    │
    ▼
② VIP 是否可达?
   ping 10.205.106.200
   返回响应?
    │
    ├── 否 → F5/Keepalived 问题
    │
    ▼
③ L4 端口是否开放?
   telnet 10.205.106.200 80
   返回连接成功?
    │
    ├── 否 → F5 VS/HAProxy 配置问题
    │
    ▼
④ L7 路由是否正常?
   curl -H "Host: www.example.com" http://10.205.106.200/
   返回 200?
    │
    ├── 否 → Nginx server_name 匹配问题
    │
    ▼
⑤ 后端是否正常?
   直接 curl 后端 IP:PORT
   返回 200?
    │
    ├── 否 → 后端服务问题
    │
    ▼
⑥ 证书是否正常?
   curl -I https://www.example.com/
   返回 SSL 证书信息?
    │
    ├── 否 → 证书过期或配置错误
    │
    ▼
✅ 全链路正常

六、架构设计决策树

选型参考

复制代码
需要负载均衡方案?
    │
    ├── 有预算? → 用 F5(硬件,高性能,商业支持)
    │
    └── 开源方案?
         │
         ├── 只需要四层转发?
         │   ├── 简单场景 → HAProxy(mode tcp)
         │   └── 高性能场景 → LVS(内核态)
         │
         ├── 需要七层 HTTP 处理?
         │   ├── 基础需求 → Nginx(rewrite、SSL、反向代理)
         │   └── 高级需求 → Tengine(主动健康检查、动态 upstream)
         │
         └── 需要高可用?
             └── Keepalived(VRRP VIP 漂移)

三层架构 vs 二层架构

三层架构(推荐生产环境):

复制代码
L4:HAProxy + Keepalived(VIP 浮动)
L7:Nginx/Tengine(域名路由、SSL 卸载、健康检查)
后端:业务服务

二层架构(简化环境):

复制代码
L4+L7:HAProxy(单一组件完成四层和七层)
后端:业务服务

什么时候用三层? 需要 SSL 卸载、域名路由、重写 URL、多域名、健康检查等高级功能时。

什么时候用二层? 只需要 TCP 转发、不需要 HTTP 处理时。


七、F5 工程师迁移指南

从 F5 迁移到开源方案

F5 功能 开源替代 实现难度
Virtual Server HAProxy frontend ★☆☆ 简单
Pool HAProxy backend ★☆☆ 简单
Monitor Tengine check / HAProxy option httpchk ★★☆ 中等
SNAT HAProxy option forwardfor / Nginx proxy_set_header ★☆☆ 简单
SSL 卸载 HAProxy bind *:443 ssl crt / Nginx ssl_certificate ★★☆ 中等
iRules HAProxy ACL / Nginx rewrite ★★★ 较难
会话保持 HAProxy stick-table / Nginx ip_hash ★★☆ 中等
高可用 Keepalived VRRP ★★☆ 中等

证书迁移步骤

复制代码
1. 从 F5 导出证书(tmsh list sys crypto cert/key)
2. 验证证书有效性(openssl verify)
3. 合并证书链(cat server.crt ca.crt > fullchain.pem)
4. 配置到 Nginx/HAProxy
5. 验证 HTTPS 连接
6. 迁移完成后停用 F5 上的配置

八、总结

学习路线图

复制代码
Nginx 架构 → 虚拟主机 → 反向代理 → HTTP 改写 → SSL/TLS → 健康检查 → Tengine → 架构设计
  ①          ②          ③          ④          ⑤          ⑥          ⑦          ⑧

核心能力

能力 掌握程度
Nginx 架构原理(Master-Worker、epoll、热重载) ✅ 深刻理解
虚拟主机匹配规则(5 种 server_name) ✅ 实操验证
负载均衡策略(5 种算法 before/after) ✅ 实操验证
HTTP 改写(5 种操作) ✅ 实操验证
SSL/TLS 配置(证书生成、HTTPS、HSTS) ✅ 实操验证
主动健康检查(Python 脚本实现) ✅ 实操验证
Tengine 增强功能(check + dyups) ✅ 实操验证
架构设计(F5 ↔ Nginx ↔ HAProxy 映射) ✅ 建立体系

一句话总结

Nginx/Tengine 是做七层 HTTP 反向代理的首选,HAProxy 是做四层 TCP 负载均衡的利器,Keepalived 提供 VIP 高可用,三者结合可以完美替代 F5 硬件负载均衡器。


全系列完

相关推荐
好评1241 小时前
【Linux】应用层自定义协议与序列化
linux·运维·网络
春风解人意1 小时前
从零开始学习嵌入式P33----网络基础之HTTP
网络·学习·http
fengyehongWorld1 小时前
Linux caddy的安装与配置
linux·运维·服务器
2401_862880821 小时前
Linux应用层开发 --- HTTP
linux·运维·http
可爱系程序猿2 小时前
libcrypto-3-x64.dll 加载失败排查:OpenSSL 3 版本、PATH 顺序与 x64 依赖如何对应
linux·运维·服务器·程序人生·电脑
zbyyd2 小时前
Linux 网络编程:IO 多路复用
linux·运维·c语言·网络
fengyehongWorld2 小时前
Linux 域名申请与DNS解析
linux·运维·服务器
SKH.2 小时前
网络(3)TCP通信
网络·网络协议·tcp/ip
μθημα2 小时前
Kubernetes 微服务网络实践:Service 与 Ingress 从入门到灰度发布
网络·微服务·kubernetes