Apr
15
2021
负载均衡SLB实例的服务地址访问超时
问题描述
负载均衡SLB实例的服务地址访问超时。
问题原因
问题原因可能有如下几点:
-
SLB实例的服务地址被安全防护,如流量黑洞和流量清洗、WAF防护。客户端端口不足。尤其在进行压力测试时,客户端端口不足会导致建立连接失败,负载均衡SLB默认会抹除TCP连接的
timestamp
属性,Linux协议栈的tw_reuse(time_wait状态连接复用)无法生效,time_wait状态连接堆积导致客户端端口不足,最终访问超时。 - 后端服务器accept队列满,导致后端服务器不回复syn_ack报文,客户端超时。
- 某些应用对连接超时的RST报文处理不当。负载均衡SLB建立TCP连接后,如果900秒未活动,则会向客户端和服务器双向发送RST报文以断开连接。有些应用对RST异常处理不当,可能会对已关闭的连接再次发送数据,导致应用超时。
- 后端服务器访问四层负载均衡SLB的服务地址会导致连接失败,常见的场景有:后端应用使用URL拼接的方式跳转访问。
解决方案
- 如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。
- 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。
- 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。
请根据问题原因匹配对应的解决方法:
-
SLB实例的服务地址被安全防护
登录云盾DDoS防护产品控制台,检查SLB实例的状态。 -
客户端端口不足
客户端使用长连接代替短连接,通过RST报文断开连接,socket设置SO_LINGER
属性 ,而不是通过FIN包的方式断开连接。 -
后端服务器accept队列满
如果后端服务器中默认的net.core.somaxconn
的值为128,您可以参考如下命令,更改该参数的值,并重启后端服务器上的应用。sysctl -w net.core.somaxconn=1024
说明:此处仅为建议,您可以根据业务环境进行调整。建议提前创建快照或备份相关数据文件。
-
某些应用对连接超时的RST报文处理不当
建议优化客户端程序,及时关闭已使用完毕的连接。 -
后端服务器访问四层负载均衡SLB的服务地址会导致连接失败
建议改用七层的HTTP监听或HTTPS监听。
本公司销售:阿里云、腾讯云、百度云、天翼云、金山大米云、金山企业云盘!可签订合同,开具发票。
我有话说: