我已经安装自动伸缩群和设置宽限期,以300(5分钟)。我的新实例,最多需要2.5分钟开机,并准备处理HTTP请求。但我注意到,我的每一个新的实例被添加ELB时间开始转发流量到新实例之前,宽限期即5分钟甚至方式。由于这是我现在面临502错误网关错误。
任何人都可以指导我,为什么我的应用负载平衡器的行为就像它?
我使用ELB型健康检查和下面是我的目标群体健康检查的设置
协议:HTTP
端口:80
健康门槛:2
不健康的门槛:10
超时:10
区间:150
成功代码:200
这是一种正常的行为。宽限期是不是有预防健康检查的发生。这适用于ELB和EC2服务的健康检查属实。在您指定的宽限期,无论ELB和EC2服务将发送健康检查到您的实例。这里的区别是,自动缩放不会根据这些检查的结果采取行动。这意味着,自动缩放不会自动调度实例进行更换。
只有在该实例启动并运行正常(通过ELB和EC2健康检查),将ELB注册的实例,并开始发送正常的信息流。但在宽限期到期之前会发生这种情况。如果你看到502错误后的实例已与ELB注册那么你的问题是其他地方。
最后我解决我的问题。我在这里写我的解决方案,以帮助其他人在这里面临着同样的问题。
就我而言,我最初的感觉是,Application Load Balancer
是路由流量到新添加的实例之前,它已准备好为。但详细的调查表明,这不是问题。在我的情况下,新的实例也能够服务在启动交通,这是产生这种ELB
水平502错误数分钟后大约30秒之后,它开始正常工作。
解决方案:应用程序有60秒的默认连接KeepAlive
。 Apache2的有5秒的默认连接KeepAlive
。如果5秒以上,Apache2的关闭其连接并重置与ELB
的连接。但是,如果收到请求时在恰当的时候,ELB
会接受它,决定哪个主机将其转发给,并在那一刻,Apache的关闭连接。这将导致该502错误代码。
我设置ELB
超时设置为60秒,的Apache2超时为120秒。这解决了我的问题。