我们最近从ELB切换到ELB2/ALBs,偶尔我们的go http/2客户端会看到来自我们的应用程序负载均衡器的GOAWAY消息,这我无法解释。目标组服务器只支持http/1.1,我们的负载均衡器应该始终至少有一台健康的服务器在轮换。
在ALB中注册新实例时,我可以可靠地重现GOAWAY。当目标处于“初始”状态时,ALB返回GOAWAY。此外,即使ALB以GOAWAY响应,请求也会成功地发送到目标组中注册的其他实例。因此,在给定实例web0和web1的情况下,如果我取消注册web0并重新注册该目标,当我在web0处于“初始”状态时发出请求时,我可以可靠地再现GOAWAY。但是,我们的日志显示web1成功地处理了该请求。
我们的客户端是一个使用http.DefaultClient的Go程序。我可以使用Go 1.7和1.8beta2来重现这种行为。
发生这种情况时,我们的客户端会记录有关HTTP/2响应的更多详细信息:
http2: server sent GOAWAY and closed the connection; LastStreamID=1, ErrCode=NO_ERROR, debug=""我想更好地了解这里发生了什么。go http2包或我们的代码是否应该通过重试请求来自动处理GOAWAY?我对http2不够熟悉,不知道是否需要GOAWAY,这意味着我们的Go客户端不应该将其作为错误条件来处理,或者这是否表明ALB出了问题。
发布于 2017-01-12 00:25:33
关于GOAWAY
GOAWAY帧包含三条信息,可帮助您排除故障:
+-+-------------------------------------------------------------+
|R| Last-Stream-ID (31) |
+-+-------------------------------------------------------------+
| Error Code (32) |
+---------------------------------------------------------------+
| Additional Debug Data (*) |
+---------------------------------------------------------------+的相关摘录
尝试正常关闭连接的服务器应发送一个初始
帧,其中最后一个流标识符设置为2^31-1,并发送一个NO_ERROR代码。这向客户端发出即将关闭的信号,并且禁止发起进一步的请求。在为任何动态流创建留出时间(至少一个往返时间)之后,服务器可以发送另一个具有更新的最后一个流标识符的GOAWAY帧。这确保了连接可以干净地关闭,而不会丢失请求。
found an upper-case letter in header name。这个特别的GOAWAY
http2: server sent GOAWAY and closed the connection; LastStreamID=1, ErrCode=NO_ERROR, debug=""
由于服务器正在发送NO_ERROR,因此您的客户端应该简单地尝试重新连接,而不是将消息视为错误。
至于为什么ALB要发送GOAWAY。我不确定,你能给我们更多的细节吗?
发布于 2017-03-09 05:25:35
@frederik deweerdt的答案应该被接受,特别是关于应用程序负载均衡器,这是亚马逊网络服务论坛上类似问题的答案,https://forums.aws.amazon.com/thread.jspa?messageID=771883
客户端收到的HTTP/2GOAWAY响应是应用程序负载均衡器正常关闭的连接。应用程序负载均衡器通常允许空闲连接持续到配置的空闲超时,该超时的默认值为60秒。但是,有一些条件可以触发空闲连接的关闭。在HTTP/1.1连接上,允许未完成的请求完成,然后正常断开TCP连接。在HTTP/2连接上,负载均衡器通过发送HTTP/2GOAWAY来正常启动这些连接的关闭。根据RFC 7540,"GOAWAY允许端点优雅地停止接受新流,同时仍完成对先前建立的流的处理“。客户端应通过完成正在进行的请求、关闭连接并在需要时重新连接来响应。应用程序负载均衡器将在访问日志中记录每个请求的HTTP状态,而不是连接状态关闭信号。
应检查由于收到HTTP/2 GOAWAY而出现错误的客户端,以确保它们完全符合HTTP/2 RFC。
有关HTTP/2 GOAWAY方法的更多信息,请参阅RFC7540的第6.8节。https://www.rfc-editor.org/rfc/rfc7540#section-6.8
如果您对弹性负载均衡器的此行为或其他行为有任何进一步的问题,请让我们知道。
https://stackoverflow.com/questions/41592929
复制相似问题