配置问题导致负载均衡器间歇性丢包或负载不均衡
应用场景
在生产环境中,我们配置了负载均衡策略,但是发现实际服务请求经过负载均衡后,仍会出现间歇性丢包或并没有实现负载均衡。
通过检查确认了负载均衡器工作正常,后端服务器操作系统服务端口侦听也正常,排除了这两方面导致的问题。
常见因素分析
本文列出了可能会导致此问题的原因(操作系统内部的错误配置不在本文讨论范畴)。
经典模式
创建虚拟机时,为各个虚拟机配置终结点,并将相同服务对应端口的终结点加入了负载均衡集。负载均衡集下配置了 ACL 访问控制策略允许特定 IP 访问。Azure 默认有一条拒绝 0.0.0.0/0 的策略(较低优先级)。
如果源端是多链路出口(即 IP 有多个),但是 ACL 里面没有将所有源端 IP 都列入 Rule 时,当源端有以未列入允许的 ACL 的 IP 发起请求时,就会被负载均衡集的 ACL 策略阻断。
资源管理器模式
二元组/三元组分发模式 - 会话保持
配置了负载均衡器,但是在负载均衡规则中启用了会话保持功能。此时负载均衡器将按照会话保持原则针对客户端 IP(二元组)或客户端 IP 和协议(三元组)做会话保持。只要客户端一侧有 keep-alive 机制,并且始终在 keep-alive 时间内有请求流量,客户端的请求会一直被分配到首次接收请求的后端服务器,并没有实现负载均衡。
多端口响应
后端个别服务器网卡配置了 NSG 拒绝策略(例如 443 端口),但是负载均衡器的运行状况探测配置了其他端口(例如 80 端口)作为负载均衡器检查后端服务器的健康状态的判断依据。结果负载均衡器探测判断所有后端服务器都是健康的,然而当流量被分配给配置了 NSG 拒绝策略的后端服务器时,来自客户端的请求会被拒绝
例如:客户端发服务器 443 端口的请求被分配给未配置 NSG 策略的后端服务器时,请求会被正常响应,但当分配给配置了 NSG 策略的后端服务器时,请求无响应。
这种情况下,用户看到的现象就是时而通时而不通,在 WEB 服务器场景较常见。此外,类似 REDIS 这类具有多个不同端口响应(同步端口,服务响应端口,监控状态监控端口等)的服务,同样会出现类似的问题。
建议准确配置运行状况探测的端口以规避此类问题。