云环境不支持keepalived的vip漂移,因公有云禁用vrrp组播与arp广播;应改用云负载均衡器(slb/alb)作为入口,nginx专注代理,跨az部署并配合健康检查实现高可用。

在云环境中部署 Nginx + Keepalived,不能照搬传统物理机或私有虚拟机的方案。云平台(如阿里云、腾讯云、AWS、华为云)的网络模型、安全策略和高可用机制与本地环境存在本质差异,直接套用 VIP(虚拟 IP)漂移方式往往失败或受限。
云平台不支持传统 VRRP/VIP 漂移
主流公有云普遍禁用或限制二层组播通信——而 Keepalived 依赖 VRRP 协议,需通过网卡发送/接收组播报文实现主备心跳与 VIP 绑定。云厂商出于安全与租户隔离考虑,通常屏蔽 VRRP(协议号 112)、禁止非授权 ARP 响应及 Gratuitous ARP 广播,导致 Keepalived 无法正常通告或接管 VIP。
- 即使配置成功,VIP 也常因云平台 ARP 表未更新而无法被外部访问
- 部分云平台(如 AWS EC2)明确禁止用户自行绑定/释放弹性 IP(EIP)以外的 IP 地址
- 阿里云、腾讯云的安全组默认丢弃 VRRP 流量,且不开放组播端口
推荐替代架构:云原生高可用方案
放弃 Keepalived 的 VIP 漂移模式,转而利用云平台自身能力构建更稳定、可运维的高可用入口:
- 使用云负载均衡器(SLB/ALB/NLB)作为统一入口:将两台(或多台)Nginx 实例注册为后端服务器,由云 LB 负责健康检查、流量分发与故障摘除。Nginx 仅专注反向代理与业务逻辑,无需承担高可用职责
- Nginx 实例部署在不同可用区(AZ):避免单点故障,云 LB 自动跨 AZ 转发,天然具备容灾能力
- 配合云监控+自动化脚本实现轻量级状态协同(可选):例如通过云 API 查询 Nginx 健康状态,触发 LB 后端权重调整或实例重启,但不替代 LB 的核心调度功能
若必须自建 Keepalived(如混合云或专有云场景)
仅限网络可控环境(如 VMware、OpenStack 或云厂商提供的“VPC 专属宿主机”),需满足以下前提:
- 确认底层网络支持组播且允许 VRRP 协议通行(需联系云平台管理员开通)
- 使用 ens3/eth0 等真实网卡名(而非 cloud-init 生成的动态接口),并在 keepalived.conf 中显式指定 interface
- VIP 必须是云平台分配的、与实例同网段的辅助弹性 IP(Secondary ENI IP),而非任意未分配 IP
- 关闭云平台的源/目的检查(Source/Dest Check),否则 VIP 流量会被丢弃
配置要点精简提醒
即使满足网络条件,Keepalived 配置仍需适配云环境特性:
- 优先级(priority)差值建议 ≥ 50,避免脑裂;advert_int 设为 1–2 秒,加快故障收敛
- 健康检查建议用七层 HTTP GET(如 /health),而非单纯端口探测,避免 Nginx 进程存活但服务异常
- 启用 nopreempt(非抢占)模式,防止主节点恢复后频繁切换影响连接稳定性
- 日志务必重定向到云日志服务(如阿里云 SLS、AWS CloudWatch),便于集中排查











