amazon-web-services - AWS 应用程序负载均衡器 - 在执行运行状况检查之前等待一段时间
问题描述
我有一个应用程序负载均衡器,它被配置为将请求转发到目标组内的 EC2 实例。此外,我有一个自动缩放组附加到同一个目标组,它根据服务器负载增加实例的数量。
健康检查在目标组内配置并且工作正常。但是,有时当负载增加并且自动缩放组创建一个新实例时,当 ELB 调用运行状况检查时,我看到新 EC2 实例上引发了异常。
通常,我的实例在启动后需要大约 30 秒来安装一些库。这就是为什么我在自动缩放组内配置了相当大的健康检查宽限期。
困扰我的问题是,在实例安装所需的库之前,负载均衡器似乎有时会请求运行状况检查端点(即使我在目标组内配置了 5 分钟间隔)。这会导致抛出异常,我会收到一个通知,这很烦人。
Auto Scaling 中的运行状况检查宽限期似乎不会阻止 ELB 向新实例发送运行状况检查请求。您知道如何在自动缩放创建新实例后让 ELB 运行状况检查等待一段时间吗?
解决方案
我最终通过这里。谷歌,很遗憾没有看到答案。我后来发现了一个通过 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,并更改生命周期名称、组名称和区域以适应。
推荐阅读
- python - 使用 .agg(多列)使 groupby 之后的所有列更有效
- string - 如何在android studio中使单词没有空格分开
- javascript - 从某个导入的类中跟踪调用者 React 组件
- android - Android react-native 深度链接和应用程序嵌入式浏览器
- c# - 我需要与另一个使用 Github 的程序员在同一个课程上工作
- python - 将mysql数据导出到csv时不要将NULL值转换为空字符串
- android - 如何使用 react-native-generator 为本地运行的 api 创建应用程序并在模拟器中连接到它?
- python - 在 Matplotlib 中显示多个线图例
- python - 仅当同一行中的其他值为 True 时才从 pandas 数据框中添加值
- java - 如何设置弹簧安全会话超时?