从阿里云Milvus版或自建集群向阿里云Milvus版的迁移方案

更新时间:

阿里云向量检索服务Milvus版是一款全托管向量检索引擎,并确保与开源Milvus的完全兼容性,支持无缝迁移。本文主要介绍如何使用迁移工具,将存量数据从阿里云Milvus版集群或用户自建的Milvus集群,迁移到阿里云Milvus内核版集群的方案。

前提条件

  • 已创建阿里云Milvus版集群或自建的Milvus集群。

  • 已安装Docker,详情请参见Docker官方文档

    说明

    迁移工具在容器环境中运行,因此需要确保Docker已安装。

使用限制

  • 源集群和目标集群的Milvus版本必须大于2.3.0。

  • 确保客户端的网络环境可以访问源集群和目标集群。

  • 确认源集群内的Collection处于已加载(Loaded)状态。

    说明

    如果目标集群中没有该Collection,迁移工具会自动创建该Collection。但需要注意的是,迁移完成后,目标集群的索引不会自动创建,需要您手动创建相应的索引。

注意事项

该迁移方案专注于存量数据的迁移。如果在迁移过程中,Collection不断接收到新的数据录入(即增量数据),那么迁移将无法自动包含这些增量的数据。

迁移流程

步骤一:下载迁移工具

下载迁移工具milvus-migration-tool-0.1.26.tar.gz。该迁移工具是免安装版,直接解压即可使用。

步骤二:配置迁移工具

  1. 进入解压缩后的milvus-migration-tool目录。

  2. 修改configs目录下的migration.yaml文件。

    migration.yaml文件内容示例如下所示。

    dumper:
      worker:
        workMode: milvus2x  # 定义工具模式,设置为milvus2x即可,代表迁移至milvus2.x。
        reader:
          bufferSize: 500   # 每次从源集群批量读取数据的行数。
    
    meta:
      mode: config         # 设置为config即可,声明从配置文件中读取元数据配置。
      version: 2.3.0       # 源集群版本,设置为2.3.0及以上。
      collection: "*"      # 从该源集合迁移数据,'*'表示在脚本模式下所有集合。
    
    source:
      milvus2x:
        endpoint: {milvus2x_domain}:{milvus2x_port} 
        database: xxxx 
        username: xxxx 
        password: xxxxx 
    
    
    target:
      milvus2x:
        endpoint: {milvus2x_domain}:{milvus2x_port}
        database: xxxx 
        username: xxxx  
        password: xxxxx 
    
    index:
      mode: manual             # 指定索引模式。取值为migration和manual。
    

    涉及以下参数需要您根据实际情况进行替换。

    参数

    说明

    version

    源集群的Milvus版本。

    collection

    源集群的Collection名称。*表示需要对所有Collection进行操作。

    本文示例中,源集群仅包含一个名为milvus_collection的集合。

    endpoint

    源集群或者目标集群的Endpoint。

    database

    源集群或者目标集群的数据库名称。不指定时默认为default。

    username

    源集群或者目标集群用于登录数据库的账号。

    password

    源集群或者目标集群用于登录数据库账号的密码。

    index.mode

    指定索引模式。取值为:

步骤三:启动迁移工具

在迁移工具的milvus-migration-tool目录下,执行以下命令。

bin/milvus-migration script

整体迁移完成之后,您可以看到类似如下返回信息。

2024-09-27 06:39:14,346 INFO Collection pending migration: ['milvus_collection']
2024-09-27 06:39:14,347 INFO Starting to migrate collection: milvus_collection, current progress: 1/1
2024-09-27 06:39:14,464 INFO Successfully migrated data on collection: milvus_collection

(可选)步骤四:创建索引

迁移数据完成后,如需为Collection创建相应的索引,请参阅以下示例。

HNSW

from pymilvus import MilvusClient

# 创建Milvus Client。
client = MilvusClient(
    uri="http://c-xxxx.milvus.aliyuncs.com:19530",  # Milvus实例的公网地址。
    token="<yourUsername>:<yourPassword>",  # 登录Milvus实例的用户名和密码。
    db_name="default"  # 待连接的数据库名称,本文示例为默认的default。
)

index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="vector",
    index_type="HNSW",
    metric_type="L2",
    params= {"M": 100,"efConstruction": 64}
)

client.create_index(
    collection_name="src_collection_name",
    index_params=index_params
)

client.load_collection(
    collection_name="src_collection_name"
)

IVF_FLAT

from pymilvus import MilvusClient

# 创建Milvus Client。
client = MilvusClient(
    uri="http://c-xxxx.milvus.aliyuncs.com:19530",  # Milvus实例的公网地址。
    token="<yourUsername>:<yourPassword>",  # 登录Milvus实例的用户名和密码。
    db_name="default"  # 待连接的数据库名称,本文示例为默认的default。
)

index_params = MilvusClient.prepare_index_params()

index_params.add_index(
    field_name="vector",
    index_type="IVF_FLAT",
    metric_type="L2",
    params={"nlist": 1024}
 )

client.create_index(
    collection_name="src_collection_name",
    index_params=index_params
)

client.load_collection(
    collection_name="src_collection_name"
)