zeus/docs/Q&A.md
2020-03-14 22:36:06 +08:00

3.6 KiB
Raw Permalink Blame History

请求状态码

499错误码

简介499 Code是客户端在请求SLB后在获取到Response前客户端断开了连接。此时由于连接已经断开SLB无法将Response返回给客户端SLB此时不管后端服务返回码是多少均记录为ErrorCode 499。并且客户端是服务接收到499状态码的仅是SLB自己记录的状态码。499, client has closed connection

499错误码并不返回给客户端因为客户端已经断开连接SLB会将499记录的AccessLog中SLB的监控日志中可以看到499. 客户端通常出现报错ReadTimeoutSocketTimeout类型的异常。

502错误码

简介502 Code是客户端在请求SLB后SLB收到了Resquest并向后端服务转发。如果无法获取到可用后端服务或者请求发送给后端服务后后端服务未能成功返回Response。此时SLB会返回502 Code。

502可能是哪里返回的

SLB返回502出现场景SLB无法获取到可用后端服务或者请求发送给后端服务后后端服务未能成功返回Response比如应用服务器健康监测全部拉出或者应用服务器宕机、网络故障不通、后端服务拒绝等。 后端服务返回502出现场景502也是一种ErrorCode也可以是后端服务返回的。一般出现在代理服务返回该Code。比如NodeJS的应用服务由于该类服务本机会搭建Nginx如果这里出现故障可能返回502、后端服务为代理服务后端服务再向后转发时也可能遇到同SLB无法获取到可用后端服务的类似问题、后端服务为k8s的service类型即使用了k8s的负载均衡Service或者搭建了nginx实现k8s的负载均衡同样可能出现类似情况。

504错误码

简介504Code是客户端在请求SLBSLB成功向后端服务转发请求然而在SLB的超时阈值内并未返回ResponseSLB认为后端服务已经超时并返回504 Gateway Timeout

502可能是哪里返回的

504Code为SLB返回的。后端服务的响应码可能是任意的状态码 由于已经达到SLB的超时阈值SLB将不再等待后端服务的返回直接返回504给客户端。所以后端服务的Code可能不能被记录到。应用服务器的WebLog应该可以查看到。

413、414错误码

SLB对请求的Header和URI长度默认有一定限制。超过SLB配置的超时时间时SLB会返回400 (Bad Request) 或者414 (Request-URI Too Large)错误码。

这里当超过阈值时414 400 均为SLB返回给客户端的状态码但是如果Header及URI可能没有超过SLB的阈值SLB继续进行了转发而后端服务也可能返回了400或者414。所以414,400 可能是SLB返回也可能是后端服务返回通过SLB的UpstreamStatus字段区分。

NoHttpResponse&ConnectionReset

触发原因: 经过我们的排查这两种异常很大概率是由于支持目标服务的SLB集群进行reload操作所导致的。

解决方案: 增加重试次数降低重试门槛向Apache HttpClient中的默认重试机制靠近。相信通过这样的调整虽然可能无法完全消灭这两种异常但也可以将它的数量降低到可以接受的程度。