变更Elasticsearch集群节点规格
当Elasticsearch集群的数据面业务变化,需要动态调整集群的节点规格和节点存储类型时,可以参考本文进行变更操作。
变更规格类型 |
适用场景 |
变更流程 |
---|---|---|
变更节点规格 |
一般将小规格升级为大规格,常用于如下场景:
也支持将大规格降低为小规格,但此变更会降低集群的处理性能,进而影响业务能力,请谨慎使用。 |
变更过程采用的是one-by-one的方式,会确保始终有足够节点维持服务可用性,不会中断业务。 |
变更节点存储类型(更改磁盘类型) |
当集群因磁盘类型选择不当导致IO瓶颈,造成查询和写入性能受限时,可通过变更节点存储类型来提升性能。 |
变更过程采用的是one-by-one的方式,不会中断业务。 |
前提条件
- 确认集群处于“可用”状态,且无正在进行的任务。
- 确认CSS服务有足够的配额支持变更规格,在形态变更页面可以查看当前可用资源。
图1 查看可用资源
- 在变更节点存储类型前,建议备份所有关键数据,以免造成数据丢失。
计费影响
如果是按需计费的集群,在变更确认页面可以查看变更后的价格。变更完成后,集群将按照更新后的价格计费,计费规则请参见云搜服务价格计算器。
如果是包周期的集群,在升配时,变更确认页面会触发新的订单,可以查看价格信息;在降配时,变更确认页面会触发退款信息,可以查看价格信息。
约束限制
- 使用本地盘的节点不支持变更节点规格和节点存储类型。
- 不支持同时变更节点规格和节点存储类型。
- 仅数据节点和冷数据节点支持变更节点存储类型。
- 变更节点存储类型的过程涉及数据迁移,单个节点的数据迁移的超时阈值为48小时,超时将导致变更失败。当集群数据量大时,建议手动调整数据迁移速率,避免在业务高峰期操作。
- 无Master节点的集群:当数据节点数和冷数据节点数之和大于或等于3时(即“ 数据节点数 + 冷数据节点数 ≥ 3”)才支持变更节点存储类型。
- 有Master节点的集群:当数据节点数大于或等于2时(即“ 数据节点数 ≥ 2”)才支持变更节点存储类型。
- 变更节点存储类型时,会有一个节点无法提供服务,为保证业务连续性,请确认数据节点数和冷数据节点数之和大于索引副本数的最大值加1,即“数据节点数 + 冷数据节点数 > 索引副本数的最大值+1”。如果是单AZ或双AZ集群,还要确认每个AZ中同类型节点数大于或等于2。
- 变更节点规格会直接下线节点,为保证业务连续性请确保所有索引都有副本。
- 请确认下线一个节点之后的磁盘使用率小于80%。
变更影响
在变更集群规格前,您需要了解以下关键影响和操作建议,以便合理规划变更,最小化业务影响。
- 性能影响(仅变更节点存储类型受影响)
变更节点存储类型不会中断业务,但是该过程的数据迁移会消耗IO性能,且变更过程中单节点下线可能影响集群性能。
建议在业务低峰期提高数据迁移速率以缩短任务耗时,并在业务高峰期前降低迁移速率以减轻对集群性能的影响。数据迁移速率由“indices.recovery.max_bytes_per_sec”参数决定,该参数值默认是“CPU核数 x 32MB”(如4核CPU默认128MB)。该参数取值范围为40MB至1000MB,可根据业务需求调整。PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "1000MB" } }
- 请求处理影响
下线单个节点通常不会中断业务,但在节点下线过程中,发送到该节点的请求可能会失败。为了降低影响可以采用如下措施:
- 通过终端节点服务或独享型负载均衡器访问集群,确保请求自动路由到可用节点。
- 在客户端实现指数退避重试机制(建议配置3次重试)。
- 在业务低峰期进行规格变更。
- 索引副本影响
- Kibana和Cerebro组件影响
变更节点存储类型时,系统会重建Kibana和Cerebro,在此期间服务将暂时不可用。变更节点规格时,如果Kibana和Cerebro运行于被下线的节点上会导致访问失败,此时刷新页面或重新登录,系统会自动重新调度到可用节点。
- 变更过程特性
规格变更任务一旦启动就无法中止,直到任务成功或失败才会结束。任务失败通常只影响单个节点,在有副本的情况下业务不受影响,但需要及时修复失败节点。
当需要紧急进行规格变更时,您也可以提交工单联系技术支持进行变更评估和检查。
变更规格时长
变更规格
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > Elasticsearch”,进入集群列表。
- 确认业务数据是否都有副本,确保变更规格过程中不会中断业务。
- 在集群列表选择目标集群,单击操作列的Kibana,登录Kibana。
- 选择左侧导航栏的“Dev Tools”,进入操作页面。
- 在Kibana中执行命令GET _cat/indices?v。
- 当返回的“rep”值大于“0”时,则表示有副本,请继续执行下一步。
- 当返回的“rep”值等于“0”时,则表示没有副本,建议先为集群手动创建快照再变更规格。
- 在集群列表选择目标集群,单击操作列的“更多>形态变更”进入形态变更页面。
- 选择“更改集群规格”页签。
- 在更改集群规格页面,设置变更规格的参数。
表2 变更规格 参数
说明
变更类型
选择“变更规格”。
变更的资源
显示本次变更规格的资源变化量。
变更的角色
配置变更角色。
- 在“节点类型”列选择本次要变更的节点类型,只能选择一种类型。
- 在“节点规格”列选择新规格,或“节点存储”列选择新存储类型。
节点规格和节点存储类型,不支持同时变更。
图2 变更规格 - 单击“下一步”。
- 确认变更信息后,单击“提交申请”。
- 在弹窗中确认检测项,单击“确认”启动集群规格变更。
- 当变更节点规格时,需要确认是否勾选“进行索引副本校验”和“检测集群状态”。
- 当变更节点存储类型时,需要确认是否勾选“检测集群负载”。
表3 检测项说明 检测项
说明
索引副本校验
索引副本校验用于保证索引正常提供服务。如果跳过校验,变更规格操作将不会要求每一个索引都有副本,变更过程中可能会影响业务。
- 当没有Master节点的集群更改节点规格时,如果选择进行索引副本校验,则要求所有索引至少有1个副本,且“节点数量”总和不小于3。
- 当有Master节点的集群更改节点规格时,如果选择进行索引副本校验,则要求所有索引至少有1个副本。
检测集群状态
默认检测集群状态,变更规格为滚动变更,变更过程中,为了保证变更成功率以及数据安全,会确保每个节点进程拉起来后继续后续节点操作。当集群负载过高业务故障,无法正常下发变更请求,依赖更多的资源才能恢复的紧急情况下可忽略检测集群状态,忽略后,变更过程中因为忽略集群状态检测可能会导致集群故障并中断业务,请谨慎跳过。
检测集群负载
更改节点存储类型过程中节点数据的迁移以及节点下线再上线的动作,会占用集群资源,使集群负载升高。集群负载检测能够识别集群当前可能存在的负载风险,能降低因为集群负载过高而导致的集群更改节点存储类型失败。
“集群负载检测”检测项包含:
- 最大search队列排队数小于1000(nodes.thread_pool.search.queue < 1000)
- 最大write队列排队数小于200(nodes.thread_pool.write.queue < 200)
- 最大cpu使用率小于90%(nodes.process.cpu.percent < 90)
- 最大load相对核数占比小于80%( nodes.os.cpu.load_average / cpu核数 < 80%)
- 单击“返回集群列表”跳转到集群管理页面。集群的“任务状态”列中显示为“规格修改”,表示集群正在更改规格。当集群状态变为“可用”,则表示规格变更成功。