全部产品
Search
文档中心

向量检索服务 Milvus 版:使用镜像工具迁移数据至阿里云Milvus

更新时间:Jan 15, 2026

当您的源 Milvus 为自建(非阿里云 Milvus 服务)且无法通过公网访问时,您可以在本地或阿里云 VPC 内部署数据迁移工具容器,安全地将数据同步至阿里云 Milvus 服务。本文基于 taihao-executor 容器镜像实现,支持批量迁移多个数据集合,并保证数据一致性与高可靠性。

限制与配置要求

迁移前准备(必须执行)

  1. 操作状态控制

    集群类型

    要求

    说明

    源集群

    停止所有数据变更操作

    包括写入、删除和更新操作,确保集群处于只读状态,防止数据变动导致迁移过程中出现不一致。

    目标集群

    暂停所有数据操作

    包括查询、写入、删除和更新操作,保持不可用状态,避免与迁移数据冲突。

  2. 版本兼容性

    要求

    规范

    源集群版本

    必须高于 2.3.6(即 ≥ v2.3.7)

    目标集群版本

    必须不低于源集群版本

迁移任务限制

  1. 任务管理

    • 并发限制:同一时间仅能执行1个迁移任务。

  2. 数据范围

    • 数据库限制:每个迁移任务仅支持同一数据库下的Collection。

    • Collection数量:最多包含5个Collection。

    • 数据总量:所有Collection的总实体数量不超过5亿。

  3. 数据状态

    • 源数据要求:待迁移的Collection必须处于已加载状态(load状态)。

    • 目标实例要求:必须是空实例(无任何现有实体数据)。

网络要求

源 Milvus 与目标阿里云 Milvus 可被容器所在网络访问,建议部署在相同 VPC下。

迁移步骤

步骤1:拉取 VTS 镜像

docker pull registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali

步骤2:启动容器并进入环境

  1. 启动容器(后台运行)

    docker run -d -it \
      --name milvus-migration \
      registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali \
      /bin/bash
  2. 查看容器 ID 并进入

    bash# 查询容器
    docker ps
    
    # 进入容器(替换为实际容器ID)
    docker exec -it <container_id> bash

    示例:

    docker exec -it 55ac98f3b054 bash

步骤3:创建迁移配置文件 migration.conf

在容器内创建配置文件:

vi migration.conf

配置模板说明

hoconenv {
  parallelism = 1           # 并发度,建议初始设为1
  job.mode = "BATCH"        # 批量模式
}

source {
  Milvus {
    url = "http://<源实例地址>:19530"       # 支持内网地址
    token = "<用户名>:<密码>"                 # 如 root:Test123456@
    database = "default"                    # 默认 default,可通过 list_databases 查询
    collections = ["col_a", "col_b"]        # 要迁移的集合列表
    batch_size = 10000                      # 每次读取条数,大表可调高
  }
}

sink {
  Milvus {
    url = "http://<目标阿里云Milvus地址>:19530"
    token = "<目标实例token>"
    database = "default"
    batch_size = 1000
    enable_auto_id = false                 # 若原集合有自增ID,设为false;否则true
  }
}

注意事项

  • 必须加载源 Collection:所有待迁移的 Collection 必须已执行 load(),否则会报错;

  • 如需迁移全部集合:删除 collections 行即可自动同步所有已加载集合;

  • 推荐使用内网地址:若容器与目标实例在同一区域,请使用内网 endpoint 提升传输速度。


步骤4:启动迁移任务

方式1:Local 模式(单机运行)

nohup ./bin/seatunnel.sh --config ./migration.conf -m local > migration.log 2>&1 &
自定义内存参数(可选)

编辑 config/jvm_client_options 文件:

-Xms4g
-Xmx8g

根据机器资源设置堆内存大小,避免 OOM。

方式2:Cluster 模式(高性能推荐)

适用于大数据量迁移:

bash# 创建日志目录
mkdir -p ./logs

# 启动集群服务
./bin/seatunnel-cluster.sh -d

# 提交任务
nohup ./bin/seatunnel.sh --config ./migration.conf > migration.log 2>&1 &

步骤5:索引构建与加载(目标端)(可选)

迁移完成后,登录 Attu 或使用 SDK 对目标集合执行以下操作:

  1. 创建索引

    milvus_client = milvus.prepare_index_params()
    index_params.add_index(
            field_name="vector",  # Name of the vector field to be indexed
            index_type="HNSW",  # Type of the index to create
            index_name="vector_index",  # Name of the index to create
            metric_type="L2",  # Metric type used to measure similarity
            params={
                "M": 64,  # Maximum number of neighbors each node can connect to in the graph
                "efConstruction": 100  # Number of candidate neighbors considered for connection during index construction
            }  # Index building params
        )
    milvus_client.create_index("collectionName", index_params)
  2. 加载集合到内存

    milvus_client.load_collection()

    索引需在加载前创建,否则无法启用加速检索。关键参数:

    参数

    获取方式

    url

    登录阿里云Milvus控制台,在安全配置页签下查看公网或者内网地址,建议优先使用内网地址以提升性能。

    token

    格式为用户名:密码,例如:root:YourPassword123@,登录阿里云Milvus控制台,在安全配置页签下查看root账号对应的密码。

    database

    默认为 default,如使用多数据库功能,可通过 list_databases()API 查询。

    完整配置:

    env {
      parallelism = 1
      job.mode = "BATCH"
    }
    
    source {
      Milvus {
        url = "http://xx.xx.xx.xx:19530"
        token = "root:SourcePass123@"
        database = "default"
        collections = ["medium_articles"]
        batch_size = 10000
      }
    }
    
    sink {
      Milvus {
        url = "http://proxy-bj.vpc.milvus.aliyuncs.com:19530"
        token = "root:TargetPass123@"
        database = "default"
        batch_size = 10000
        enable_auto_id = false
      }
    }

常见问题 FAQ

Q1:迁移过程中报错 “Collection not loaded”

A:请确保源端所有要迁移的 Collection 已调用 .load() 方法加载至内存。

Q2:能否只迁移部分字段?

A:当前版本仅支持整 Collection 迁移,暂不支持字段过滤。

Q3:如何监控迁移进度?

A:查看 migration.log 日志输出;也可通过 Attu 观察目标集合行数变化。