伸缩组概述

伸缩组是弹性伸缩的核心组件,用于管理一组拥有相同应用场景和实例类型的服务实例。通过伸缩组,您可以快速地横向扩展集群中的实例。此外,伸缩组还可以根据您的业务需求动态调整实例的数量,帮助您有效降低成本。

为什么使用伸缩组

  • 快速横向扩展(高可用)

    您可以通过使用伸缩组快速横向扩展您的服务集群,通过增加服务的数量提升您的集群承载能力。

  • 控制成本

    服务集群横向扩展意味着需要维持更多的计算资源,从而使成本增加,但是您的业务不是在任何时间都处于满负载状态,您可以根据实际的需求,利用云计算的弹性能力,在计算资源需求下降时减少资源的投入,从而控制成本。

支持的伸缩方案

方案一:保持固定数量且可用的实例

  • 适用场景:在不伸缩时,维持集群的高可用。

  • 实现方式:为伸缩组开启实例健康检查期望实例数

    在开启伸缩组实例健康检查后,伸缩组会自动移除伸缩组中不健康的实例。如果目前实例数小于期望实例数,会自动触发扩容,保证伸缩组中始终有固定数量且可用的实例。

  • 举例说明

    例如您期望集群可用业务服务数量为10,您可以为伸缩组设置期望实例数为10,伸缩组会自动触发伸缩活动来维持可用服务数量为10。

方案二:定时自动伸缩

  • 适用场景:业务规律波动,即业务集群资源占用随时间规律波动。

  • 实现方式:通过为伸缩组设置定时任务实现定时扩缩容。

    在业务集群资源占用升高的时间点,通过定时任务触发扩张。相反的,在资源占用降低的时间点,通过定时任务触发收缩。完整步骤,请参见定时自动扩缩容ECS实例

  • 举例说明

    例如您的业务集群在每天傍晚7点时访问量增加,在凌晨1点时降低,为了应对业务访问需求的变化,您可以设置以下两个定时任务。

    • 应对访问量增加:设置傍晚7点的定时扩展任务,在每天傍晚7点,通过增加服务副本数提升集群的承载能力。

    • 应对访问量减少:设置凌晨1点的定时收缩任务,在每天凌晨1点,通过减少服务副本数从而提高资源利用率,减少不必要的成本支出。

方案三:通过资源占用阈值伸缩(CPU占用率、内存占用率等)

  • 适用场景:突发业务波动场景。资源占用达到某个阈值时触发伸缩。

  • 实现方式

    集群资源占用率达到阈值时触发扩缩容(报警任务)

    您可以为伸缩组设置报警任务,在资源占用达到阈值后触发报警,然后进行扩缩容活动。

    报警后直接增加、减少实例

    您可以为伸缩组设置报警任务,同时指定对应报警所执行的简单规则,来实现触发报警后进行扩缩容。

    效果说明

    如果配置触发简单规则,可以直接设置增加、减少N台实例或直接修改伸缩组内的实例数为N台。

    • 在集群平均CPU占用率大于80%时,增加N台实例。

    • 在集群平均CPU占用率小于70%时,减少N台实例。

    完整步骤,请参见根据业务负载自动扩缩容ECS实例

    报警后按照资源占用阶梯分级增加、减少实例

    您可以为伸缩组创建步进规则,并设置触发该规则的报警任务,来实现触发报警后按照配置好的资源占用按照梯度进行扩缩容。

    重要

    ECI类型的伸缩组不支持配置步进规则

    效果说明

    在触发报警任务后,按照集群平均CPU占用率的阶梯分级扩缩容。

    • 当集群平均CPU占用率大于60%小于70%时减少1台实例。

    • 当集群平均CPU占用率大于30%小于60%时减少3台实例。

    • 当集群平均CPU占用率小于30%时减少5台实例。

    期望集群资源占用率维持在目标值(目标追踪规则)

    您可以为伸缩组设置目标追踪规则,实现将伸缩组的资源占用维持在目标值附近。

    举例说明

    为ECS伸缩组创建一个目标追踪规则,设置平均CPU占用率的目标值为80%,伸缩组会自动通过添加或删除实例来将伸缩组平均CPU占用率维持在80%附近。

  • 两种实现方式的区别

    • 报警任务方案更加灵活和自定义。可以控制在触发报警后增加/减少多少台实例,也可以根据资源占用的阶梯变化灵活设置扩缩容的数量。

    • 目标追踪规则配置更加简单,只需关注需要将资源占用率维持在哪个数值。

方案四:自定义伸缩(手动伸缩)

如果前几种方案都不满足您的需求,您可以通过该方案实现自定义的伸缩方案。

伸缩组支持通过手动执行伸缩规则、手动修改实例数的方式触发扩缩容活动。完整操作,请参见手动一键扩缩容ECS实例

说明

手动伸缩的方式支持API调用,您可以结合实际业务,通过编写程序调用API自定义伸缩方案。

方案五:预测性伸缩

除了前几种方案以外,伸缩组还提供预测未来资源需求自动伸缩的功能。

该方案通过配置预测规则的方式实现,您可以先使用只预测不伸缩的方式判断预测的准确性和适用性,如果预测结果满足您的需求,您可以为该预测规则开启预测并伸缩,开启此选项后,预测规则会根据预测产生的定时计划自动创建预测任务,完成自动扩缩容。具体操作,请参见查看预测规则效果

注意事项

在使用伸缩组之前,请先确保您实例内部署的业务支持横向扩展。

弹性伸缩是以横向扩展的方式扩展实例,因此,您需要考虑在您的实例横向扩展时是否会对您的集群业务造成影响。

  • 数据一致性问题

    如果您的数据库都在实例中部署,横向扩展时可能会遇到数据不一致的问题。为了解决这一问题,建议调整架构设计,例如将数据库独立部署,让所有实例共享同一个数据库,从而实现服务的无状态化。

  • 数据安全

    考虑到伸缩组中的实例会自动创建和释放,如果在这些实例中存储了数据,请确保实施适当的数据备份措施以保障数据安全。

如何使用伸缩组

开始使用

进阶需求

业务部署:新扩容出的实例自动部署业务服务的软件包

  • 通过使用带有软件包的镜像实现自动部署

    • ECS伸缩组。

      构建一个包含您业务服务软件包的自定义镜像,同时将实例配置来源中的镜像修改为该镜像。

    • ECI伸缩组。

      为您的业务服务构建Docker镜像,同时将实例配置来源中的镜像修改为该镜像。

  • 在实例启动时自动执行部署脚本

    • 实例自定义数据方案

      在使用ECS伸缩组时,您可以为实例设置自定义数据,在自定义数据中,执行部署服务软件包的脚本。具体方案介绍,请参见使用实例自定义数据自动配置ECS实例

    • 生命周期挂钩方案

      在使用ECS伸缩组时,您可以为伸缩组设置生命周期挂钩,在触发扩容后,实例加入伸缩组之前,先在实例中执行部署服务软件包的脚本。具体方案介绍,请参见在ECS实例中自动执行脚本

滚动升级:通过滚动升级的方式更新实例镜像或执行脚本

您可以通过滚动升级的方式更新伸缩组中实例的镜像,也可以批量在伸缩组实例中执行脚本,具体操作,请参见滚动升级

关联云数据库:新扩容出的实例可以访问数据库

您可以为伸缩组设置同一安全组,或者设置自动将新扩容实例加入云数据IP白名单,以实现新实例可以正常访问到数据库。

相关文档

关联负载均衡器:为伸缩组中的服务实例集群设置统一访问入口

如果您的伸缩组中的实例集群使用负载均衡器作为访问入口,您可以为伸缩组关联该负载均衡实例,在关联负载均衡器之后,新创建的实例会自动加入到负载均衡器的后端服务器组。

相关文档

在扩缩容时执行自定义操作(挂载NAS、绑定EIP等)

您可以通过生命周期挂钩,实现在实例加入伸缩组或移出伸缩组之前,完成自定义的操作,如挂载NAS,绑定EIP、执行自定义脚本等。

相关文档

设计缩容策略

在您的业务负载对资源需求降低时,伸缩组会根据您的策略触发缩容活动,自动减少伸缩组中的资源数量,从而避免资源浪费。在缩容时,您可能会遇到如何控制缩容频率、如何优雅缩容、如何自主选择被缩容的实例等问题,您可以参考以下文档。

相关文档

进一步优化资源成本

在使用伸缩组后,您可以通过引入抢占式实例和使用成本优化策略进一步降低成本。

相关文档

容灾&扩容成功率

在使用伸缩组时,您可能会遇到因可用区实例库存不足导致的扩容失败,您可以通过多可用区和多实例规格配置减少库存不足的造成的扩容失败。同时,您也可以通过均衡分布策略实现多可用区容灾。

相关文档

弹性伸缩Kubernetes节点

使用Kubernetes实现节点的弹性伸缩。

相关文档