ASG上的行为很多,如启动实例、终止实例、将实例注册到ELB
,用户可以选择让ASG的某些行为暂时停止,用于调查ASG的配置问题或者其他目的。
在创建完成ASG后,编辑Advance configurations
,可以配置ASG的suspended process
:
包括以下行为:
Launch
— 当ASG扩容时,往里面添加新的EC2Terminate
—当 ASG缩容、或者实例健康状态异常时终止机器AddToLoadBalancer
—当实例启动后,将实例添加到ELBAlarmNotification
—上两节将到Dynamic scaling
,它们都是基于CloudWatch Alarm
实现的。如果禁用这个过程,所有的Dynamic scaling
策略都会失效。AZRebalance
—当EC2在AZ间分布不均衡时,ASG主动重新分布EC2到各个AZHealthCheck
—检查EC2的状态InstanceRefresh
— 进行instance refresh
活动,参考上一节ReplaceUnhealthy
—终止不健康状态的实例,启动新的实例来替换它ScheduledActions
—进行scheduled scaling
,前面也讲过下面我们将一个个介绍,将这些行为暂停后,ASG的表现会如何
当停掉Launch
时,ASG不会再创建新实例。
例如此时将Desired capacity
设置为2(当前只有一个实例):
ASG中实例的数量依然不会增加:
当前ASG实例有两台,当停掉Terminate
后,再将desired capacity
设置为1。ASG并不会采取Scale in
操作
停掉HealthCheck
后,ASG会阻止收到EC2或ELB的健康检查。
例如下面有两台实例在健康运行:
将一台EC2的服务停掉:
此时Target group
已经检测到服务挂了,将实例状态变为unhealthy
:
但ASG的健康状态还是Health:
停掉ReplaceUnhealth
后,ASG能够接收到EC2或ELB的健康检查通知,但不会主动停掉unhealth的实例。
例如下面有两台实例在健康运行:
将其中一台的服务搞挂:
此时ELB的target group
检测出来服务unhealthy,然后将消息通知到ASG:
但ASG不会处理任何Unhealth
的实例。
将ReplaceUnhealth
这个给去掉后,ASG会马上将unhealth
的实例的给下掉,新创建一台健康的机器挂上去
如果停掉这个活动,ASG不会收到CloudWatch Alarm
的通知。
例如使用target tracking policy
配置了CPU大于60%时扩展机器,则这个策略不会生效。
停掉ReplaceUnhealth
后,ASG不会将新创建的机器加到LoadBalancer里。
将需要实例的数量由2设置为3:
ASG创建完成机器后,在ASG里可以看到三个Healthy的实例:
但在target group
里,新建的机器并没有被加上去:
当把这个规则停掉,新创建出来的那台机器会自动挂到target group
里吗?答案是不会。
需要手动在target group
里面加上去: