伸缩组关联负载均衡SLB实例后,在伸缩组中的ECS实例都会自动加入到SLB实例的后端服务器组,处理来自SLB实例分发的客户端请求。本文建议您使用生命周期挂钩,在伸缩活动时,正在加入或移出伸缩组的ECS实例将被挂钩挂起并置于等待状态,为您保留指定时长的操作时间,确保服务可用。

前提条件

伸缩组已关联SLB实例。具体内容,请参见在弹性伸缩中使用负载均衡服务

场景一:弹性扩张

在弹性扩张时,如果您未创建生命周期挂钩,扩容出的ECS实例会直接加入伸缩组,包括加入SLB实例的后端服务器组,并且开始对外提供服务。然而,在ECS实例中,为客户端提供服务的应用需要一定的启动时间,如果应用在接收客户端请求时尚未启动,则无法对外提供服务。

建议您为伸缩组创建生命周期挂钩。在ECS实例加入SLB实例的后端服务器组前,生命周期挂钩将扩容的ECS实例挂起。等ECS实例中的应用启动完成,挂钩的超时时间结束后,ECS实例加入到SLB实例的后端服务器组,并对外提供服务。具体步骤,请参见创建生命周期挂钩。请注意以下配置:

  • 适用的伸缩活动类型选择为弹性扩张活动
  • 超时时间建议配置为ECS实例中应用能正常启动的时间。
    说明 如果您想提前结束超时时间,您可以调用API CompleteLifecycleAction。具体内容,请参见CompleteLifecycleAction
  • 执行策略选择为继续

生命周期挂钩创建完成后,扩容的ECS实例会先进入加入挂起中状态并等待超时时间结束。在挂起期间,ECS实例提供服务的应用完成启动。挂起状态结束后,ECS实例会加入伸缩组,包括加入SLB实例的后端服务器。等ECS实例的状态为服务中后,ECS实例对外提供服务。

场景二:弹性收缩

在弹性收缩时,如果您未创建生命周期挂钩,缩容的ECS实例会直接移出伸缩组,包括移出SLB实例的后端服务器组,对外停止提供服务。然而,在缩容的ECS实例中,可能存在未处理完成的客户端请求,会导致客户端访问异常。

建议您为已有的伸缩组创建生命周期挂钩。在移出SLB实例的后端服务器组前,生命周期挂钩将缩容的ECS实例挂起。等ECS实例处理完毕已接收的请求,挂钩的超时时间结束后,再将ECS实例移出SLB实例的后端服务器组。具体步骤,请参见创建生命周期挂钩。请注意以下配置:

  • 适用的伸缩活动类型选择为弹性收缩活动
  • 超时时间建议配置为所有请求的最长处理时间。
    说明 如果您想提前结束超时时间,您可以调用API CompleteLifecycleAction。具体内容,请参见CompleteLifecycleAction

创建完成后,扩容的ECS实例会先进入移出挂起中状态并等待超时时间结束。在挂起期间,ECS实例处理完成已接收的请求,且不再接收请求。挂起状态结束后,ECS实例会移出伸缩组,包括移出SLB实例的后端服务器。