我设置了“自动缩放”组,并将宽限期设置为300(5分钟)。我的新实例最多需要2.5分钟才能启动并准备处理HTTP请求。但我注意到,每次添加新实例时,ELB都会在宽限期(即5分钟)之前开始将流量转发到新实例。由于这个原因,我面临502 Bad Gateway错误。
任何人都可以指导我为什么我的应用程序负载均衡器表现得如此吗?
我正在使用ELB类型的运行状况检查,以下是我的目标组运行状况检查的设置
协议:HTTP
端口:80
健康阈值:2
不健康阈值:10
超时:10
时间间隔:150
成功代码:200
答案 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秒。这解决了我的问题。