应用程序 ELB 在宽限期之前将流量路由到新添加的实例

Application ELB route traffic to new added instance before grace period

我已经设置了自动缩放组并将宽限期设置为 300(5 分钟)。我的新实例最多需要 2.5 分钟才能启动并准备好处理 HTTP 请求。但是我注意到每次添加新实例时,ELB 甚至在宽限期(即 5 分钟)之前就开始将流量转发到新实例。因此,我面临 502 Bad Gateway 错误。

任何人都可以指导我为什么我的应用程序负载均衡器表现如此吗?

我正在使用 ELB 类型的健康检查,以下是我的目标群体健康检查的设置

协议:HTTP

端口:80

健康阈值:2

不健康阈值:10

超时:10

间隔:150

成功代码:200

这是正常现象。没有宽限期来防止进行健康检查。这适用于 ELB 和 EC2 服务健康检查。在您指定的宽限期内,ELB 和 EC2 服务都会向您的实例发送健康检查。这里的区别在于自动缩放不会根据这些检查的结果进行操作。这意味着自动缩放不会自动安排实例进行替换。

只有在实例启动并运行正确(通过ELB和EC2健康检查)后,ELB才会注册实例并开始向其发送正常流量。但这可能发生在宽限期到期之前。如果您在实例注册到 ELB 后看到 502 错误,那么您的问题出在其他地方。

我终于解决了我的问题。我在这里写我的解决方案是为了帮助这里遇到同样问题的其他人。

就我而言,我最初的感觉是 Application Load Balancer 在准备好服务之前将流量路由到新添加的实例。但详细调查表明,这不是问题所在。在我的例子中,新实例能够在开始时为流量提供服务,几分钟后它生成这个 ELB 级别 502 错误大约 30 秒,然后它开始正常工作。

解法: 该应用程序的默认连接 KeepAlive 为 60 秒。 Apache2 的默认连接 KeepAlive 为 5 秒。如果 5 秒结束,Apache2 将关闭其连接并重置与 ELB 的连接。然而,如果一个请求恰好在正确的时间进来,ELB 将接受它,决定将它转发到哪个主机,在那一刻,Apache 关闭连接。这将导致上述 502 错误代码。

我将 ELB 超时设置为 60 秒,Apache2 超时设置为 120 秒。这解决了我的问题。