在 Nginx 的 upstream 模块中,配置 backup 参数主要用于实现故障转移,适合主服务器宕机时自动切换到备用服务器的场景,而不是用来分担日常流量。
先说结论:backup 参数专为容灾设计,主节点正常时备用节点不接收流量,配置前需确认负载均衡算法兼容性。
- 适合:主从架构、高可用容灾、临时维护切换
- 先准备:确认主备服务器服务状态一致、端口可达
- 验收:模拟主节点故障,观察日志是否切换至备用节点
配置示例
upstream backend {
server 192.168.1.10:8080;
server 192.168.1.11:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}工作原理
Nginx 开源版本的 upstream 模块默认采用被动健康检查机制。只有当主服务器在请求处理过程中返回错误(如连接拒绝、超时)时,Nginx 才会将其标记为不可用,并将后续请求转发给标记为 backup 的服务器。这意味着备用服务器在平时处于空闲状态,不会参与负载均衡轮询。
配置步骤
1. 编辑 Nginx 配置文件,通常位于/etc/nginx/nginx.conf 或/etc/nginx/conf.d/下的站点配置文件中。
2. 在 upstream 块中找到 server 指令,在备用服务器地址后添加 backup 参数。
3. 执行 nginx -t 检查配置语法是否正确,确保没有拼写错误。
4. 执行 nginx -s reload 重载配置,使更改生效而不中断现有连接。
验证方法
1. 查看访问日志:正常情况下,access.log 中只应记录主服务器的 IP 或 upstream 名称对应的主节点响应。
2. 模拟故障:暂时停止主服务器上的应用服务进程(如 systemctl stop tomcat 或 kill 进程),确保端口 8080 无法连接。
3. 确认切换:观察 access.log,确认请求是否由备用服务器处理,同时检查 error.log 是否有 upstream 连接失败的记录。
4. 恢复测试:重新启动主服务器应用,再次发起请求,确认流量是否回切到主节点。
注意事项
1. 与 ip_hash 冲突:如果使用 ip_hash 负载均衡算法,backup 参数会被忽略,所有请求仍会哈希到主服务器,直到主服务器被手动标记为 down。
2. 被动检查局限:开源版 Nginx 不会主动探测服务器健康状态,如果主服务器进程僵死但端口仍通,流量可能不会切换到备用节点。
3. 会话保持:切换至备用服务器时,原有会话数据可能丢失,需确保主备服务器共享 Session 或采用无状态设计。
参考来源
1. Nginx 官方文档 - ngx_http_upstream_module
URL: http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server