迁移后负载均衡健康检查失败时,直接配置后端服务器权重无法恢复流量,因为健康检查状态优先于权重设置。
应先修复健康检查失败问题,待服务器状态恢复健康后,再通过调整权重实现迁移流量的灰度切换或回滚。
先说结论:健康检查失败会导致后端服务器被自动剔除,此时调整权重无效,必须优先恢复健康状态。
- 先确认:登录负载均衡控制台查看后端服务器健康状态是否为“异常”或“失败”。
- 先处理:检查后端服务进程、端口监听及安全组规则,确保健康检查接口返回 200 状态码。
- 再验证:待健康状态恢复后,再修改权重参数进行流量比例调整。
命令速用版
若使用 Nginx 作为负载均衡器,可通过修改 upstream 配置调整权重;若使用云厂商负载均衡,需在控制台操作。
# Nginx 配置示例,权重设为 5
server 192.168.1.10:80 weight=5;
# 健康检查失败时,该 server 会被标记为 fail
云负载均衡通常不支持命令行直接修改权重,需通过 API 或控制台界面操作。
为什么会这样
负载均衡器的流量分发逻辑中,健康检查结果的优先级高于权重配置。
当后端服务器无法通过健康检查时,负载均衡器会将其标记为不健康并从可用服务器列表中剔除,此时无论权重设置多高,都不会分发流量。这是为了防止将请求发送到已故障的节点,保障业务可用性。
分步处理
- 检查健康检查配置:确认健康检查路径、端口和协议是否与后端服务实际配置一致。
- 验证后端服务状态:在后端服务器上执行
curl -I http://localhost:端口/健康检查路径,确认返回 HTTP 200。 - 检查网络连通性:确认负载均衡器到后端服务器的安全组或防火墙允许健康检查 IP 段访问。
- 恢复后调整权重:在控制台将服务器状态恢复为“健康”后,修改权重值实现流量迁移或回滚。
怎么验证是否生效
通过负载均衡控制台查看后端服务器状态列表,确认健康状态列显示为“健康”。
使用curl命令多次请求负载均衡 VIP,观察响应头中的后端服务器 IP 是否按权重比例分布。
常见坑
- 权重设为 0 不代表移除:部分负载均衡器权重为 0 仍会保留连接,需结合健康检查状态确认。
- 健康检查频率过高:迁移期间服务重启可能导致短暂失败,需合理设置检查间隔和阈值。
- 缓存导致误判:后端服务返回缓存的 200 页面但实际业务不可用,需检查动态健康检查接口。
常见问题
健康检查失败时权重设置会自动还原吗?
不会自动还原,权重配置是静态的,但流量分发会因健康状态异常而停止。
迁移期间如何避免健康检查失败导致流量中断?
建议先调整权重至低比例,观察健康状态稳定后再逐步增加,或启用连接 draining 功能。
参考来源
- 阿里云负载均衡文档,页面标题:健康检查概述,URL:https://help.aliyun.com/product/27539.html
- AWS Elastic Load Balancing 文档,页面标题:Health Checks for Your Target Groups,URL:https://docs.aws.amazon.com/elasticloadbalancing/latest/application/target-group-health-checks.html