You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何开启保护的Amazon EC2仍被Auto Scaling Group终止?

问题解答:开启终止保护和缩容保护的EC2实例仍被ASG终止是否符合预期?

这种行为完全符合AWS Auto Scaling Group(ASG)的设计逻辑,下面我会结合你的场景和AWS的规则详细解释:

一、先明确两个保护机制的适用范围

你开启的两个保护,作用场景是不同的,都不覆盖「健康检查失败触发的实例替换」:

  • EC2实例终止保护:仅阻止手动终止实例(比如在EC2控制台手动点终止、通过API调用终止),或者非ASG发起的终止操作。但ASG作为实例的管理方,当它判定实例不健康需要替换时,会绕过这个保护直接终止实例。
  • ASG实例缩容保护:这个保护是为了防止ASG在主动缩容动作中终止实例——比如当你调整ASG期望实例数降低、或者基于CloudWatch指标(比如你设置的NetworkOut)触发缩容时,开启了缩容保护的实例不会被选中终止。但它不阻止ASG替换不健康的实例,因为这属于「健康替换」而非「缩容」操作。

二、结合你的场景具体分析

你模拟的流程是:

  1. 将EC2切到Standby模式,停止IIS后切回InService但未启动IIS
  2. ALB的健康检查检测到实例不健康,将其从目标组移除
  3. ASG发现实例被标记为不健康,触发替换流程,终止了受保护的实例

这正是ASG的正常行为:当ASG通过ELB健康检查判定实例不健康时,它会自动启动一个新的健康实例来替换这个故障实例,确保你的集群始终维持健康的实例数(你设置了至少2台)。这个替换流程不受缩容保护和EC2终止保护的限制,因为它的目的是保障服务可用性,而非缩容。

三、如果想避免这种情况的建议

如果你希望在实例健康检查失败时,ASG不要直接终止它,而是给你修复的时间,可以考虑:

  • 调整ALB的健康检查阈值:比如增加「不健康阈值」的次数,延长检测间隔,给你足够的时间修复实例
  • 使用ASG的Standby模式:当你需要维护实例时,主动将实例切换到Standby模式,此时ASG会认为这个实例暂时不可用,会启动新实例补充,而不会终止Standby状态的实例,等你维护完成后再切回InService
  • 自定义ASG的健康检查策略:比如结合CloudWatch告警或者自定义健康检查脚本,只有在满足特定条件时才触发替换

内容的提问来源于stack exchange,提问作者tybalt

火山引擎 最新活动