如果您的业务有明显的高低峰期规律,且因为计算资源(CPU、内存)不足而出现性能瓶颈,例如在线教育、同城物流、电商搜索、直播等业务,可通过阿里云Elasticsearch的弹性扩缩功能,在业务高峰期增加计算资源,低峰期减少计算资源,使集群资源得到充分利用,并为您节省更多的额外支出。本文为您介绍如何使用弹性扩缩功能。

前提条件

创建阿里云Elasticsearch实例,并购买弹性节点,具体操作步骤请参见创建阿里云Elasticsearch实例购买弹性节点
注意
  • 弹性节点目前仅支持单可用区实例。
  • 如果在创建实例时没有购买弹性节点,实例创建后将不支持使用弹性扩缩功能。
  • 在创建实例时,无论付费模式包年包月还是按量付费,弹性节点统一采用按量付费的模式计费。
  • 弹性节点架构依赖专有主节点,购买弹性节点时,会默认购买最低规格的专有主节点。
  • 在创建实例时,不支持仅购买弹性节点,而不购买数据节点。
购买弹性节点后,您可以参见登录Kibana控制台,执行GET _cat/nodeattrs命令,查看弹性节点是否具备elastic_type:data标签。查看弹性节点属性

应用场景

有明显高低峰期规律的业务,且因为计算资源(CPU、内存)不足而出现性能瓶颈的场景。这类业务高峰期的流量是低峰期的数倍,时间较短且规律性强,使用弹性扩缩功能对于成本的节省会更加明显。

以某教育行业客户为例,业务的高峰期只有白天14:00~21:00这7个小时,查询QPS(Query Per Second)大约在3千左右;而剩余低峰期的17个小时仅有最多400的QPS,即低峰期实际需要的资源仅仅是高峰期的1/7。当您在阿里云Elasticsearch中配置了定时弹性扩缩后,可以大大降低业务低峰期的计算资源成本,使总体的集群使用成本降低一半以上。不仅可以使集群资源得到充分利用,还可以为您节省更多的额外支出。

步骤一:规划弹性扩缩方案

  1. 确认业务的资源瓶颈。
    建议提前在非生产集群进行一次业务压测。如果发现业务的写入或查询吞吐基本随着计算资源(CPU、内存)的增加而增加,说明业务是计算资源瓶颈,适合使用弹性扩缩解决方案。
  2. 确认高低峰期业务吞吐指标需求。
    以数据库加速场景为例,保持CPU水位在40%~50%的前提下,高峰期时间段为18:00~22:00,单机需要承担1万QPS;低峰期时间段为22:00~次日18:00,单机需要承担1千QPS;那么就可以预估高峰期的节点数是低峰期的10倍。
  3. 确认弹性索引数据量,判断是否需要扩缩副本。
    对于搜索或数据库加速场景,单机数据量通常不大(几十GB左右),一般可通过横向扩副本来提升查询QPS。例如一个20GB、1 shard、1副本的索引,位于2台弹性节点上,能够承担2千的QPS;那么当业务需要增长到10千QPS时,可以将业务横向扩展到10台弹性节点上,同时将副本数设置为9,保证每台机器都有一份独立的副本数据,实现倍数级提升查询QPS的效果。

    而对于日志等大数据量写入场景,单机数据量一般在200GB以上,这类业务一般不需要通过扩副本的方式来提升写入吞吐,只需横向对计算资源进行扩容即可。

  4. 确认弹性时间,在高峰期来临前完成扩容,以保证业务高峰期的稳定性。
    进行弹性扩容和缩容时,会触发集群重启,重启时长与集群负载及数据量有关。您需要合理评估弹性时间,在业务高峰期来临前完成弹性扩容,建议在1个小时以上。

步骤二:配置弹性索引

由于弹性索引会涉及到高低峰期扩缩副本的操作,因此建议将高低峰期资源占用变化较明显的业务索引独立分配到弹性节点,其他非弹性索引分配到普通的数据节点。以实现轻量化的资源隔离,最大程度保证业务整体的稳定性。参见登录Kibana控制台,执行以下命令,配置弹性索引:

  1. 配置弹性索引,将有弹性需求的索引迁移到弹性节点。
    PUT elastic_index/_settings
    {
       "index.routing.allocation.require.elastic_type": "data"
    }
  2. 配置非弹性索引,确保其分配在普通数据节点上,从节点维度进行业务索引隔离。
    PUT normal_index/_settings
    {
       "index.routing.allocation.exclude.elastic_type": "data"
    }

步骤三:配置弹性任务

通过配置弹性扩缩任务,您可以在业务高低峰来临前,合理调配资源,提升业务稳定性及可用性。

  1. 登录阿里云Elasticsearch控制台
  2. 在顶部菜单栏处,选择地域。
  3. 在左侧导航栏,单击Elasticsearch实例,再在实例列表中单击目标实例ID。
  4. 基本信息页面,单击节点可视化右侧的弹性扩缩
  5. 配置弹性扩缩容规则页面,开启并配置集群扩容和缩容规则。
    配置弹性扩缩规则
    参数 说明
    触发条件 仅支持定时触发
    触发周期 指定定时触发的周期及具体时间。当到达具体时间后,系统会立即为弹性节点进行扩容或缩容。
    扩容配置 当业务高峰来临前,将当前的弹性节点数量增加到您设置的目标高峰期弹性数据节点数
    缩容配置 当业务低峰来临前,将当前的弹性节点数量减少到您设置的目标低峰期弹性数据节点数
    指定索引和副本数 勾选后,需要分别指定目标副本数和弹性索引。即扩容或缩容后,系统会修改指定索引的副本数。如果您选择了普通的数据节点索引,系统也会修改其副本数。
    注意 如果在弹性任务配置的时间点开始时,实例处于生效中状态,为保证实例稳定性,系统将不会执行弹性任务。因此当您手动在控制台执行了实例变更操作,请确认是否需要同时调整弹性任务的触发时间点,避免二者产生冲突。
  6. 配置集群扩容和缩容报警通知。
    配置报警通知

    导致弹性扩缩容任务失败的原因包括:ECS库存不足、副本数不合预期、磁盘打满等。一般建议您配置报警通知,当任务失败时,方便及时通知到您。

    报警通知默认为关闭状态。选择开启后,可以指定联系人及报警接收方式。如果是手机方式,配置完成后,阿里云Elasticsearch将为您推送一条激活短信,您需要单击链接激活后,才可接收到报警通知。
    注意
    • 当报警通知在关闭状态下时,您也可以定义报警规则。进入高级监控报警系统,分别配置弹性扩容或缩容规则,支持的指标分别为elasticsearch.autoscaling.expand.statuselasticsearch.autoscaling.shrink.status,详情请参见快速开始
    • 开启报警通知后,系统会自动为对应实例开通高级监控报警,并使用默认的报警规则。进入高级监控报警系统,单击名称为AutoScalingElasticsearch的报警组,查看弹性扩容或缩容自动生成的规则名,即${实例ID}-${可用区ID}-expand${实例ID}--${可用区ID}-shrink,详情请参见查看报警规则
    • 高峰期扩容或缩容失败,您将会收到类似如下通知:
      • 高峰期扩容失败:${实例ID}-expand触发告警,当前1分钟的值1.00>0.00
      • 低峰期缩容失败:${实例ID}-shrink触发告警,当前1分钟的值1.00>0.00
  7. 勾选服务关联角色授权说明,单击确定
    确定后,即可完成弹性任务的配置。当定时时间触发后,集群会自动进行扩容或缩容操作。

步骤四:查看弹性任务变更记录

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击操作记录,查看弹性任务的变更操作记录。