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

时间:2019-01-24 10:46:05

标签: amazon-web-services amazon-ec2 amazon-elb autoscaling

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

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

我正在使用ELB类型的运行状况检查,以下是我的目标组运行状况检查的设置

协议:HTTP

端口:80

健康阈值:2

不健康阈值:10

超时:10

时间间隔:150

成功代码:200

2 个答案:

答案 0 :(得分:1)

这是正常现象。宽限期不存在,以防止发生健康检查。 ELB和EC2服务运行状况检查均是如此。在您指定的宽限期内,ELB和EC2服务都将向您的实例发送运行状况检查。此处的区别在于自动缩放不会对这些检查的结果起作用。这意味着自动缩放不会自动安排实例进行替换。

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

答案 1 :(得分:0)

最后,我解决了我的问题。我在这里编写我的解决方案,以帮助遇到此问题的其他人。

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

解决方案: 该应用程序的默认连接KeepAlive为60秒。 Apache2的默认连接KeepAlive为5秒。如果5秒钟结束,Apache2将关闭其连接并使用ELB重置连接。但是,如果请求恰好在正确的时间到达,则ELB将接受该请求,决定将其转发到哪个主机,并且在那一刻,Apache将关闭连接。这将导致出现502错误代码。

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