ECS实例从创建到释放的过程可能处于不同的状态,这些状态组成了ECS实例的生命周期。生命周期挂钩功能可提供控制伸缩组内ECS实例创建和移出的能力,以便您灵活地管理ECS实例的生命周期。本文介绍伸缩组内ECS实例的生命周期管理方式、健康检查以及可能的生命周期状态。

伸缩组内ECS实例的生命周期管理方式

根据ECS实例加入伸缩组的方式,ECS实例可以分为自动创建的ECS实例和手动创建的ECS实例,对应的生命周期管理方式如下表所示。

ECS实例类型 添加方式 生命周期管理方式
自动创建的ECS实例 根据伸缩组的实例配置信息来源自动创建的ECS实例。 弹性伸缩管理ECS实例的全生命周期,弹性扩张时负责创建ECS实例,弹性收缩时负责停止和释放ECS实例。
手动创建的ECS实例 由您手动创建ECS实例,然后再手动将创建好的ECS实例添加至伸缩组。 由是否将ECS实例的生命周期托管给伸缩组决定:
  • 已托管给伸缩组:弹性收缩时负责停止和释放ECS实例。
  • 未托管给伸缩组:弹性收缩时负责将ECS实例移出伸缩组,但不会释放ECS实例。
说明 支持将包年包月实例添加至伸缩组,但不支持托管包年包月实例。

伸缩组内ECS实例的健康检查

弹性伸缩管理ECS实例的生命周期时,会定期检查ECS实例的运行状态,如果发现一台ECS实例未处于运行中状态,则判定该ECS实例不健康,伸缩组会及时将不健康的ECS实例移出或者释放。

说明 ECS实例的运行状态是ECS实例从创建开始到释放结束的可能状态,并非ECS实例在伸缩组内的服务状态。

您可以在创建伸缩组时开启或关闭健康检查,也可以为已创建的伸缩组开启或关闭健康检查,具体操作,请参见创建伸缩组修改伸缩组

开启健康检查后,弹性伸缩管理伸缩组内ECS实例的生命周期时,会检查ECS实例是否健康,并及时移出甚至释放不健康的ECS实例,具体说明如下所示:
  • 如果ECS实例由弹性伸缩自动创建,或者由您手动添加至伸缩组但生命周期已托管给伸缩组,弹性伸缩会移出并释放ECS实例。
  • 如果ECS实例由您手动添加至伸缩组且生命周期未托管给伸缩组,弹性伸缩会从伸缩组移出ECS实例,但不会释放该ECS实例。
  • 移出不健康的ECS实例时不受最小实例数的限制,可能导致伸缩组内实例数低于最小实例数。此时弹性伸缩会自动创建对应数量的ECS实例,使得伸缩组内实例数等于最小实例数。
    警告 请确保账号可用额度充足。如果账号欠费,所有后付费的ECS实例(包括按量付费实例和抢占式实例)都会停机,甚至被释放。欠费后伸缩组内ECS实例状态变化,请参见欠费说明

伸缩组内ECS实例的生命周期状态

根据伸缩组是否添加生命周期挂钩,伸缩组内ECS实例的生命周期状态有所差异,具体说明如下所示。

说明 ECS实例本身的生命周期是ECS实例从创建开始到释放结束的过程,与伸缩组内ECS实例的生命周期不同,更多信息,请参见实例生命周期
  • 伸缩组未添加生命周期挂钩时,伸缩组内ECS实例可能的生命周期状态关系如下图所示:未添加lifecyclehook
  • 伸缩组中添加生命周期挂钩时,伸缩组内ECS实例可能的生命周期状态如下图所示:添加生命周期
从加入伸缩组到移出伸缩组,伸缩组内ECS实例可能的服务状态具体说明如下表所示。
服务状态 状态说明 相关操作
加入中(Pending) ECS实例正在加入伸缩组,包括加入负载均衡实例的后端服务器、RDS实例的访问白名单等过程。

以下状态的ECS实例可加入伸缩组:

  • 手动添加ECS实例时,处于运行中(Running)状态的ECS实例可加入伸缩组。
  • 伸缩组扩容时,处于运行中(Running)状态的ECS实例可加入伸缩组。
  • 重新将ECS实例投入使用时,处于备用中(Standby)状态的ECS实例可加入伸缩组。
加入挂起中(Pending:Wait) 如果伸缩组内创建了适用于弹性扩张活动的生命周期挂钩,ECS实例在加入伸缩组时被挂起并等待挂钩超时结束。

您可以在挂起期间对ECS实例进行预装软件或其他自定义操作,例如,绑定辅助弹性网卡、添加Redis实例白名单等。

说明 伸缩组中添加生命周期挂钩功能时,伸缩组内的ECS实例才会出现该服务状态。
服务中(In Service) ECS实例已成功加入伸缩组并正常提供服务。

如果出现以下任一种情况,ECS实例将不再保持服务中(In Service) 状态:

  • 伸缩组缩容时,伸缩组可以选择终止ECS实例,且ECS实例进入停用中(Stopped)状态。
  • 伸缩组内ECS实例不健康时,伸缩组会及时移出甚至释放不健康的ECS实例,且ECS实例进入停用中(Stopped)状态。
  • 终止、排查或更改ECS实例时,ECS实例进入备用中(Standby)状态。
  • 从伸缩组中移出ECS实例时,ECS实例进入移出中(Removing)状态。
服务中(In Service) 状态的ECS实例可转为如下状态的ECS实例。
备用中(Standby) ECS实例不提供服务,负载均衡权重被置为零,负载均衡实例停止向ECS实例转发流量,且弹性伸缩不管理ECS实例的生命周期,而是由您手动进行管理。

在备用状态下,您可以进行排查ECS实例异常、更新ECS实例镜像等操作,然后重新将ECS实例投入使用中,可再次加入伸缩组。

说明 备用中的ECS实例在重新投入使用前,不再属于您应用程序的有效部分。
保护中(Protected)
  • 如果不想移出伸缩组,您可以将ECS实例转为保护中,ECS实例正常提供服务,但弹性伸缩不管理ECS实例的生命周期,而是由您手动管理。
  • 如果不想手动管理ECS实例的生命周期,您也可以将处于保护中(Protected)状态的ECS实例移出保护状态,继续由弹性伸缩管理其生命周期。
移出中(Removing) ECS实例正在移出伸缩组,包括移出负载均衡实例的后端服务器、RDS实例的访问白名单等过程。

移出后的ECS实例独立于伸缩组内的ECS实例,您也可以将ECS实例加入到其他伸缩组中。

移出挂起中(Removing:Wait) 如果伸缩组内创建了适用于弹性收缩活动的生命周期挂钩,ECS实例在移出伸缩组时被挂起并等待挂钩超时时间结束。

您可以在挂起期间对ECS实例进行卸载软件或其他自定义操作,例如,拷贝日志、清理数据等。

说明 伸缩组中添加生命周期挂钩功能时,伸缩组内的ECS实例才会出现该服务状态。
停用中(Stopped) 完成生命周期的管理后,ECS实例已进入停用状态,不提供服务。ECS实例处于停用状态时,vCPU、内存和固定公网IP会被回收,因此vCPU、内存和固定公网带宽不再收费,但是云盘、弹性公网IP等资源仍然保留并收费。发生弹性扩张活动时,会优先启用伸缩组中处于停用状态的ECS实例。
说明 如果您需要将ECS实例转为停用状态,请确保在创建伸缩组时将实例回收模式设置为停机回收模式。
实例转为停用状态