构建世界级高可用nginx网关需分三层:dns/anycast层实现全局秒级调度,边缘网关层专注l4/l7安全分流且不涉业务路由,业务网关层按域精细化治理;keepalived须叠加主动健康探测与闭环切换;nginx须无状态、upstream开启自动健康检查、配置git化ci管控;可观测性为必备基础设施。

构建世界级高可用、零中断的企业级 Nginx 故障转移网关,关键不在堆机器,而在于分层设计、状态解耦与闭环自愈。它不是“多配几台 Nginx + Keepalived 就完事”,而是以业务连续性为目标的系统工程。
分三层架构,各司其职不越界
单层网关再强也扛不住全局故障。真正抗压的架构必须分层:
- DNS/Anycast 层(全局调度):用智能 DNS(按地域、运营商、延迟)或 BGP Anycast 广播同一 VIP 到多地机房。某地机房断电,流量秒级自动切到最近健康节点,无需等 DNS TTL 生效;中小团队可用短 TTL(60s)+ HTTP 302 降级兜底。
- 边缘网关集群层(L4/L7 安全分流):每个区域部署 ≥3 台 Nginx 实例,通过 Keepalived/VRRP 或云厂商 SLB(如阿里云 ALB)绑定一个本地 VIP。这一层只做 TLS 卸载、WAF 规则、限流熔断、灰度标透传,不做业务路由——所有后端服务对它透明。
-
业务网关层(按域/租户精细化治理):在边缘之后再设一层轻量网关(Nginx 拆分实例或 APISIX/Kong),按 service、tenant、app 域名做独立配置。用
include按服务拆文件,配合 Consul/Nacos 实现配置热加载;高频健康接口(如/health)直接在此层返回,不穿透后端。
Keepalived 不只是 VIP 漂移,要带健康闭环
只靠 VRRP 心跳无法感知 Nginx 进程卡死或 upstream 全挂。必须叠加主动探测:
- 写检测脚本(如检查
nginx -t && pgrep nginx或 curl 本地/status接口),用vrrp_script绑定到 Keepalived,设置weight -2让故障时优先级归零,触发秒级切换。 - 主备节点的
virtual_router_id和auth_pass必须严格一致;priority主节点设为 101,备节点设为 99,避免脑裂。 - 禁用非必要 notify 脚本——接管 VIP 后自动 reload Nginx 即可,不要在 notify 中执行复杂逻辑,否则可能阻塞状态切换。
零中断的核心:无状态 + 自动熔断 + 配置即代码
真正的“零中断”来自设计阶段的克制和自动化保障:
- Nginx 本身必须无状态:所有 session 管理、鉴权上下文交由后端统一处理;边缘层禁用
ip_hash(除非协议强制有状态),改用一致性哈希或完全无会话设计。 - upstream 必须开启健康检查:
health_check interval=3 rise=2 fall=3,配合max_fails=2 fail_timeout=30s,让故障节点在 6 秒内被自动摘除,恢复后 30 秒内自动加回。 - 所有 Nginx 配置用 Git 管理,CI 流水线自动校验语法(
nginx -t)、diff 变更、灰度发布;生产环境禁止手工改配置,杜绝人为失误。
可观测性不是加分项,是高可用的基础设施
没有监控的高可用等于蒙眼开车:
- 采集 Nginx 的
stub_status指标(active, accepts, handled, requests)+ Keepalived 的STATE(MASTER/BACKUP)+ VIP 绑定状态(ip addr show)。 - 用 Prometheus + Grafana 做多维看板:VIP 是否唯一存活、各节点请求成功率趋势、5xx 突增是否触发了自动摘除、failover 发生次数与耗时。
- 配置分级告警:VIP 异常漂移发 P0 紧急通知;单节点 CPU >90% 持续 5 分钟发 P2;配置变更未通过 CI 校验禁止上线。











