为什么不均衡

更新时间:2017-06-07 13:26:11

我的负载均衡为什么不均衡

我有一个负载均衡实例,后面挂了4个ECS,我测试为什么不均衡?

负载均衡均衡的是什么?

负载均衡是按特定调度算法把流量分发到后端Server上,其中:

4层(TCP和UDP)是基于连接做流量做调度。TCP和UDP创建一个socket访问负载均衡实例,这个源和目的ip,port就是一个连接。

7层(HTTP/HTTPS)是基于请求做调度。比如 http get请求访问一个页面。

为什么会不均衡?

配置了会话保持,访问负载均衡实例的客户端又很少,容易导致不均衡。尤其在使用少量客户端对负载均衡进行测试的时候常见。比如TCP的监听,开启了会话保持(4层是基于来源地址做的会话保持),使用一台客户端对负载均衡实例进行压测,就会导致不均衡。

后端Server的健康建状态异常会导致不均衡,尤其在压测的时候容易忽略后端Server的健康检查状态,如果有后端Server健康检查失败或者健康检查状态经常跳跃(好到坏,又从坏到好,反复变化)必然会导致不均衡。

后端Server有些开启了TCP Keepalive保持长连接,而有些又没有开启,则连接会在保持长连接的后端服务器上堆积,造成不均衡。

由于SLB的底层架构原理,当连接数比较少不够分配时,可能会表现得不均衡,最坏情况每台后端Server之间连接的差异可达到48个。

建议您还可排查是否有以下情况:

  • 后端各台ECS的权重是否设置的相同;
  • 在相关时间段内是否有健康检查失败或波动现象(查vnet或sls日志),查找波动的原因;或者健康检查没有配置正确的响应码2xx,3xx导致了健康检查显示正常,但后端服务有异常(健康检查失败(网络\后端RS服务或主机故障));
  • 是否同时使用了wlc算法和会话保持,如果是尝试改为加权轮询wrr算法和会话保持。