在Nginx中,可以通过 负载均衡策略 和 健康检查机制 实现:
默认优先转发到A IP,当A IP故障时自动切换到B IP。以下是具体配置方法:
1. 基础配置(权重 + 被动健康检查)
upstream backend {
server 192.168.1.A:80 weight=10 max_fails=3 fail_timeout=30s; # A节点高权重优先
server 192.168.1.B:80 weight=5; # B节点备用
}
server {
location / {
proxy_pass http://backend;
}
}
weight=10
: A节点权重更高,正常情况下大部分请求会转发到A。max_fails=3
: A节点连续失败3次后,Nginx会在30秒内(fail_timeout
)将其标记为不可用,流量自动切到B。
2. 增强方案(主动健康检查)
使用第三方模块 ngx_http_upstream_check_module
(需手动编译安装):
upstream backend {
server 192.168.1.A:80 weight=10;
server 192.168.1.B:80 weight=5;
check interval=3000 rise=2 fall=3 timeout=2000 type=http;
check_http_send "HEAD /health HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
- 主动探测A/B节点的健康状态,无需等待真实请求失败即可剔除故障节点。
3. Nginx商业版(Nginx Plus)
若使用商业版,可直接内置健康检查:
upstream backend {
zone backend 64k;
server 192.168.1.A:80 resolve;
server 192.168.1.B:80 resolve;
health_check interval=5s fails=3 passes=2 uri=/health;
}
4. 验证方法
- 查看当前活跃节点:
curl -v http://你的Nginx地址 # 观察响应头中的上游服务器IP
- 强制触发故障转移:
手动停止A节点的服务,观察Nginx日志是否切换流量到B:
tail -f /var/log/nginx/error.log | grep upstream
关键点总结
机制 | 优点 | 缺点 |
---|---|---|
权重+被动检查 | 简单易用 | A节点故障后可能有短暂错误 |
主动健康检查 | 实时感知故障 | 需额外安装模块 |
Nginx Plus | 功能最完善 | $$$ |
根据业务场景选择方案。如果是生产环境且对稳定性要求高,建议使用主动健康检查或Nginx Plus。
内容由零声教学AI助手提供,问题来源于学员提问