Appearance
分布式系统的高可用入口:从单点故障到 VIP + Nginx 架构

在生产环境中,入口网关的单点故障是最常见、也最致命的问题之一。
如果你的系统只有一个入口 IP,而这个 IP 对应的机器宕机了,会发生什么?
答案是:整个服务不可用,直到这台机器恢复。
这就是直连 Master IP 架构的脆弱之处。本文将从这个问题出发,逐步引入虚拟 IP + Nginx 的高可用入口方案。
一、直连架构的问题
这种直连架构看起来很简洁,但它有几个致命缺陷:
| 问题 | 说明 |
|---|---|
| 单点故障 | Master 挂了,整个系统不可用 |
| 发布即中断 | Master 重启/升级期间,服务中断 |
| 无法横向扩展 | 入口 IP 只有一个,加再多 Worker 也解决不了入口问题 |
| 产品感知后端 | 产品 A 需要知道 Master IP,换机器就要改配置 |
这个架构在 demo 阶段没什么问题,但一旦上线,就是一颗定时炸弹。
二、引入虚拟 IP:从“死 IP”到“会飘的 IP”
要解决单点故障,第一个想法是:多准备一台备用 Master。
这里引入了一个关键概念:虚拟 IP(VIP)。
VIP 不是绑定在某台物理机器上的 IP,而是一个“浮动”的 IP 地址。它会在主备机器之间漂移:
- 正常情况下,VIP 指向 Master 主节点
- Master 主挂了,VIP 自动指向备用节点
对产品 A 来说,它始终访问 192.168.0.200,永远不会变。后端的切换对它是完全透明的。
这就是 Keepalived + VRRP 协议要做的事情。关于 VRRP 如何实现心跳检测、优先级抢占、MAC 地址迁移,我们会在下一章详细展开。
三、从 VIP 到真正的“高可用入口”
VIP 解决了 Master 单点问题,但还有一个问题:Master 既要调度,又要对外提供服务,职责太重了。
更好的做法是在 VIP 和后端服务之间再加一层反向代理。
Nginx 在这个架构中的作用:
- 反向代理:接收所有请求,转发给后端的 Master
- 健康检查:定期探测 Master 是否存活,自动摘除故障节点
- 负载均衡:如果 Master 有多个,可以分发请求
但这里还有一个问题:Nginx 本身也是单点。如果 Nginx 挂了,整个系统同样不可用。
因此,我们需要对 Nginx 层也做高可用——多台 Nginx 节点 + VIP 漂移。
这就是完整的“高可用入口”架构:
- 入口层:VIP
192.168.0.200作为固定入口,通过 Keepalived 管理漂移 - 代理层:三台 Nginx 节点(
192.168.0.201、192.168.0.202、192.168.0.203),负责反向代理和健康检查 - 业务层:Master 主备集群,处理实际业务请求
VIP 通过 Keepalived 在三台 Nginx 节点之间漂移,任意一台 Nginx 宕机,VIP 会自动切换到其他节点,产品 A 完全无感知。
四、这个架构解决了什么问题?
| 问题 | 直连架构 | VIP + Nginx 架构 |
|---|---|---|
| Master 挂了 | ❌ 全站不可用 | ✅ Nginx 自动摘除故障 Master |
| Nginx 挂了 | — | ✅ VIP 漂移到备 Nginx |
| Master 发布升级 | ❌ 需要停服 | ✅ 逐个摘除节点,滚动升级 |
| 产品感知后端变化 | ❌ 要改配置 | ✅ 永远访问 VIP 192.168.0.200 |
| 横向扩展 | ❌ 入口 IP 是瓶颈 | ✅ Nginx 层可以扩展 |
五、这套架构的适用范围
这个方案不是银弹,但在很多场景下都是最佳选择:
| 场景 | 适用性 |
|---|---|
| 私有化部署 | ✅ VIP 方案最简单可靠 |
| 自建机房的分布式系统 | ✅ 没有云厂商的 LB 服务时 |
| 需要固定入口的传统应用 | ✅ 产品对 IP 有强依赖 |
| 家庭/实验室环境 | ✅ 本文使用的 192.168.0.0/24 网段完全适配 |
| K8s 环境 | ⚠️ 建议用 Ingress + Service 替代 |
| 纯公网云环境 | ⚠️ 云厂商 LB 更省心(如 AWS NLB) |
六、实践环境说明
本系列博文的实战部分,将使用以下家庭网络环境进行验证:
| 配置项 | 值 | 说明 |
|---|---|---|
| 网段 | 192.168.0.0/24 | 标准家庭局域网 |
| DHCP 范围 | 192.168.0.100 - 192.168.0.199 | 路由器自动分配 |
| 静态 IP 范围 | 192.168.0.200 - 192.168.0.254 | 服务器专用 |
| 网关 | 192.168.0.1 | 路由器地址 |
三台机器的 IP 分配:
| 节点 | 角色 | 静态 IP |
|---|---|---|
| node1 | Master 主 | 192.168.0.201 |
| node2 | Backup 1 | 192.168.0.202 |
| node3 | Backup 2 | 192.168.0.203 |
| VIP | 虚拟 IP | 192.168.0.200 |
💡 如果你的家庭网络网段不同(如
192.168.1.0/24),只需将所有192.168.0.x替换为你自己的网段即可。
七、小结
本文从直连架构的单点故障问题出发,逐步引入了虚拟 IP 的概念,并演进到 VIP + Nginx 多节点的高可用入口架构。
这个方案的核心思想是:
- 入口高可用:VIP
192.168.0.200让入口 IP“会飘”,后端切换对产品透明 - 职责分离:Nginx 负责代理和健康检查,Master 专注业务
- 产品无感知:产品永远访问同一个 VIP,无需感知后端变化
下一章,我们将深入 VRRP 协议,看看 Keepalived 是如何让 VIP 真正“漂”起来的。
💡 本文是《分布式高可用入口架构实战系列》第 1 篇
