在金融、电商、支付等对可用性要求极高的场景下,就会涉及到高可用,比如:使用 Nginx + Keepalived 实现主备热切切换@mikechen
高可用架构
Nginx+Keepalived 双机热备负载均衡是一种成熟/且可靠的高可用架构,尤其适用于对系统可用性要求高的场景。
整体架构,如下图所示:
Nginx在每台服务器上部署 Nginx,作为反向代理、和负载均衡器。
Keepalived:在每台服务器上部署 Keepalived,用于实现虚拟 IP(VIP)的漂移、和健康检查。
虚拟 IP (VIP),对外提供服务的统一入口 IP 地址,VIP 在主服务器上绑定并对外提供服务。
当主服务器故障时,VIP 会自动漂移到备用服务器上,客户端无需更改任何配置即可继续访问服务。
+-------------+ +-------------+ | Nginx 主节点 | <====> | Nginx 备节点 | +-------------+ +-------------+ | | | | [Keepalived 高可用漂移 IP: VIP] | V 后端服务集群(Tomcat/Java/Golang)
高可用工作原理
整体配置,如下:
+-------------+ +-------------+ | Nginx 主节点 | <====> | Nginx 备节点 | +-------------+ +-------------+ | | | | [Keepalived 高可用漂移 IP: VIP] | V 后端服务集群(Tomcat/Java/Golang)
Nginx A (Master)
运行 Nginx:作为主Web服务器,处理客户端请求。
运行 Keepalived:负责管理虚拟IP(VIP 192.168.1.10
),并通过VRRP协议与备份服务器通信。
默认状态:主动持有VIP,对外提供服务。
Nginx B (Backup)
运行 Nginx:作为备用Web服务器,配置与主服务器相同。
运行 Keepalived:监听主服务器状态,准备接管VIP。
默认状态:待命,不持有VIP。
虚拟IP (VIP: 192.168.1.10)
客户端通过该IP访问服务,实际流量由当前主服务器处理。
Keepalived确保,VIP始终绑定在可用的服务器上。
客户端 (Client)
始终访问VIP,无需感知后端服务器的切换。
工作原理
主服务器(NginxA)持有VIP,处理所有请求。
Keepalived通过VRRP协议定期发送心跳包,备份服务器(NginxB)监听主服务器状态。
主服务器故障
备份服务器检测到主服务器心跳丢失,比如:Nginx崩溃或网络中断…等等。
备份服务器立即接管VIP,成为新的主服务器,客户端流量无缝切换至NginxB。
主服务器恢复
若原主服务器恢复,根据配置可自动或手动切换回主从状态(抢占或非抢占模式)。
通过 Nginx + Keepalived 双机热备架构,可以实现高可用负载均衡。
主节点故障时,备节点通过 VIP 快速接管,这种设计简单高效,非常适合对稳定性和性能要求极高的场景。