问题描述
在使用负载均衡SLB时,后端ECS实例出现请求分布不均衡的情况。
问题原因
请求分布不均衡可能有以下几种原因:
- 总体的请求数较少。
例如,总请求数为7,后端服务器组*有3台ECS实例,不考虑其他功能的影响,3台ECS实例中将有1台被分配到3个客户端请求,2台ECS实例被分配到2个客户端请求。 - 后端服务器组中ECS实例的权重不一致。
ECS实例的权重越高,被分配到的请求数越多,详情可参见编辑后端服务器的权重。 - 后端服务器的健康状态异常。
开启负载均衡SLB的健康检查功能时,如果健康检查发现后端服务器组中某台ECS实例出现异常,则该实例暂时不会被分配请求;当健康检查发现该实例恢复正常时,将重新分配请求到该实例,于是出现请求分配不均衡的现象。详情可参见健康检查。 - 负载均衡SLB实例开启了会话保持功能。
开启会话保持后,如果客户端的IP地址相对固定,或者客户端的请求数差异较大,容易出现请求分配不均衡的现象。示例如下:- 客户端的IP地址相对固定。
例如,CDN的回源请求通过SLB进行负载均衡。CDN回源的IP地址相对集中和固定,相同源IP地址的请求将始终转发给同一台后端服务器,因此造成分配不均衡的现象。详情可参见添加TCP监听。注:该情况仅适用于TCP监听的SLB实例,因为TCP协议基于IP地址进行会话保持。
- 客户端的请求数差异较大。
例如,使用一台客户端对负载均衡SLB实例进行网站访问的压力测试。在会话期间,该客户端的所有测试请求将始终转发给同一台后端服务器。
- 客户端的IP地址相对固定。
- 后端服务器组中仅部分ECS实例开启了TCP的Keepalive保持长连接特性。
当后端服务器中部分ECS实例开启该特性,而部分ECS实例未开启时,连接会在开启该特性的ECS实例中堆积。详情可参见TCP Keepalive HOWTO。
解决方案
请求分布不均衡的排查思路如下:
- 查看负载均衡SLB的监控信息。如果总体的请求数较少,轻微的请求分配不均衡属于正常现象。关于如何查看监控信息,请参见查看监控。
- 检查后端服务器组中各个ECS实例的权重是否相同。如果权重不同,则请求分配不均衡属于正常现象。如果您需要修改权重,请参见编辑后端服务器的权重。
- 查看健康检查日志,确认是否存在健康检查失败或波动现象,并查找原因。关于如何查看健康检查日志,请参见查看健康检查日志。
- 检查是否开启会话保持功能。如果开启了会话保持功能,轻微的请求分配不均衡属于正常现象。了解更多会话保持相关问题,请参见会话保持常见问题。
- 检查后端服务器组中是否仅部分ECS实例开启了TCP的Keepalive保持长连接特性。可根据业务实际情况进行调整。
- 检查监听的调度算法是否为加权最小连接数(WLC)。如果是,您可以尝试更改为加权轮询(WRR)算法。关于调度算法的概念,请参见添加TCP监听中的调度算法介绍。
适用于
- 负载均衡SLB
文档内容是否对您有帮助?