集群升级/规格变更时节点过载
问题描述
在进行集群版本升级或规格变更操作(例如,滚动升级、调整实例规格)的过程中,如果并发恢复参数设置不当,可能导致集群内部分或全部节点负载急剧升高。典型现象:
- 节点负载异常:在集群版本升级或规格变更过程中,节点CPU、JVM内存使用率急剧升高。
- 节点脱离:部分节点因资源耗尽导致脱离集群,集群状态变为red。
- 任务中断:升级/规格变更任务执行时间显著增加,部分任务超时失败。
- 资源瓶颈:监控显示CPU使用率超过90%,JVM内存持续增长。
问题原因
- 参数设置不合理:参数indices.recovery.max_bytes_per_sec设置过高,导致数据迁移速度过快,引发CPU和内存资源竞争,造成节点过载。
- 任务堆积:版本升级或规格变更时,系统自动触发的分片迁移和副本分配任务会因并发参数不当而堆积,进一步加剧资源消耗。
- 资源不足:节点规格不足、磁盘IO或网络带宽受限时,无法支撑高并发参数下的操作,导致任务执行效率显著下降。
解决方法
- 调整并发参数以减少节点间的通信负载,提高集群稳定性。
降低数据迁移速度以减少节点负载,确保集群稳定运行。降低迁移速度会延长任务执行时间。
PUT _cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "40mb", "cluster.routing.allocation.node_concurrent_outgoing_recoveries": 2, "cluster.routing.allocation.cluster_concurrent_rebalance": 2, "cluster.routing.allocation.node_initial_primaries_recoveries": 2 } }等待5~10分钟,查看监控指标(如CPU、JVM内存使用率)确认负载是否下降。
- 是,检查集群状态是否恢复正常,确保所有节点均处于健康状态,故障修复成功。
- 否,可以进一步降低indices.recovery.max_bytes_per_sec,如果调整后负载仍然过高,或任务已超时失败,则继续执行下一步。
- 终止任务。如果是升级任务,可以在控制台的升级版本页面终止升级任务,但是需确认所有节点均未成功升级,方可终止升级任务。如果无法终止任务可以联系技术支持。
- 扩容集群节点数量或升级集群节点规格,确保新资源能够满足业务要求。
- 扩容成功后,重新执行升级/规格变更任务,确认任务是否成功。
- 是,则故障恢复。
- 否,则联系技术支持处理。