Nginx是构建大型分布式系统的核心组件,单机部署的Nginx服务器极易成为整个架构的单点故障(SPOF)。为了保障服务的高可用性,采用Nginx主从(Master-Slave)架构已成为企业级部署的必备实践。
什么是Nginx主从架构?
Nginx主从架构,本质上是一种通过部署主节点与备节点(即从节点)来消除单点故障,实现服务高可用的解决方案。其核心理念是“主节点工作,从节点待命”,当主节点发生故障时,从节点能够迅速接管流量,保障业务无感知切换。
与许多具有内置同步机制的数据库主从复制方案不同,Nginx自身并不提供配置与状态的自动同步功能。因此,实现其主从高可用通常需要依赖外部的工具或网络协议,例如Keepalived。
Nginx主从架构原理图解
典型的Nginx主从架构包含一个主节点和一个或多个从节点。
- 主节点 (Master): 正常工作时负责接收和处理所有客户端请求,是流量的实际入口。
- 从节点 (Slave): 作为热备节点,实时监控主节点状态。当主节点故障时,立即接管流量成为新的主节点。
实现这一自动切换的关键在于 虚拟IP(VIP) 和Keepalived。Keepalived基于VRRP(虚拟路由器冗余协议)工作,其核心流程如下图所示:

- 正常运行: Keepalived在主节点上宣告一个虚拟IP(VIP,如
192.168.1.100)。客户端的所有请求都指向这个VIP,实际由主Nginx节点处理。
- 故障检测: Keepalived通过预定义的脚本(如检查Nginx进程是否存在)持续监控主节点的健康状态。
- 主备切换: 一旦检测到主节点故障,Keepalived会降低主节点的优先级。备节点(从节点)在检测到主节点优先级低于自己后,会在本机网卡上宣告同一个VIP,从而接管所有流量。
- 服务恢复: 客户端请求的VIP地址未变,但实际处理请求的服务器已切换至健康的备节点,实现了高可用切换。
基于Keepalived的核心配置实战
下面是一个简化的Keepalived主节点配置示例,展示了如何定义VRRP实例并与Nginx健康检查关联。
vrrp_instance VI_1 {
state MASTER # 初始状态设为MASTER,备节点设为BACKUP
interface eth0 # 绑定VRRP通告的网络接口
virtual_router_id 51 # 虚拟路由ID,主备节点必须相同
priority 100 # 优先级,主节点应高于备节点(如备节点设为90)
advert_int 1 # 心跳通告间隔(秒)
authentication { # 主备节点间的认证
auth_type PASS
auth_pass 1111
}
virtual_ipaddress { # 定义的虚拟IP(VIP)
192.168.1.100
}
track_script { # 关联追踪脚本,用于监控Nginx服务
chk_nginx
}
}
配置要点与注意事项:
- 优先级 (priority): 这是决定谁成为Master的关键。数值高的节点优先接管VIP。备节点应设置一个较低的值。
- 追踪脚本 (track_script): 必须配置一个用于检测Nginx服务状态的脚本(如
chk_nginx)。如果脚本检测失败,Keepalived会自动降低本机优先级,触发主备切换。这是实现精准故障转移而非单纯网络心跳的关键。
- 优雅下线: 在重启或关闭主Nginx前,应先手动降低其Keepalived优先级,触发一次主动的主备切换,避免服务瞬间中断。
通过以上架构与配置,我们可以构建一个能够自动应对单点故障的Nginx高可用系统。这不仅是运维与DevOps领域的常见实践,也是构建稳定后端服务基础设施的重要一环。
|