AWS自动缩放ELB状态检查宽限期

时间:2014-12-05 18:45:33

标签: amazon-web-services load-balancing autoscaling amazon-elb

我正在AWS自动量表组中运行服务器。正在运行的服务器位于负载均衡器之后。我正在使用ELB来管理自动缩放组健康检查。当服务器启动并加入自动缩放组时,它们当前会立即加入负载均衡器。

我需要等多长时间(即健康检查宽限期)才能让他们加入负载均衡器?

是否只有在服务器处于运行状态之后?

是否只有在服务器通过系统并且实例状态检查后?

3 个答案:

答案 0 :(得分:18)

Auto Scaling组有两种类型的运行状况检查:

  • EC2运行状况检查:这使用EC2 status check来确定实例是否健康。它仅在虚拟机管理程序级别运行,无法查看在实例上运行的应用程序的运行状况。
  • Elastic Load Balancer(ELB)运行状况检查:这会导致Auto Scaling组将运行状况检查委派给Elastic Load Balancer,后者能够检查特定的HTTP(S)URL。这意味着它可以检查应用程序是否在实例上正确运行。

鉴于您的系统正在使用ELB运行状况检查,Auto Scaling将在确定每个EC2实例的运行状况时信任ELB运行状况检查的结果。这可能有点危险,因为如果实例需要一段时间才能启动,则运行状况检查可能会错误地将实例标记为“运行状况不佳”。反过来,这将导致Auto Scaling终止实例并启动替换。

为避免出现这种情况,Auto Scaling组配置中存在运行状况检查宽限期设置(以秒为单位)。这表示Auto Scaling应该等待多长时间,直到它开始使用ELB运行状况检查(反过来,它具有检查频率的设置以及将实例标记为健康/不健康所需的检查次数。)

因此,如果您的应用程序需要3分钟才能启动,请将运行状况检查宽限期设置为最少180秒(3分钟)。文档没有说明时间是从实例标记为“正在运行”的时刻开始,还是从状态检查完成时开始,因此执行一些时序测试以避免任何“反弹”情况

事实上,我建议将健康检查宽限期设置为显着更高的值(例如,所需时间的两倍)。这不会影响系统的运行,因为健康实例将在满足ELB运行状况检查后立即开始提供流量,这比Auto Scaling宽限期更快。最糟糕的情况是,真正不健康的实例将在几分钟后终止,但这应该是罕见的。

答案 1 :(得分:2)

文档(现在)声明“宽限期在实例通过EC2系统状态检查和实例状态检查后开始。” 因此,至少根据2015年中期的AWS文档,答案是“在服务器通过系统和实例状态检查之后”。这就是我们设置环境的方式,虽然我没有做出精确的时间,但似乎是正确的。

答案 2 :(得分:0)

  1. 如果您密切监视cloudformation堆栈事件,您将获得成功信号,表明您的ASG已更新。
  2. ASG开始更新和ASG收到成功信号之间的时间差是运行状况检查宽限期。
  3. 始终建议此运行状况检查宽限期为应用程序启动时间的两倍。假设您的应用程序需要10分钟才能启动,您应该将运行状况检查宽限期设置为20分钟。
  4. 原因是您永远不知道您的应用程序可能会引发某种错误并进行多次重试。