nginx 实现双活+智能调度需与 keepalived 协同:一、keepalived 配双 vip 双主架构,两节点各持一 vip 并设不同 virtual_router_id;二、nginx 配置带健康检查的动态 upstream,支持 least_conn 等负载策略;三、结合 dns geo、nginx map、灰度规则及 keepalived 进程检测实现多层智能调度。

Nginx 本身不直接提供“双活+智能调度”的能力,真正实现主备双活、流量按需分发,需要 Nginx(作为反向代理或负载均衡器)与 Keepalived(负责 VIP 漂移与节点状态感知)协同,并结合合理的上游策略和健康检查机制。所谓“智能调度”,在 Linux 高可用场景中,通常指:
✅ 双节点同时对外提供服务(双主模式),非闲置备用;
✅ 请求按权重、连接数、IP 或 URI 等维度分发到不同后端;
✅ 节点故障时自动剔除,恢复后平滑回归;
✅ VIP 不漂移(避免单点瓶颈),而是通过两个独立 VIP 实现并行接入。
下面分三块讲清楚关键配置要点:
一、用 Keepalived 构建双主(Dual-Master)VIP 架构
不是只配一个 VIP 让两台机器争抢,而是配两个互不干扰的 VIP,各自绑定一台 Nginx 主机,实现“双活”:
- 服务器 A(192.168.234.27)持有 VIP
172.18.0.100,同时作为VI_1的 MASTER; - 服务器 B(192.168.234.37)持有 VIP
172.18.0.200,同时作为VI_2的 MASTER; - 二者
virtual_router_id必须不同(如 50 和 51),priority均设为较高值(如 100),且state MASTER; - 启动后,两台机器各自绑定一个 VIP,DNS 或客户端可轮询解析这两个 VIP,实现流量分流。
二、Nginx 层配置动态上游与健康检查
在每台 Nginx 上定义相同的 upstream,指向真实后端服务(如四台 web server),并启用主动健康检查:
- 使用
least_conn或ip_hash策略,避免单点过载; - 添加
max_fails=2 fail_timeout=30s,让异常节点快速摘除; - 推荐启用
health_check模块(需编译时加--with-http_upstream_health_check_module)或用第三方模块如nginx_upstream_check_module; - 示例 upstream 配置:
upstream backend_cluster { server 192.168.234.47:80 max_fails=2 fail_timeout=30s; server 192.168.234.57:80 max_fails=2 fail_timeout=30s; server 192.168.234.67:80 max_fails=2 fail_timeout=30s; server 192.168.234.77:80 max_fails=2 fail_timeout=30s; least_conn; }
三、流量调度“智能”靠组合策略,而非单点决策
真正的智能体现在多层配合:
- DNS 层可做 GEO 调度,把华南用户导向 VIP1,华北用户导向 VIP2;
- 应用层可在请求头中带
X-Region或X-Traffic-Type,Nginx 用map指令分流到不同 upstream; - 对于灰度发布,可用
cookie或header匹配规则,将特定流量导向测试集群; - Keepalived 需配合 Nginx 进程检测脚本(如
/etc/keepalived/nginx_check.sh),确保 Nginx 挂了 VIP 也能及时漂移。
不需要复杂算法,只要把 VIP 分散、上游可伸缩、检查机制可靠、路由规则清晰,就能在 Linux 下稳定支撑双活+近实时调度。











