那,ELB负载均衡配了Auto Scaling自动伸缩功能,然后发现总是最老的设备被最早缩减销毁,按道理最老的服务的用户应该是最多的,为什么会这样呢?经过查找,在亚马逊的控制在缩小过程中终止哪些 Auto Scaling 实例页面找到了规则说明,完整摘录如下:

默认终止策略

此默认终止策略可帮助确保您的网络架构均匀分布到多个可用区。使用默认终止策略时,Auto Scaling 组的行为如下所示:

  1. 如果多个可用区中都有实例,选择有最多实例并且至少一个实例不受缩小保护的可用区。如果有多个可用区有此数目的实例,则选择使用最旧启动配置的实例所在的可用区。
  2. 确定所选可用区中哪些不受保护的实例使用最旧启动配置。如果有一个此类实例,则终止该实例。
  3. 如果有多个实例使用最旧启动配置,则确定哪些不受保护的实例最接近下个计费小时。(这将帮助您最大程度地使用您的 EC2 实例并管理 Amazon EC2 使用成本。)如果有一个此类实例,则终止该实例。
  4. 如果有多个不受保护的实例最接近下个计费小时,则随机选择其中一个实例。

考虑一个有两个可用区的 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。根据默认终止策略终止实例。如果该组有多个扩展策略,此策略非常有用。

使用控制台自定义终止策略

  1. 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/
  2. 在导航窗格上,选择Auto Scaling Groups
  3. 选择 Auto Scaling 组。
  4. 对于Actions,选择Edit
  5. Details选项卡上,找到Termination Policies。选择一个或多个终止策略。如果您选择多个策略,请按照您希望应用这些策略的顺序将其列出。如果您使用Default策略,请将该策略设为列表中的最后一项。
  6. 选择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 实例中断。

任务

  1. 启用组的实例保护
  2. 修改组的实例保护设置
  3. 修改实例的实例保护设置

启用组的实例保护

您可以在创建 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 组的实例保护设置。
使用控制台更改组的实例保护设置

  1. 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/
  2. 在导航窗格上,选择Auto Scaling Groups
  3. 选择 Auto Scaling 组。
  4. Details选项卡上,选择Edit
  5. 对于Instance Protection,选择Protect From Scale In
  6. 选择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 组获取其实例保护设置。但是,您随时可以对实例启用或禁用实例保护。
使用控制台更改实例的实例保护设置

  1. 打开 Amazon EC2 控制台https://console.aws.amazon.com/ec2/
  2. 在导航窗格上,选择Auto Scaling Groups
  3. 选择 Auto Scaling 组。
  4. Instances选项卡上,选择实例。
  5. 要启用实例保护,请依次选择ActionsInstance ProtectionSet Scale In Protection。系统提示时,选择Set Scale In Protection
  6. 要禁用实例保护,请依次选择ActionsInstance ProtectionRemove 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

Related Posts: AWS-Auto Scaling终止规则 :

留言

avatar