linux下nginx高可用集群需nginx upstream健康检查+keepalived vip漂移协同实现:upstream通过max_fails/fail_timeout自动剔除故障后端并启用backup节点,keepalived通过vrrp管理vip,主备节点用track_script检测nginx进程确保真实可用,客户端始终访问vip实现无感切换。

Linux 下用 Nginx 实现后端故障转移、构建高可用集群,核心不是靠单台 Nginx 自身“多活”,而是通过上游服务器健康探测 + 自动剔除 + 备用节点接管三步完成。Nginx 本身不提供 VIP 漂移或主备切换能力,它负责的是七层流量分发与后端容错;真正的“高可用”需要搭配 Keepalived(管虚拟 IP)和 upstream 健康检查(管后端服务)协同实现。
配置 upstream 实现后端自动故障转移
Nginx 的 upstream 模块是后端故障转移的基础。只要正确设置健康检查参数,Nginx 就能在某个后端宕机时自动跳过它,把请求转给其他健康的节点。
- 在
http块中定义 upstream,例如:
upstream backend_servers {
server 192.168.1.201:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.202:8080 max_fails=3 fail_timeout=30s;
server 192.168.1.203:8080 backup; # 仅当其他全不可用时才启用
}-
max_fails表示连续失败多少次就标记该节点为不可用; -
fail_timeout是判定“不可用”的时间窗口(单位秒),超时后会重新尝试连接; -
backup标记的节点默认不参与负载,只在所有非 backup 节点失效时启用,适合做冷备; - 若需更主动探测,可配合
health_check指令(需 Nginx Plus)或使用开源模块如nginx_upstream_check_module编译安装。
用 Keepalived 管理虚拟 IP 实现 Nginx 自身高可用
单台 Nginx 仍是单点——如果它挂了,整个入口就断了。所以必须部署至少两台 Nginx(主+备),再用 Keepalived 绑定一个对外统一的虚拟 IP(VIP),由它决定当前谁持有这个 IP。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 主节点
keepalived.conf配置关键项:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication { auth_type PASS; auth_pass 123456; }
virtual_ipaddress { 192.168.1.100/24 }
track_script { check_nginx; }
}- 备节点只需将
state改为BACKUP、priority设为更低(如 90); - 务必添加
track_script并编写检测脚本(如检查 nginx 进程或端口是否存活),否则 Keepalived 不知道 Nginx 是否真挂了; - 脚本示例(
/etc/keepalived/check_nginx.sh):
#!/bin/bash
if ! kill -0 $(cat /var/run/nginx.pid) 2>/dev/null; then
systemctl start nginx &>/dev/null
sleep 2
if ! kill -0 $(cat /var/run/nginx.pid) 2>/dev/null; then
systemctl stop keepalived
fi
fi- 赋予执行权限:
chmod +x /etc/keepalived/check_nginx.sh; - 启动服务:
systemctl enable --now keepalived。
确保客户端始终访问同一个 VIP
客户端只认那个虚拟 IP(如 192.168.1.100),不关心背后是哪台 Nginx 在干活。Keepalived 保证这个 IP 总是在一台健康的 Nginx 上生效。只要主节点 Nginx 或系统异常,VIP 会在 1–3 秒内自动漂移到备用节点,用户无感知。
- 注意:两台 Nginx 的配置文件(
nginx.conf和所有server/upstream)必须完全一致; - 建议用 rsync 或 Ansible 同步配置,避免因配置差异导致行为不一致;
- 防火墙要放行 VRRP 协议(协议号 112)和 VIP 所在网段通信;
- 不要在两台机器上手动绑定同一个 VIP,会造成 ARP 冲突。
验证与日常维护要点
上线前必须做真实故障模拟,不能只看进程是否运行。
- 手动停掉主节点的 nginx:
systemctl stop nginx,观察 VIP 是否秒级迁移到备机(用ip a查看); - curl 测试 VIP 地址是否仍能正常返回后端响应;
- 查看 Keepalived 日志:
journalctl -u keepalived -f,确认状态切换记录; - 定期检查 upstream 后端状态:Nginx 提供
stub_status或接入 Prometheus + nginx-vts-exporter 可视化各节点活跃数、失败数; - 避免把健康检查路径(如
/healthz)暴露给公网,防止被恶意刷探针。










