Milvus 2.3 升级到 2.4 数据迁移建议优先使用官方工具 milvus-backup 进行全量备份恢复,或采用 milvus-migration 工具进行集合级同步。操作前需重点确认版本兼容性说明,避免因内部数据格式或索引结构变更导致迁移失败。
先说结论:生产环境升级需通过备份恢复或在线迁移工具实现,严禁直接替换二进制文件。
- 适合:跨版本升级、单机转集群、跨存储迁移场景。
- 先看:目标版本 Release Notes 中的不兼容变更列表和索引类型支持情况。
- 建议:在测试环境完整验证迁移流程,确认数据一致性后再执行生产操作。
命令速用版
使用 milvus-backup 工具执行迁移的核心命令如下,需确保工具版本与 Milvus 版本兼容:
# 创建备份 ./milvus-backup create -n <backup_name> # 恢复数据到目标集群 ./milvus-backup restore -n <backup_name>
若使用 milvus-migration 工具进行集合级迁移,配置好 migration.yaml 后执行:
./milvus-migration start `--config`=/path/to/migration.yaml
为什么会这样
Milvus 2.x 版本间虽然保持 API 兼容,但内部数据格式可能发生变化。特别是涉及索引类型变更或向量编码优化时,跨版本迁移需要格外小心。例如从早期 2.x 版本迁移时,HNSW 索引可能需要重建。直接复制数据文件往往行不通,因为单机版和分布式版在存储结构、索引管理和查询处理等方面存在显著差异。
分步处理
按照以下流程执行迁移,每一步都需确认状态后再继续:
- 环境检查:确认单机版和集群版 Milvus 的大版本一致或符合升级路径,检查 MinIO 存储的 bucket 命名规则是否兼容。使用 curl 检查服务健康状态:
curl http://<ip>:19530/v1/version。 - 配置工具:修改 milvus-backup 的 backup.yaml 配置文件。若使用不同 MinIO 实例,确保开启跨存储传输选项(crossStorage: "true"),否则会导致迁移失败。集群版的 MinIO 如果是多节点部署,address 字段应该填写负载均衡地址而非单个节点 IP。
- 执行备份:在源环境执行备份命令,观察日志确认备份完成。确保 MinIO 集群的可用空间足够,建议预留源数据 1.5 倍空间。
- 执行恢复:在目标环境执行恢复命令。迁移过程中不要执行库或表结构变更的 DDL 操作,否则会导致数据同步任务失败。
怎么验证是否生效
迁移完成后,通过以下方式验证数据完整性和可用性:
- 集合数量检查:使用 Python SDK 连接目标集群,运行
utility.list_collections()对比集合列表是否一致。 - 实体数量核对:遍历每个集合,检查
collection.num_entities是否与源环境一致。 - 索引状态确认:检查索引是否加载成功,尝试执行向量查询请求,确认无报错且返回结果正常。
常见坑
以下场景容易导致迁移失败或数据不一致,操作时需谨慎:
- 版本不匹配:集群版强烈建议使用相同或更高的小版本,大版本迁移需要仔细阅读官方 Release Notes 的兼容性说明。
- 存储权限错误:确认单机版使用的存储(通常是 MinIO 或 S3)的访问地址、端口、Bucket 名称以及访问密钥正确无误。
- 迁移中变更:在全量同步阶段,请勿执行库或表结构变更的 DDL 操作。全量迁移在任务启动时会统计需要迁移的数据量,当读取到这个数据量后会停止任务,不会因为在任务执行期间新增的行而继续执行。
- 网络连通性:确保迁移工具能同时访问两个环境的网络端口,如果使用不同 MinIO 实例,需验证网络可达性。
常见问题
迁移过程中需要停机吗?
备份恢复方式通常需要停机窗口以确保数据一致性,migration 工具可能支持在线但需评估性能影响。建议业务低峰期执行迁移,同时合理配置并行参数,避免因资源争用导致源系统不可用。
索引会自动迁移吗?
部分索引可能需要重建,需查看版本说明。特别是涉及索引类型变更或向量编码优化时,跨版本迁移需要格外小心,曾遇到从 v2.1 迁移到 v2.3 时 HNSW 索引需要重建的情况。
迁移失败怎么回滚?
保留源数据不动,重新连接旧版本服务。在执行任何迁移操作前,务必在测试环境完整验证整个流程,真实案例中曾因未测试直接在生产环境操作,导致数据迁移失败,回退耗时长达 8 小时。
参考来源
- Milvus 单机版升级集群版实战:用 milvus-backup 搞定数据迁移 (附避坑指南)
- Milvus 数据迁移全攻略:如何用 milvus-backup 实现跨版本/跨架构无损迁移?
- milvus 使用 milvus migration 工具迁移数据 (GitHub: https://github.com/zilliztech/milvus-migration)
- 通过备份文件从 Milvus 迁移至 Zilliz Cloud (Milvus 官方文档)
- 自建 Milvus 迁移至向量数据库 VectorDB (阿里云 DTS 文档)