首页 > 解决方案 > AWS 应用程序负载均衡器 - 在执行运行状况检查之前等待一段时间

问题描述

我有一个应用程序负载均衡器,它被配置为将请求转发到目标组内的 EC2 实例。此外,我有一个自动缩放组附加到同一个目标组,它根据服务器负载增加实例的数量。

健康检查在目标组内配置并且工作正常。但是,有时当负载增加并且自动缩放组创建一个新实例时,当 ELB 调用运行状况检查时,我看到新 EC2 实例上引发了异常。

通常,我的实例在启动后需要大约 30 秒来安装一些库。这就是为什么我在自动缩放组内配置了相当大的健康检查宽限期。

困扰我的问题是,在实例安装所需的库之前,负载均衡器似乎有时会请求运行状况检查端点(即使我在目标组内配置了 5 分钟间隔)。这会导致抛出异常,我会收到一个通知,这很烦人。

Auto Scaling 中的运行状况检查宽限期似乎不会阻止 ELB 向新实例发送运行状况检查请求。您知道如何在自动缩放创建新实例后让 ELB 运行状况检查等待一段时间吗?

标签: amazon-web-servicesamazon-elbaws-load-balanceraws-auto-scaling

解决方案


我最终通过这里。谷歌,很遗憾没有看到答案。我后来发现了一个通过 Lifecycle 钩子(在 Auto Scaling 组中的实例管理下找到)使这项工作的资源。使用生命周期钩子,您基本上可以“暂停”处于 pre-inService 状态的实例,直到通过取消暂停。命令行调用,或发生超时。

因此,在这种情况下,您需要将类似这样的内容添加到启动脚本/用户数据中:

INSTANCE_ID="`wget -q -O - http://instance-data/latest/meta-data/instance-id`" && \
aws autoscaling complete-lifecycle-action --lifecycle-action-result CONTINUE --instance-id $INSTANCE_ID --lifecycle-hook-name test-hook --auto-scaling-group-name test-asg --region eu-west-1 

确保aws在服务器上的其他安装期间安装 cli,并更改生命周期名称、组名称和区域以适应。

更多信息可以在这里找到:https ://medium.com/faun/autoscaling-like-a-pro-how-to-use-ec2-auto-scaling-lifecycle-hooks-the-right-way-7e1e6c952d3c


推荐阅读