应用程序 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 秒。这解决了我的问题。
我已经设置了自动缩放组并将宽限期设置为 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 秒。这解决了我的问题。