AWS - 自动缩放未按指定启动/终止实例

Posted

技术标签:

【中文标题】AWS - 自动缩放未按指定启动/终止实例【英文标题】:AWS - Autoscaling not launching/killing instances as specified 【发布时间】:2017-03-17 14:47:28 【问题描述】:

我正在测试 AWS 自动缩放。我创建了一个简单的弹性豆茎并编辑了缩放设置。这是 Auto Scaling 组扩展策略的屏幕截图:

如您所见,我试图让该组拥有 5 到 10 个永久健康的实例。实例的最大和最小数量已设置为 20 和 2。

我只运行了 2 个实例(最少)。

报警定义为:

ping 服务器太健康了 ping 服务器不够健康

负载均衡器的警报似乎工作正常:

但是伸缩组没有启动新实例。我已经尝试以相反的方式设置警报(我不确定当它们从 true 变为 false 或从 false 变为 true 时会触发它们),这会导致 20 个实例(最大值)

【问题讨论】:

【参考方案1】:

不是您应该使用 Auto Scaling 的方式。

当 Elastic Beanstalk 创建“负载平衡、自动缩放”环境时,它会为您创建 Auto Scaling 组。作为这些配置的一部分,您可以指定要在 Auto Scaling 组中启动的最小最大数量的实例:

Auto Scaling 组随后会将实例的当前 Desired Capacity 保持在最小值和最大值之间。如果一个实例失败(定义如下),Auto Scaling 将自动将该实例替换为另一个实例以保持所需容量

扩展策略随后用于调整所需容量。扩展策略应使用某种“负载”度量来确定何时添加或删除实例,例如 CPU 利用率或 Amazon SQS 队列的大小。目的是在需要更多容量时添加额外的服务器,并在容量过多时移除服务器。

HealthyHostCount 指标表示有多少服务器通过了 Elastic Load Balancing 运行状况检查。如果实例未通过健康检查,负载均衡器将停止向其发送请求,但会继续执行健康检查。如果实例再次变得健康,负载均衡器将继续向该服务器发送请求。可以将 Elastic Load Balancing 运行状况检查配置为检查服务器上的特定页面,以确认应用程序运行状况良好

Auto Scaling 执行健康检查时,它只是checking the the status of the virtualization environment,与EC2 管理控制台显示2/2 status checks 的方式相同。但是,可以将 Auto Scaling 配置为使用 Elastic Load Balancing 运行状况检查。这样,Auto Scaling 可以收到应用程序运行状况不佳的通知,并且可以自动替换失败的实例(或具有失败应用程序的实例)。

您说您的目标是“让该组有 5 到 10 个永久健康的实例”。这是 Auto Scaling 的工作,尤其是当它已配置为使用 Elastic Load Balancing 运行状况检查时。扩展策略的工作是根据工作负载确定何时添加/删除实例。 不应将扩展策略用作替换不正常实例的手段。

所以,我建议:

在负载均衡器中配置运行状况检查,以准确检查应用程序的运行状况 在您的 Auto Scaling 组中开启 ELB 运行状况检查(这将确保应用程序运行状况不佳的实例将被替换) 使用扩展策略根据工作负载而不是健康状况来添加/删除实例 相信系统。有效!

【讨论】:

非常感谢您的详细回答。我认为您对我的问题的糟糕设计选择是正确的,并且最终扩展应该取决于应用程序的健康状况。我设置了这些扩展策略来测试扩展行为,因为它们比基于工作负载的环境更容易在暂存环境中进行测试。但是,当前设置不应该导致 5 到 10 个实例之间的扩展吗?在转向信任系统之前,我想了解并测试警报/扩展策略机制!目前这意味着获得一组 5-10 个实例 :) 您可以通过控制台手动触发扩展策略(“执行”)。但是,如果您想要对系统进行真正的测试,您的扩展策略应该基于负载,因此您必须以某种方式生成负载。 “执行”按比例放大或缩小,但除外。我不确定警报是否正常工作,因为它们应该被触发,并自动触发放大和缩小。我认为目前它正在尝试删除实例,并达到了下限。如果我恢复警报,它会变为 20(上限),表明警报确实被触发了,但逻辑不正确 @JohnRotenstein 您能否详细说明这一点“在您的 Auto Scaling 组中打开 ELB 运行状况检查(这将确保替换具有不正常应用程序的实例)”?我可以在“配置”中的哪个位置控制此设置? @littleibex 请提出一个新问题,而不是像 cmets 一样就旧问题提出问题。 (顺便说一句,它是 Auto Scaling 组中的设置。我不确定它是否是直接在 Elastic Beanstalk 中的设置。)

以上是关于AWS - 自动缩放未按指定启动/终止实例的主要内容,如果未能解决你的问题,请参考以下文章

如何强制终止卡在等待启动生命周期操作状态的aws实例

当实例被替换/终止时,自动缩放组启动的实例使用的 ebs 卷是不是被删除?

使用 AWS 自动缩放自动启动 java 服务器程序

AWS 自动扩展和 Spot 实例

EC2 实例可以拒绝自动缩放终止吗?

如何在自动缩放的弹性 beantalk 实例中更新文件