Milvus 集群在业务高峰期(如白天写入高峰)可能出现 Data Node、Index Node CPU 和内存水位过高,导致索引构建速度慢、Compaction 延迟,甚至发生 OOM 导致节点重启。而在夜间或非峰值时段,这些节点资源利用率低,造成计算资源闲置浪费。
按时间规则弹性伸缩功能支持您对 Data Node、Index Node 配置多条按时间规则的弹性伸缩计划,在指定时间自动扩缩容相应节点,从而减轻人工调节负担,优化资源成本。
使用限制
-
不支持基于负载或指标(如 CPU、QPS 等)的自动弹性伸缩。
-
单实例仅支持一个执行时区,不做跨时区转换。
-
单节点类型最多支持 10 条规则。
-
双可用区高可用实例在调整节点数量时,步长为 2。
-
弹性伸缩期间实例会短暂进入弹性扩容或弹性缩容状态,此期间无法对实例执行其他变配操作。
-
扩容说明:扩容过程通常仅需几分钟,主要涉及新增节点的分配和初始化。扩容完成后,实例会自动进行数据再平衡,通常需要几分钟不等。
-
缩容说明:缩容操作会先触发数据迁移(Decommission),确保被移除节点上的数据安全迁移到剩余节点后,再释放节点资源。数据迁移时间受集群负载影响。优雅下线超时时间默认为 1 小时,若在超时时间内数据迁移未完成,系统将强制完成缩容。
版本与规格限制
-
弹性伸缩仅适用于标准版实例,入门版不支持。
-
实例引擎版本满足以下要求:
|
引擎版本 |
最低版本要求 |
|
2.6 |
所有 2.6 版本均支持 |
|
2.5 |
2.5.12-0.6.2_3.8.0 及以上 |
|
2.4 |
2.4.23-0.4.3_3.8.0 及以上 |
低于此版本的可以通过版本升级后开启使用弹性伸缩。
-
支持弹性伸缩的组件
Milvus 不同版本支持弹性伸缩的组件如下:
|
组件 |
2.4 |
2.5 |
2.6 |
|
Data Node |
支持 |
支持 |
支持 |
|
Index Node |
支持 |
支持 |
— |
|
Streaming Node |
— |
— |
不支持 |
|
Proxy |
不支持 |
不支持 |
不支持 |
|
Query Node |
不支持 |
不支持 |
不支持 |
|
元数据服务 |
不支持 |
不支持 |
不支持 |
计费说明
-
包年包月实例:实例总资源量 = 基础资源量 + 弹性资源量。其中基础资源量(包年包月)不参与弹性伸缩;弹性资源量采用按量计费,需先手动开启按量资源组。
-
按量计费实例:默认开启按量资源组,不区分基础资源与弹性资源,所有资源均可视为按量资源组内资源。
前提条件
-
实例状态为运行中。
-
包年包月实例已开启按量资源组。
-
当前账号具备实例变配权限。
步骤一:进入弹性伸缩页面
-
在左侧导航栏,单击Milvus实例。
-
在顶部菜单栏,选择目标地域。
-
在实例列表中,单击目标实例名称。
-
在实例详情页,单击弹性伸缩页签。
若弹性伸缩页签不展示,那就是当前实例版本不支持按时间规则弹性伸缩。
步骤二:(可选)开启按量资源组
如果您使用的是按量计费实例,请跳过本步骤。
包年包月实例需先开通按量资源组,才能配置弹性伸缩规则。
-
在弹性伸缩页面,查看按量资源组状态。
-
若未开通,根据页面提示开通按量资源组。
-
开通后,您可以手动对按量资源组进行扩容或缩容:
-
扩容:按量资源组节点数上限为 50 个,双可用区高可用实例步长为 2。扩容期间,不可进行其他缩容、升配、降配、修改配置、升级等操作。按量资源组的节点规格与基础资源的节点规格一致,不支持修改。
-
缩容:按量资源组节点数下限为 0,双可用区高可用实例步长为 2。缩容期间,不可进行其他扩容、升配、降配、修改配置、升级等操作。
-
步骤三:新建弹性伸缩规则
-
在弹性伸缩页面,单击新建规则。
-
在弹出的新建规则对话框中,配置以下参数。
参数
描述
规则名称
必填。长度为 1~64 个字符,不支持特殊字符。同一实例内规则名称不允许重复。
执行间隔
必填。
规则执行的时间间隔,选择每天,在指定时间点每天执行一次。
选择具体的执行时间,24 小时制,精确到分钟。
也可以选择使用 Cron 表达式,通过标准 5 位 Cron 表达式自定义执行计划,适用于更灵活的调度场景。
节点配置
配置定时伸缩触发时的目标节点信息:
-
节点类型:单选,必选。选择需要伸缩的组件类型(如 Data Node、Index Node 等)。
-
节点规格:弹性节点的规格。
-
弹性资源量(节点数):规则生效时,选定节点的按量资源量将被调整到此目标值。
-
包年包月实例:下限为 0,上限为 50。
-
按量计费实例:下限为节点数最小值(Data Node:1,Index Node:1),上限为 50。
双可用区高可用实例的节点增减步长为 2。
说明-
若当前实例的单节点弹性伸缩规则数量已达上限(10 条),将禁止创建,请删除部分规则后再创建。
-
同一节点类型在不允许在同一时间配置规则。
-
-
单击确定,完成规则创建。
规则创建成功后,将在规则列表中展示。
规则配置示例
示例一:工作时间扩容
每天上午 9 点自动扩容 Data Node,以应对日间数据写入高峰:
|
参数 |
配置值 |
|
规则名称 |
day-scale-out |
|
执行间隔 |
每天 |
|
执行时间 |
09:00 |
|
节点类型 |
Data |
|
弹性资源量 |
2 |
示例二:夜间缩容
在每天晚上 22 点自动缩容 Data Node,释放非高峰时段的资源:
|
参数 |
配置值 |
|
规则名称 |
night-scale-in |
|
执行间隔 |
每天 |
|
执行时间 |
22:00 |
|
节点类型 |
Data |
|
弹性资源量 |
0 |
管理弹性伸缩规则
在弹性伸缩页面的规则列表中,您可以查看、编辑、停用、启用或删除弹性伸缩规则。
查看规则列表
规则列表展示以下字段:
-
规则 ID / 规则名称
-
节点类型(Data Node / Index Node)
-
目标资源量(节点数)
-
执行周期(每天 执行时间点)
-
操作
编辑弹性规则
-
在弹性伸缩 Tab 页面,找到目标规则。
-
单击规则操作列的修改。
-
修改规则参数后,单击确定。
-
节点类型不可修改,其余字段均可调整。
-
若规则当前处于执行中状态,不允许编辑。
删除弹性规则
-
在弹性伸缩 Tab 页面,找到目标规则。
-
单击规则操作列的删除。
-
在弹出的确认对话框中,单击确定。
-
删除规则后,该规则将不再触发弹性伸缩活动,已经执行的弹性伸缩不受影响。
-
若规则当前处于执行中状态,不允许删除。
启用 / 停用弹性规则
您可以通过切换规则的启用 / 停用状态来控制规则是否生效,而无需删除规则。
-
在弹性伸缩 Tab 页面,找到目标规则。
-
单击规则操作列的启用或停用。
-
禁用规则后,该规则将不再触发弹性伸缩活动,已经执行的弹性伸缩不受影响。
-
若规则当前处于执行中状态,不允许修改。
修改时区
-
在弹性伸缩 Tab 页面,单击切换时区。
-
选择对应的时区,单击确定。
只有实例下没有规则的情况下可以修改时区。
弹性伸缩概览
在弹性伸缩 Tab 页面的弹性伸缩概览区域,可以查看历史弹性伸缩记录:
|
字段 |
描述 |
|
规则名称 |
触发本次伸缩活动的规则名称 |
|
组件类型 |
本次伸缩涉及的组件 |
|
状态 |
伸缩活动的执行状态,包括:待执行、执行中、成功、失败、已拒绝、已取消 |
|
开始时间 |
伸缩活动的开始时间 |
|
结束时间 |
伸缩活动的结束时间 |
|
描述 |
伸缩活动的详细描述信息 |
常见问题
弹性伸缩会影响正在运行的查询和写入吗?
弹性伸缩过程设计为平滑操作,不会中断正在运行的查询和写入链路,确保业务连续性。
缩容时数据安全吗?
缩容操作采用优雅下线(Decommission)机制,系统会先将被移除节点上的数据安全迁移到剩余节点,待数据迁移完成并确认无数据丢失后,才会释放节点资源。优雅下线超时时间默认为 1 小时,若超时未完成,系统将强制完成缩容。
为什么我的实例不支持弹性伸缩?
请检查以下条件:
-
实例规格需要为标准版,入门版不支持弹性伸缩。
-
引擎版本需要满足最低版本要求(2.4 需 >= 2.4.23-0.4.3_3.8.0,2.5 需 >= 2.5.12-0.6.2_3.8.0,2.6 所有版本均支持)。
-
实例需处于运行中状态。
弹性扩出的节点如何计费?
弹性扩出的节点采用按量计费方式,按实际使用时长计费。当弹性缩容释放节点后,即停止计费。
弹性伸缩规则最多可以配置多少条?
每个组件最多可配置 10 条伸缩规则。