企业运维训练营之云上网络原理与实践课程
第二讲 负载均衡CLB(下)- 常见问题与解决思路
视频地址:
https://developer.aliyun.com/learning/course/991/detail/14970
1. 访问CLB失败
a. 问题表现:公网所有客户端ping or telnet 均不通。
可能的原因:SLB IP被清洗或黑洞。
处理方法:1、清洗:解除清洗 2、黑洞:迁移业务,等待黑洞结束。
b. 问题表现:
- 可以ping通SLB IP;
- 客户端报错:Connection reset by peer或Connection refused或502状态码;
- 访问日志,upstream addr显示为非IP地址;
- 客户端抓包:SYN发出后收到了RST;
可能的原因:RS全部健康检查失败。
处理方法:后端ECS上分析排查健康检查失败的原因。
c. 问题表现:
- ping or telnet 表现类似,偶发不通;
- 只有部分地域或单个运营商存在问题;
可能的原因:公网链路质量问题。
处理方法:获取MTR结果后请终端用户向当地运营商报障。
d. 问题表现:
- 可以ping通SLB IP;
- 是四层监听;
- 访问失败概率为(n-1)/n,n为后端ECS服务器台数;
- 客户端抓包SYN发出后没有收到SYN ACK;
可能的原因:服务器同时作为后端ECS与客户端;
处理方法:
- 更改为7层监听
- 更改架构
2. 健康检查失败
a. 四/七层监听健康检查失败原因:
- 屏蔽了健康检查源IP;
- 后端ECS端口是否监听;
- 后端ECS监听队列是否溢出;
- 安全软件是否进行了拦截;
b. 七层监听健康检查失败原因:
除了上述可能的问题,七层监听默认使用head请求,需要查看后端WebServer是否开启head请求;
c. 错误信息示例:
TCP监听:TCP connect time out / TCP connect error
UDP监听:UDP connect error
HTTP(s)监听:check protocol error / check time out
3. 访问出现4xx,5xx
使用负载均衡后出现4xx、5xx的处理思路:
a. 400 Bad Request
- 请求头过大;
- Cookie过大;
b. 500 Internal Server Error
- 指定域名和url时,没有精确匹配url;
- 在proxy往后端ECS发送数据的过程中,后端ECS主动RST了TCP连接;
c. 502 Bad Gateway
- proxy和后端ECS三次握手过程中,后端ECS主动回复了RST;
- proxy和后端ECS三次握手成功,但在等待响应的过程中后端ECS主动回复了RST;
- 所有后端ECS健康检查失败;
d. 503 Service Unavailable
- proxy超出单台限定的QPS,upstream_response_time和upstream_addr会填充为“_”;
- 转发的目标集合中没有可用的RS(如虚拟服务器中没有RS,后端服务器中没有ECS),upstream_response_time一般会填充为0.000,upstream_addr会填充为“127.0.0.1:503”;
e. 504 Gateway Timeout
- proxy和RS三次握手建连超时(超时时间为5秒),如syn一直在重传,upstream_response_time填充为5秒(可能会有正负一点误差,如5.001),upstream_status为504;
- proxy和RS三次握手成功,但是等待HTTP响应超时(超时时间为60秒),upstream_response_time填充为60秒(可能会有正负一点误差,如60.001),upstream_status为504。
4. 负载不均
a. 负载不均的原因
- 四层监听:业务存在长连接;新建连接数过少;
- 七层监听:启用了HTTP2;
- 四/七层监听:后端健康检查抖动;会话保持;转发规则为最小连接数。
b. 解决思路:
- 访问日志;
- 健康检查日志;
- 寻求阿里云技术支持,查看底层数据。
5. 压测性能不符合预期
a. 施压前
- 观测指标:50x状态码(特别是503状态码);丢弃连接、丢弃流量、50x状态码、upstream_response_time;upstream_response_time;
- 施压方式:长时间的压测、施压的源IP足够多(建议10个以上);
b. 施压中
- 施压工具:推荐使用PTS、Jmeter;
- 关闭健康检查;
- 关闭会话保持;
c. 施压后
- 查看压测报告:QPS、RT、TPS、VU;
- 评估是否达到预期;
d. 可能的原因
- 单TCP流压测:单个TCP链接速率峰值=CLB总带宽的1/(N-1);
- 客户端出现瓶颈:源端口不足、带宽受限;
- SLB本身出现瓶颈:超过实例配额;
- 后端ECS出现瓶颈。