使用负载均衡SLB时为何出现请求分布不均衡的现象

问题描述

在使用负载均衡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实例进行网站访问的压力测试。在会话期间,该客户端的所有测试请求将始终转发给同一台后端服务器。
  • 后端服务器组中仅部分ECS实例开启了TCP的Keepalive保持长连接特性。
    当后端服务器中部分ECS实例开启该特性,而部分ECS实例未开启时,连接会在开启该特性的ECS实例中堆积。详情可参见TCP Keepalive HOWTO

解决方案

请求分布不均衡的排查思路如下:

  1. 查看负载均衡SLB的监控信息。如果总体的请求数较少,轻微的请求分配不均衡属于正常现象。关于如何查看监控信息,请参见查看监控
  2. 检查后端服务器组中各个ECS实例的权重是否相同。如果权重不同,则请求分配不均衡属于正常现象。如果您需要修改权重,请参见编辑后端服务器的权重
  3. 查看健康检查日志,确认是否存在健康检查失败或波动现象,并查找原因。关于如何查看健康检查日志,请参见查看健康检查日志
  4. 检查是否开启会话保持功能。如果开启了会话保持功能,轻微的请求分配不均衡属于正常现象。了解更多会话保持相关问题,请参见会话保持常见问题
  5. 检查后端服务器组中是否仅部分ECS实例开启了TCP的Keepalive保持长连接特性。可根据业务实际情况进行调整。
  6. 检查监听的调度算法是否为加权最小连接数(WLC)。如果是,您可以尝试更改为加权轮询(WRR)算法。关于调度算法的概念,请参见添加TCP监听中的调度算法介绍。

适用于

  • 负载均衡SLB