Nginx + Keepalived 高可用架构实战
把「单点 Nginx」升级为「VIP 漂移、故障自动切换」的高可用入口。本 Skill 覆盖从原理到落地配置、从脑裂规避到切换验证的完整链路,适配自建 Web 网关、API 入口、负载均衡前置等场景。
何时使用(触发条件)
- 用户要做 Nginx 高可用 / 双机热备 / 主备切换。
- 用户问 Keepalived 怎么配 / VRRP / VIP 怎么漂移。
- 用户说 脑裂 / split-brain / 两台都抢 VIP。
- 用户要 Nginx 负载均衡 / upstream / 反向代理高可用。
- 用户问 健康检查 / vrrp_script / 切换不生效怎么排查。
- 用户提到 高可用 / HA / 双活 / 容灾入口。
核心能力
1. VRRP 与 VIP 原理
- VRRP 协议在多个节点间协商出一台 Master,VIP(虚拟 IP)绑定在 Master 上对外服务。
- Master 故障 → 选举新 Master → VIP 漂移,客户端无感知(切换秒级)。
- 示例网段:节点 A
192.168.1.10、节点 B192.168.1.11、VIP192.168.1.100。
2. Keepalived 配置(主备)
# /etc/keepalived/keepalived.conf(节点 A,state MASTER)
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
authentication { auth_type PASS auth_pass 1111 }
virtual_ipaddress { 192.168.1.100/24 }
}
- 节点 B 改
state BACKUP、priority 100即可。 - 关键点:
virtual_router_id两端一致;priorityMaster 高;interface选对网卡。
3. 健康检查(vrrp_script)
vrrp_script chk_nginx {
script "killall -0 nginx" # 或 curl -s 127.0.0.1/health
interval 2
weight -30
}
vrrp_instance VI_1 {
...
track_script { chk_nginx }
}
- Nginx 挂 →
weight拉低 priority → 触发 VIP 漂移到备节点。
4. 脑裂(split-brain)规避
| 成因 | 规避 |
|---|---|
| 心跳网络抖动 / 中断 | 双心跳链路(业务网 + 独立心跳网);nopreempt 配合合理 priority |
| 防火墙挡 VRRP 组播 | 放通 VRRP 协议(IP 协议号 112),不要只放行 TCP |
| 两边 priority 相同 | 确保 Master 严格高于 Backup |
| 无仲裁 | 引入第三方仲裁(ping 网关 / 共享存储锁)或 fencing 机制 |
5. Nginx 负载均衡侧
upstream backend {
least_conn;
server 10.0.0.21:8080 max_fails=3 fail_timeout=15s;
server 10.0.0.22:8080 max_fails=3 fail_timeout=15s;
}
server {
listen 80;
location / { proxy_pass http://backend; proxy_set_header Host $host; }
}
- 后端节点探活用
max_fails+fail_timeout;least_conn比round_robin更平滑。
6. 切换验证清单
ip addr show看 VIP 当前在哪台;systemctl stop keepalived主节点 → VIP 应漂到备。- 客户端持续
ping <VIP>/curl <VIP>验证中断时长。 journalctl -u keepalived -f看选举日志,确认无脑裂(不应同时出现两个 Master)。
资源
references/
references/keepalived-conf.md:主备 / 双主 keepalived.conf 完整模板 + 健康检查脚本 + 常见字段说明。references/split-brain.md:脑裂成因、规避策略、仲裁与 fencing 方案、检测命令。references/nginx-lb.md:upstream 负载均衡策略、proxy 健康参数、与 Keepalived 配合的部署拓扑。
关联
- 节点底层 Linux 调优 / 防火墙 / 内核参数见同平台 linux-toolbox(SkillHub 搜
linux-toolbox)。 - 容器化高可用入口(Ingress / Service)见 k8s-deploy-troubleshooting(SkillHub 搜
k8s-deploy-troubleshooting)。