弹性扩缩集群资源
如果您的业务有明显的高低峰期规律,且会因为计算资源(CPU、内存)不足而出现性能瓶颈,例如在线教育、同城物流、电商搜索、直播等业务,可通过阿里云Elasticsearch的弹性扩缩功能,在业务高峰和低峰期,分别增加和减少计算资源,充分使用集群资源,节省额外支出。本文介绍如何使用弹性扩缩功能。
应用场景
弹性扩缩功能适用于具有明显高低峰期规律,且会因为计算资源(CPU、内存)不足而出现性能瓶颈的业务场景。这类业务高峰期的流量是低峰期的数倍,时间较短且规律性强,使用弹性扩缩功能对于成本的节省会更加明显。
以某教育行业客户为例,业务的高峰期只有白天14:00~21:00这7个小时,查询QPS(Query Per Second)大约在3千左右;而剩余低峰期的17个小时仅有最多400的QPS,即低峰期实际需要的资源仅仅是高峰期的1/7。当您在阿里云Elasticsearch中配置了定时弹性扩缩后,可以大大降低业务低峰期的计算资源成本,使总体的集群使用成本降低一半以上。不仅可以使集群资源得到充分利用,还可以为您节省更多的额外支出。
使用限制
弹性节点仅支持单可用区实例。
弹性节点不支持8.5版本、7.16版本和部分地域的7.10版本,实际以控制台为准。
操作流程
步骤一:规划弹性扩缩方案
弹性扩缩操作会触发集群重启,集群变更后重启实际时长与集群规模、数据量及负载情况等有关系,建议在业务高峰来临前完成扩缩。
如果集群索引存在副本分片且集群负载处于正常水平(CPU使用率在60%左右,堆内存使用率在50%左右,load_1m低于CPU核数),一般情况下,在集群重启过程中可持续对外提供服务。
如果集群负载过高且索引没有副本,同时在弹性扩缩过程中存在大量的写入或查询等情况,可能在弹性扩缩过程中业务会出现偶发的访问超时现象。建议在弹性扩缩操作前,在客户端访问机制中配置重试机制,以减小对业务的影响。
确认业务的资源瓶颈。
建议提前在非生产集群进行一次业务压测。如果发现业务的写入或查询吞吐基本随着计算资源(CPU、内存)的增加而增加,说明业务是计算资源瓶颈,适合使用弹性扩缩解决方案。
确认高低峰期业务吞吐指标需求。
以数据库加速场景为例,保持CPU水位在40%~50%的前提下,高峰期时间段为18:00~22:00,单机需要承担1万QPS;低峰期时间段为22:00~次日18:00,单机需要承担1千QPS;那么就可以预估高峰期的节点数是低峰期的10倍。
确认弹性索引数据量,判断是否需要扩缩副本。
对于搜索或数据库加速场景,单机数据量通常不大(几十GB左右),一般可通过横向扩副本来提升查询QPS。例如一个20 GB、1 shard、1副本的索引,位于2台弹性节点上,能够承担2千的QPS;那么当业务需要增长到10千QPS时,可以将业务横向扩展到10台弹性节点上,同时将副本数设置为9,保证每台机器都有一份独立的副本数据,实现倍数级提升查询QPS的效果。
而对于日志等大数据量写入场景,单机数据量一般在200GB以上,这类业务一般不需要通过扩副本的方式来提升写入吞吐,只需横向对计算资源进行扩容即可。
确认弹性时间,在高峰期来临前完成扩容,以保证业务高峰期的稳定性。
进行弹性扩容和缩容时,会触发集群重启,重启时长与集群负载及数据量有关。您需要合理评估弹性时间,在业务高峰期来临前完成弹性扩容,建议在1个小时以上。
步骤二:开启弹性节点
参见创建阿里云Elasticsearch实例,在创建阿里云Elasticsearch实例时,开启弹性节点。
创建实例时,如果未开启弹性节点,实例创建后,可通过升配集群开启。
在创建实例时,无论付费模式为包年包月还是按量付费,弹性节点统一采用按量付费的模式计费,计费的详细信息请参见Elasticsearch计费项。
弹性节点架构依赖专有主节点,购买弹性节点时,会默认购买最低规格的专有主节点。
创建实例时,不支持仅购买弹性节点,而不购买数据节点。
开启弹性节点后,您可以登录对应实例的Kibana控制台(登录Kibana控制台),执行GET _cat/nodeattrs
命令,查看弹性节点是否具备elastic_type:data
标签。
步骤三:配置弹性索引
由于弹性索引会涉及到高低峰期扩缩副本的操作,因此建议将高低峰期资源占用变化较明显的业务索引独立分配到弹性节点,其他非弹性索引分配到普通的数据节点。以实现轻量化的资源隔离,最大程度保证业务整体的稳定性。登录Kibana控制台,执行以下命令,配置弹性索引:
- 登录目标阿里云Elasticsearch实例的Kibana控制台,根据页面提示进入Kibana主页。登录Kibana控制台的具体操作,请参见登录Kibana控制台。说明 本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。
- 在左侧导航栏,单击Dev Tools。
执行以下命令,配置弹性索引,将有弹性需求的索引迁移到弹性节点。
PUT elastic_index/_settings { "index.routing.allocation.require.elastic_type": "data" }
执行以下命令,配置非弹性索引,确保其分配在普通数据节点上,从节点维度进行业务索引隔离。
PUT normal_index/_settings { "index.routing.allocation.exclude.elastic_type": "data" }
步骤四:配置弹性任务
通过配置弹性扩缩任务,您可以在业务高低峰来临前,合理调配资源,提升业务稳定性及可用性。
- 登录阿里云Elasticsearch控制台。
- 在左侧导航栏,单击Elasticsearch实例。
- 进入目标实例。
- 在顶部菜单栏处,选择资源组和地域。
- 在Elasticsearch实例中单击目标实例ID。
在基本信息页面,单击节点可视化右侧的弹性扩缩。
说明如果您购买的实例未开通弹性扩缩容功能,则基本信息页面不会存在弹性扩缩,您可以通过集群升配功能开启,具体操作请参见升配集群。
在配置弹性扩缩容规则页面,开启并配置集群扩容和缩容规则。
参数
说明
触发条件
仅支持定时触发。
触发周期
指定定时触发的周期及具体时间。当到达具体时间后,系统会立即为弹性节点进行扩容或缩容。
扩容配置
当业务高峰来临前,将当前的弹性节点数量增加到您设置的目标高峰期弹性数据节点数。
缩容配置
当业务低峰来临前,将当前的弹性节点数量减少到您设置的目标低峰期弹性数据节点数。
指定索引和副本数
勾选后,需要分别指定目标副本数和弹性索引。即扩容或缩容后,系统会修改指定索引的副本数。如果您选择了普通的数据节点索引,系统也会修改其副本数。
重要如果在弹性任务配置的时间点开始时,实例处于生效中状态,为保证实例稳定性,系统将不会执行弹性任务。因此当您手动在控制台执行了实例变更操作,请确认是否需要同时调整弹性任务的触发时间点,避免二者产生冲突。
配置集群扩容和缩容报警通知。
导致弹性扩缩容任务失败的原因包括:ECS库存不足、副本数不合预期、磁盘打满等。一般建议您配置报警通知,当任务失败时,方便及时通知到您。
报警通知默认为关闭状态。选择开启后,可以指定联系人及报警接收方式。如果是手机方式,配置完成后,阿里云Elasticsearch将为您推送一条激活短信,您需要单击链接激活后,才可接收到报警通知。
说明当报警通知在关闭状态下时,您也可以定义报警规则。进入高级监控报警系统,分别配置弹性扩容或缩容规则,支持的指标分别为elasticsearch.autoscaling.expand.status和elasticsearch.autoscaling.shrink.status,详情请参见快速入门。
开启报警通知后,系统会自动为对应实例开通高级监控报警,并使用默认的报警规则。进入高级监控报警系统,单击名称为AutoScalingElasticsearch的报警组,查看弹性扩容或缩容自动生成的规则名,即${实例ID}-${可用区ID}-expand、${实例ID}--${可用区ID}-shrink,详情请参见查看报警规则。
高峰期扩容或缩容失败,您将会收到类似如下通知:
高峰期扩容失败:${实例ID}-expand触发告警,当前1分钟的值1.00>0.00
低峰期缩容失败:${实例ID}-shrink触发告警,当前1分钟的值1.00>0.00
勾选服务关联角色授权说明,单击确定。
确定后,即可完成弹性任务的配置。当定时时间触发后,集群会自动进行扩容或缩容操作。
重要角色名称AliyunServiceRoleForElasticsearchOps属于Elasticsearch服务关联角色,使用过程中请勿删除此角色,否则使用会受到影响。
步骤五:查看弹性任务变更记录
- 登录阿里云Elasticsearch控制台。
在左侧导航栏,单击操作记录,查看弹性任务的变更操作记录。