那,ELB负载均衡配了Auto Scaling自动伸缩功能,然后发现总是最老的设备被最早缩减销毁,按道理最老的服务的用户应该是最多的,为什么会这样呢?经过查找,在亚马逊的控制在缩小过程中终止哪些 Auto Scaling 实例页面找到了规则说明,完整摘录如下:
默认终止策略
此默认终止策略可帮助确保您的网络架构均匀分布到多个可用区。使用默认终止策略时,Auto Scaling 组的行为如下所示:
- 如果多个可用区中都有实例,选择有最多实例并且至少一个实例不受缩小保护的可用区。如果有多个可用区有此数目的实例,则选择使用最旧启动配置的实例所在的可用区。
- 确定所选可用区中哪些不受保护的实例使用最旧启动配置。如果有一个此类实例,则终止该实例。
- 如果有多个实例使用最旧启动配置,则确定哪些不受保护的实例最接近下个计费小时。(这将帮助您最大程度地使用您的 EC2 实例并管理 Amazon EC2 使用成本。)如果有一个此类实例,则终止该实例。
- 如果有多个不受保护的实例最接近下个计费小时,则随机选择其中一个实例。
考虑一个有两个可用区的 Auto Scaling 组,所需容量为两个实例,采用在达到特定阈值时按 1 增加和减少实例数的扩展策略。该组中的两个实例分布如下。
当达到扩展策略的阈值时,策略生效,Auto Scaling 组启动新实例。Auto Scaling 组中现在有三个实例,分布如下。
当达到缩减策略的阈值时,策略生效,Auto Scaling 组终止其中一个实例。如果您没有为该组分配特定的终止策略,则使用默认终止策略。它选择有两个实例的可用区,并终止从最旧启动配置启动的实例。如果这些实例是从同一启动配置启动的,则 Auto Scaling 组选择最接近下个计费小时的实例并终止该实例。
自定义终止策略
为 Auto Scaling 组分配的默认终止策略通常足以适用于大多数情况。但是,您可以选择将默认策略替换为自定义策略。 当您自定义终止策略时,如果某个可用区的实例数多于该组使用的其他可用区,则您的终止策略将应用于不均衡可用区中的实例。如果组使用的可用区是均衡的,则终止策略将应用于该组的所有可用区。 Amazon EC2 Auto Scaling 支持以下自定义终止策略:
- OldestInstance。终止组中最旧的实例。当您将 Auto Scaling 组中的实例升级为新的 EC2 实例类型,可以逐渐将较旧类型的实例替换为较新类型的实例时,此选项十分有用。
- NewestInstance。终止组中最新的实例。如果要测试新的启动配置但不想在生产中保留它时,此策略非常有用。
- OldestLaunchConfiguration。终止采用最旧启动配置的实例。如果要更新某个组并且逐步淘汰先前配置中的实例时,此策略非常有用。
- ClosestToNextInstanceHour。终止最接近下个计费小时的实例。此策略将帮助您最大程度地使用您的实例并管理 Amazon EC2 使用成本。
- Default。根据默认终止策略终止实例。如果该组有多个扩展策略,此策略非常有用。
使用控制台自定义终止策略
- 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/。
- 在导航窗格上,选择Auto Scaling Groups。
- 选择 Auto Scaling 组。
- 对于Actions,选择Edit。
- 在Details选项卡上,找到Termination Policies。选择一个或多个终止策略。如果您选择多个策略,请按照您希望应用这些策略的顺序将其列出。如果您使用Default策略,请将该策略设为列表中的最后一项。
- 选择Save。
使用 AWS CLI 自定义终止策略使用以下命令之一:
您可以单独使用这些策略,或者将它们合并到策略列表中。例如,使用以下命令更新 Auto Scaling 组以首先使用OldestLaunchConfiguration策略,然后使用ClosestToNextInstanceHour策略:
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --termination-policies "OldestLaunchConfiguration,ClosestToNextInstanceHour"
如果您使用
Default终止策略,请将该策略设为终止策略列表中的最后一项。例如:
–termination-policies “OldestLaunchConfiguration,Default”。
实例保护
要控制 Auto Scaling 组在缩减时是否可以终止特定实例,请使用实例保护。您可以对一个 Auto Scaling 组或单个 Auto Scaling 实例启用实例保护设置。当 Auto Scaling 组启动实例时,实例会继承 Auto Scaling 组的实例保护设置。您可以随时更改 Auto Scaling 组或 Auto Scaling 实例的实例保护设置。 当实例状态为
InService时,实例保护启动。当您分离受终止保护的实例时,其实例保护设置就会失效。再次将实例挂载到组时,它会继承组的当前实例保护设置。 如果缩小期间 Auto Scaling 组中的所有实例都受终止保护并且发生缩小事件,则该组的所需容量会减少。不过,Auto Scaling 组不能终止所需数量的实例,直到其实例保护设置被禁用。 实例保护并不能针对以下情况保护 Auto Scaling 实例:
- 通过 Amazon EC2 控制台、
terminate-instances命令或
TerminateInstances操作手动终止。要保护 Auto Scaling 实例不被手动终止,请启用终止保护。有关更多信息,请参阅
Amazon EC2 用户指南(适用于 Linux 实例)中的
启用终止保护。 - 实例未通过运行状况检查的情况下的运行状况检查更换。
- Spot 实例中断。
任务
- 启用组的实例保护
- 修改组的实例保护设置
- 修改实例的实例保护设置
启用组的实例保护
您可以在创建 Auto Scaling 组时启用实例保护。默认情况下,实例保护是禁用的。
使用控制台启用实例保护在创建 Auto Scaling 组时,在Configure Auto Scaling group details页上,在Advanced Details下从Instance Protection中选择Protect From Scale In选项。
使用 AWS CLI 启用实例保护使用以下
create-auto-scaling-group命令启用实例保护:
aws autoscaling create-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in ...
修改组的实例保护设置
您可以启用或禁用 Auto Scaling 组的实例保护设置。
使用控制台更改组的实例保护设置
- 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/。
- 在导航窗格上,选择Auto Scaling Groups。
- 选择 Auto Scaling 组。
- 在Details选项卡上,选择Edit。
- 对于Instance Protection,选择Protect From Scale In。
- 选择Save。
使用 AWS CLI 更改组的实例保护设置使用以下
update-auto-scaling-group命令可对指定的 Auto Scaling 组启用实例保护:
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --new-instances-protected-from-scale-in
使用以下命令可对指定的组禁用实例保护:
aws autoscaling update-auto-scaling-group --auto-scaling-group-name my-asg --no-new-instances-protected-from-scale-in
修改实例的实例保护设置
默认情况下,实例从其 Auto Scaling 组获取其实例保护设置。但是,您随时可以对实例启用或禁用实例保护。
使用控制台更改实例的实例保护设置
- 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/。
- 在导航窗格上,选择Auto Scaling Groups。
- 选择 Auto Scaling 组。
- 在Instances选项卡上,选择实例。
- 要启用实例保护,请依次选择Actions、Instance Protection和Set Scale In Protection。系统提示时,选择Set Scale In Protection。
- 要禁用实例保护,请依次选择Actions、Instance Protection和Remove Scale In Protection。系统提示时,选择Remove Scale In Protection。
使用 AWS CLI 更改实例的实例保护设置使用以下
set-instance-protection命令可对指定实例启用实例保护:
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --protected-from-scale-in
使用以下命令可对指定实例禁用实例保护:
aws autoscaling set-instance-protection --instance-ids i-5f2e8a0d --auto-scaling-group-name my-asg --no-protected-from-scale-in
如您从本文得到了有价值的信息或帮助,请考虑扫描文末二维码捐赠和鼓励。
如本文对您有用,捐赠和留言 将是对我最好的支持~(捐赠可转为站内积分)
如愿意,请向朋友推荐本站,谢谢。
尊重他人劳动成果。转载请务必附上原文链接,我将感激不尽。