在使用负载均衡 CLB 时,后端 ECS 实例出现请求分布不均衡的情况。我该如何排查此类问题。
首先,我们需要明确的一点是,对于四层的 CLB 负载均衡器,负载是否均衡的依据应为新建连接数,而非流量或者已经建立的活跃连接数。 可能遇到的情况是,用户 ECS 服务器的新建连接数每台都比较均匀,但是其中一台 ECS 的连接数一直没有释放,导致连接堆积,所以这台 ECS 的总连接数远远高于其它 ECS 服务器,流量则相应地也比其他服务器要高。 因此,当遇到用户反馈负载不均衡的问题时,我们首先需要检查并确认:用户使用的是四层还是七层侦听器?客户发现的不均衡现象是指后端服务器的新建连接数,活跃连接数或者流量、接收请求数等指标不均衡?以及客户使用何种方式监控到的这一现象。 在基本确认上述信息后,则可以参考下面的思路来进一步排查问题的可能原因。 负载均衡请求不均衡可能有以下几种原因:
1. 后端服务器组中 ECS 实例的权重不一致。
ECS实例的权重越高,被分配到的请求数越多,详情可参见修改后端服务器组端口、权重。
2. 监听器配置了源地址哈希的调度算法。
源地址哈希算法会将同一个 IP 地址的访问请求转发到同一台后端服务器,可能会导致不同后端服务器的请求数分布不均衡。此种情况属于正常现象。
3. CLB 后端 ECS 服务器的健康检查状态异常。
开启负载均衡 CLB 的健康检查功能时,如果健康检查发现后端服务器组中某台 ECS 实例出现异常,则该实例暂时不会被分配请求;当健康检查发现该实例恢复正常时,将重新分配请求到该实例,于是出现请求分配不均衡的现象。详情可参见健康检查。
4. 客户端开启了 keepalive 长连接。
如果客户端请求开启了 keepalive 长连接,则可能导致客户端在短时间内发起的多次 http 请求被转发到同一台后端服务器,出现请求不均衡的情况。
5. 后端服务器组中仅部分 ECS 实例开启了 TCP 的 Keepalive 保持长连接特性。
当后端服务器中部分 ECS 实例开启该特性,而部分 ECS 实例未开启时,连接会在开启该特性的 ECS 实例中堆积。
1. 检查后端服务器组中各个 ECS 实例的权重是否相同。
如果权重不同,则请求分配不均衡属于正常现象。如果您需要修改权重,请参见修改后端服务器组端口、权重。
2. 检查监听器配置的调度算法是否为源地址哈希。
基于源 IP 地址的一致性哈希,相同源地址的请求通过哈希表映射到相同的后端服务器。当需要将同一用户的请求转发到相同后端服务器时,推荐使用该算法。如果您需要修改,请参见编辑侦听器。
3. 在相关时间段内是否有健康检查失败或波动现象。
可参考健康检查异常排查指导查找原因。
4. 查看客户端请求是否开启 keepalive 长连接。
如果客户端请求开启了 keepalive 长连接,且导致了请求不均衡的情况,可根据实际业务需要进行调整。
5. 检查后端服务器组中各 ECS 实例的配置。
是否仅部分 ECS 实例开启了 TCP 的 Keepalive 保持长连接特性。可根据业务实际情况进行调整。 如果您有其他问题,欢迎您联系火山引擎技术支持服务