Capacity Provider场景下ELB健康检查失败时的自动扩缩容行为咨询
ELB健康检查失败后的行为
- ELB会立刻停止向健康检查失败的目标(ECS任务或承载任务的EC2实例)转发流量。
- 由于你的ASG未关联目标组,ASG不会因ELB健康检查失败自动替换实例——ASG默认仅依据EC2系统状态检查判断实例健康,除非手动配置关联目标组,否则不会响应ELB的健康结果。
- ECS服务侧的处理:
- 若为ECS任务自身原因导致健康检查失败(比如进程崩溃),ECS服务调度器会按照服务配置的
minimumHealthyPercent和maximumPercent参数,启动新任务替换不健康的任务,前提是集群有可用资源。 - 若为承载任务的EC2实例本身异常导致健康检查失败,ECS会将该实例标记为
DRAINING状态,不再在其上调度新任务;待实例恢复正常或被移除后,才会重新纳入调度池。
- 若为ECS任务自身原因导致健康检查失败(比如进程崩溃),ECS服务调度器会按照服务配置的
Capacity Provider对ELB健康检查的追踪逻辑
- Capacity Provider的托管扩缩容默认不会直接追踪ELB健康检查结果,其扩缩容决策核心依据是你配置的目标追踪指标,比如ECS集群的
CPUUtilization、MemoryUtilization这类实例利用率指标,或是自定义CloudWatch指标。 - ELB健康检查失败会通过间接方式影响Capacity Provider的扩缩容行为:
- 当ECS因健康检查失败启动新任务,而集群内健康实例的剩余容量不足以支撑新任务时,Capacity Provider会触发ASG扩容,补充新的EC2实例到集群。
- 若不健康的EC2实例被标记为
DRAINING但未被ASG替换(因未关联目标组),这些实例仍会占用集群的容量配额;当集群可用容量不足时,Capacity Provider仍会触发ASG扩容。
- 若要让Capacity Provider的扩缩容直接关联ELB健康状态,需将ASG的健康检查类型配置为包含目标组健康检查——把目标组添加到ASG的健康检查设置中,这样ELB健康检查失败时ASG会自动替换实例,Capacity Provider则同步管理ASG容量以匹配集群资源需求。
内容的提问来源于stack exchange,提问作者sumedha
相关产品推荐
相关产品推荐

