【发布时间】:2016-02-10 10:33:31
【问题描述】:
我有一个效果很好的自动缩放,在启动配置中我定义了一个在新实例启动时执行的用户数据脚本。
用户脚本更新基本代码并生成缓存,这需要几秒钟。但只要实例“创建”(而不是“准备好”),自动缩放就会将其添加到负载均衡器中。
这是一个问题,因为在执行 userdata 脚本时,实例没有给出良好的响应(基本上会抛出 500 个错误)。
我想避免这种情况,当然我看到了这个文档:http://docs.aws.amazon.com/AutoScaling/latest/DeveloperGuide/InstallingAdd
与独立 EC2 实例一样,您可以选择使用用户数据配置启动到 Auto Scaling 组的实例。例如,您可以使用 AWS 管理控制台中的用户数据字段或 AWS CLI 中的 --userdata 参数指定配置脚本。
如果您有无法使用配置脚本安装的软件,或者如果您需要在 Auto Scaling 将实例添加到组之前手动修改软件,请向您的 Auto Scaling 组添加生命周期挂钩,以便在Auto Scaling 组启动实例。当您安装和配置附加软件时,此挂钩将实例保持在 Pending:Wait 状态。
看起来我不是这种情况。此外,修改 userdata 脚本上的挂起钩子也很复杂。必须有一个简单的解决方案来解决我的问题。
感谢您的帮助!
【问题讨论】:
-
我不确定我是否理解这是一个问题。当实例被“创建”并且 Autoscale 将其添加到 ELB 时,ELB 将测试该实例,并且该实例需要通过您配置的运行状况检查次数,然后 ELB 才能使其可用。然后,您当然需要进行健康检查,以便在您的用户数据脚本执行时它会失败。
-
您的意思是当用户数据未完全执行时,aws 认为实例“健康”?
-
EC2 在 VM 运行后认为实例“健康”(即当操作系统启动时,AMI 已完全启动等)。它不考虑正在完成的 userdata 命令。例如,我经常通过 SSH 连接到一个新实例,跟踪日志文件并在执行 userdata 命令时观察它们的输出。但是,除此之外,ELB 不会认为实例健康并开始向其发送流量,直到它通过您在启动 ELB 时配置的健康检查。所以,这就是你需要关注的地方。
-
谢谢。我通过在 userdata 脚本开始时关闭 http 服务器解决了我的问题。所以负载均衡器不能有绿色的健康状态,它不会将客户端发送到实例。我在脚本结束时重新启动了http服务器,健康状况良好,因此ELB为其提供服务。
标签: amazon-web-services amazon-ec2