架构优化、更低成本、检索与更多功能增强
不久前,Milvus 2.6 正式发布。
在该版本中,我们推出了多项备受期待的架构优化与新功能:
在架构层面,Milvus 2.6 大幅简化系统架构,整合多个核心组件 —— 例如将原有的 Coordinator 组件(含 RootCoord、QueryCoord、DataCoord)统一整合为 MixCoord,并将 IndexNode 与 DataNode 合并为单一组件。这些调整不仅降低了系统复杂度,更显著提升了系统的可维护性与横向扩展性。
此外,Milvus 2.6 新增多项实用功能,包括支持动态添加字段(Add Field)、地理空间(Geometry)与时间戳(TimestampTz)数据类型,以及 Structured List 等特性。这些新功能进一步拓宽了 Milvus 的应用边界,为开发者与数据科学家提供了更灵活的技术支撑。
伴随这些架构优化与新功能的落地,后台许多用户都私信我们,表示希望体验到 2.6 带来的提升。并希望得到官方指导的Milvus平滑版本升级。因此,本文将详细介绍如何顺利完成从 Milvus 2.5 到 2.6 的升级,并确保数据和服务的稳定性。
slop参数调整词序宽容度,适配法律文档、智能问答等高精度场景。还支持了 NGRAM Index,加速对VARCHAR 字段或JSON 字段内特定 JSON 路径的LIKE 查询。更多更新详情,可以参考
https://milvus.io/docs/zh/release_notes.md
首先通过2.5和2.6两个版本的架构图来为大家分析下功能组件的变化:



在2.5版本中,Worker Nodes流批处理耦合,Query Node既有增量又有历史数据的检索,Data Node既有增量数据的落盘(Flush)又有历史数据的的压缩(Compaction),批处理能力池化难,分散在不同分布式角色中的两个流处理状态对齐有延迟。
2.6 版本将流式数据处理单独抽象出 StreamingNode 组件,专门负责流式数据的消费、写入和处理,而 DataNode 和 QueryNode 则专注于批式数据的处理。新增的2.6 Streaming Node取代了2.5 Data Node消费数据落盘到对象存储,2.5 Query Node做增量数据检索,和2.5 Proxy往流里写入数据的功能。
流批分离,合并分散角色。
新增Streaming Node,合并Coordinators为Mixcoord,Index Node和Data Node合并为Data Node。
为了保障系统在升级过程中尽量保持可用状态,需要遵循以下升级顺序:
拉起Streaming Node -> 升级Mixcoord -> 升级Query Node -> 升级 Data Node -> 升级Proxy -> 下掉Index Node。
升级完DataNode,到升级完Proxy期间,Flush操作不可用。
第一个Proxy节点升级后,到升级完Proxy期间,部分写操作不可用。
如果从2.5.x直接升级到发布的2.6.6版本,由于DDL框架的修改,升级流程中DDL操作不可用。
apiVersion: milvus.io/v1beta1
kind: Milvus
metadata:
name: my-milvus-mansion
namespace: dev
spec:
mode: cluster # cluster or standalone
# Milvus Components
components:
image: milvusdb/milvus:v2.6.5
imageUpdateMode: rollingUpgrade
proxy:
replicas: 1
mixCoord:
replicas: 1
dataNode:
replicas: 1
queryNode:
replicas: 2
resources:
requests:
cpu: "2"
memory: "8Gi"
# Dependencies, including etcd, storage and message stream
dependencies:
etcd:
inCluster:
values:
replicaCount: 3
storage:
type: MinIO
inCluster:
values:
mode: distributed
msgStreamType: pulsar
pulsar:
inCluster:
values:
bookkeeper:
replicas: 3
# Milvus configs
config:
dataCoord:
enableActiveStandby: tru
Milvus-Operator对Cluster模式组件升级做了如下适配:
spec.components.image的tag,判断是否是2.6版本。spec.components.version主动告知版本。status.currentImage/status.currentVersion,和spec.components.image/(status.currentVersion)判断是否为2.5到2.6的升级场景。spec.components.imageUpdateMode: rollingUpgrade,也是默认模式),会依次拉起Streaming Node -> 升级Mixcoord -> 升级Query Node -> 升级 Data Node -> 升级Proxy -> 下掉Index Node。spec.Components.MixCoord有配置,会在Mixcoord起来之后,把其他Coords都下掉。a.升级Milvus-Operator到最新版本(下面以本文写作时最新的1.3.3为例)。
# Option 1: Using Helm
helm upgrade --install milvus-operator \
-n milvus-operator --create-namespace \
https://github.com/zilliztech/milvus-operator/releases/download/v1.3.3/milvus-operator-1.3.3.tgz
# Option 2: Using kubectl & raw manifests
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.3/deploy/manifests/deployment.yaml
a.升级Milvus-Operator到最新版本(下面以本文写作时最新的1.3.3为例)。
# Option 1: Using Helm
helm upgrade --install milvus-operator \
-n milvus-operator --create-namespace \
https://github.com/zilliztech/milvus-operator/releases/download/v1.3.3/milvus-operator-1.3.3.tgz
# Option 2: Using kubectl & raw manifests
kubectl apply -f https://raw.githubusercontent.com/zilliztech/milvus-operator/v1.3.3/deploy/manifests/deployment.yaml
b.合并Coords,跳过如果已是mixcoord部署了。
kubectl patch milvus my-release -n demo-operator --type=merge -p '
{
"spec": {
"components": {
"mixCoord": {
"replicas": 1
}
}
}
}
c.确保升级到2.5.16 (或更高的2.5版本),跳过如果已是2.5.16以上版本。
kubectl patch milvus my-release -n demo-operator --type=merge -p '
{
"spec": {
"components": {
"image": "milvusdb/milvus:v2.5.22"
}
}
}'
# wait till updated
kubectl wait milvus my-release -n demo-operator --for=condition=milvusupdated --timeout=1h
d.升级到2.6。
kubectl patch milvus my-release -n demo-operator --type=merge -p '
{
"spec": {
"components": {
"image": "milvusdb/milvus:v2.6.5"
}
}
}'
# wait till updated
kubectl wait milvus my-release -n demo-operator --for=condition=milvusupdated --timeout=1h
在Helm里,各Deployment均并发执行,没有顺序关系,无法进行严格的滚动升级,如果是在生产环境中部署Milvus,优先推荐使用 Operator。
软件要求:Helm version >= 3.14.0,Kubernetes version >= 1.20.0
第一步,升级Helm Chart到最新版本(下面以本文写作时最新的5.0.7为例)。
helm repo add zilliztech https://zilliztech.github.io/milvus-helm
helm repo update
mixCoordinator
。
helm upgrade -i my-release zilliztech/milvus \
--namespace=helm-demo \
--set image.all.tag="v2.5.22" \
--set mixCoordinator.enabled=true \
--set rootCoordinator.enabled=false \
--set indexCoordinator.enabled=false \
--set queryCoordinator.enabled=false \
--set dataCoordinator.enabled=false \
--set streaming.enabled=false \
--set indexNode.enabled=true \
--reset-then-reuse-values \
--version=5.0.7 \
--wait --timeout 1h
第三步,升级到2.6。
helm upgrade my-release zilliztech/milvus \
--namespace=helm-demo \
--set image.all.tag="v2.6.5" \
--set streaming.enabled=true \
--set indexNode.enabled=false \
--reset-then-reuse-values \
--version=5.0.7 \
--wait --timeout 1h
Q1:Milvus-Helm和Milvus-Operator的对比?
推荐在生产上用Milvus-Operator,对比请见https://github.com/zilliztech/milvus-operator?tab=readme-ov-file#milvus-operator-vs-helm
Q2:Message Queue的选择?
standalone:成本敏感用rocksmq。
cluster:pulsar支持更多租户,可以更大规模实例共用,水平扩缩能力强;Kafka部署维护更成熟,各大云都提供了SaaS方案。
2.6 新推出的Woodpecker: 没有额外Message Queue依赖,成本低,维护简单。目前支持部署的是woodpecker嵌入模式,较轻量。2.6 standalone推荐使用woodpecker;2.6 上生产的cluster模式建议使用待发布的woodpecker集群模式。
Q3: 升级过程中支持MQ的切换吗?
目前不支持切换MQ,后续版本会实现Pulsar,Kafka,Woodpecker和RocksMQ之间的切换的管理API以支持切换MQ。
Q4:2.6限流配置是否要更改?
不需要,原限流配置对StreamingNode也生效。
Q5:Mixcoord合并后,监控上的role有变更吗?配置项有变更吗?
监控role没有变更(rootcoord,querycoord, datacoord);原有配置项不变,同时新增mixCoord.enableActiveStandby,会fallback到rootcoord.enableActiveStandby。
Q7:Streaming Node推荐的资源配置?
如果少量实时写入或边写边查询的需求,Streaming Node配置可以较小,比如2C 8G;反之和QueryNode同等配置较好。
Q8: Docker Compose 单机升级?
修改docker-compose.yaml中Milvus的镜像tag即可,详见:https://milvus.io/docs/upgrade_milvus_standalone-docker.md
作者介绍

Zilliz DevOps Engineer 忆卿
文章来自于微信公众号 “Zilliz”,作者 “Zilliz”
【开源免费】DeepBI是一款AI原生的数据分析平台。DeepBI充分利用大语言模型的能力来探索、查询、可视化和共享来自任何数据源的数据。用户可以使用DeepBI洞察数据并做出数据驱动的决策。
项目地址:https://github.com/DeepInsight-AI/DeepBI?tab=readme-ov-file
本地安装:https://www.deepbi.com/
【开源免费】airda(Air Data Agent)是面向数据分析的AI智能体,能够理解数据开发和数据分析需求、根据用户需要让数据可视化。
项目地址:https://github.com/hitsz-ids/airda
【开源免费】graphrag是微软推出的RAG项目,与传统的通过 RAG 方法使用向量相似性作为搜索技术不同,GraphRAG是使用知识图谱在推理复杂信息时大幅提高问答性能。
项目地址:https://github.com/microsoft/graphrag
【开源免费】Dify是最早一批实现RAG,Agent,模型管理等一站式AI开发的工具平台,并且项目方一直持续维护。其中在任务编排方面相对领先对手,可以帮助研发实现像字节扣子那样的功能。
项目地址:https://github.com/langgenius/dify
【开源免费】RAGFlow是和Dify类似的开源项目,该项目在大文件解析方面做的更出色,拓展编排方面相对弱一些。
项目地址:https://github.com/infiniflow/ragflow/tree/main
【开源免费】phidata是一个可以实现将数据转化成向量存储,并通过AI实现RAG功能的项目
项目地址:https://github.com/phidatahq/phidata
【开源免费】TaskingAI 是一个提供RAG,Agent,大模型管理等AI项目开发的工具平台,比LangChain更强大的中间件AI平台工具。
项目地址:https://github.com/TaskingAI/TaskingAI