文档

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

更新时间:
一键部署

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

前提条件

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

使用限制

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

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

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

    说明

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

注意事项

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

迁移流程

步骤一:下载迁移工具

根据客户端运行环境,下载最新版本的Milvus-migration工具包。该工具包是免安装版,直接解压即可使用。

步骤二:配置迁移工具

  1. 进入解压缩后的安装包目录。

  2. milvus-migration同级目录创建migration.yaml文件。

    migration.yaml文件内容示例如下所示。其中,您可以根据集群的负载和数据大小以及分布情况调整bufferSize的大小和grpc请求参数大小。

    dumper:
      worker:
        workMode: milvus2x  # 定义工具模式,设置为milvus2x即可,代表迁移至milvus2.x。
        reader:
          bufferSize: 500   # 每次从源集群批量读取数据的行数。
    
    meta:
      mode: config  # 设置为config即可,声明从配置文件中读取元数据配置。
      version: 2.3.0  # 源集群版本,设置为2.3.0及以上。
      collection: src_collection_name  # 源集群的Collection名称。
    
    source:
      milvus2x:
        endpoint: http://{milvus2x_domain}:{milvus2x_port} 
        username: xxxx 
        password: xxxxx 
        grpc:
          maxCallRecvMsgSize: 268435456  # 设置源集群rpc的返回结果大小。
          maxCallSendMsgSize: 268435456  # 设置源集群rpc的发送请求大小。
    
    target:
      milvus2x:
        endpoint: http://{milvus2x_domain}:{milvus2x_port}
        username: xxxx  
        password: xxxxx 
        grpc:
          maxCallRecvMsgSize: 268435456 # 设置目标集群rpc的返回结果大小。
          maxCallSendMsgSize: 268435456 # 设置目标集群rpc的发送请求大小。

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

    参数

    说明

    version

    源集群的Milvus版本。

    collection

    源集群的Collection名称。本文示例为src_collection_name。

    endpoint

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

    如果是阿里云Beta版Milvus集群,则格式为c-xxx.milvus.aliyuncs.com:19530或者c-xxx-internal.milvus.aliyuncs.com:19530,其中c-xxx为Milvus集群的ID。

    username

    源集群或者目标集群用于登录数据库的账号。如果是阿里云Beta版Milvus集群,则使用root账号。

    password

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

步骤三:启动迁移工具

在迁移工具安装目录下,执行以下命令。

./milvus-migration start --config=migration.yaml
说明

在迁移过程中,您可以利用集成了Zilliz商业版内核的阿里云Milvus高效地构建索引,而无需等待迁移完成后再创建索引,具体的索引创建详情请参见步骤四:创建索引

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

[INFO] [migration/milvus2x_starter.go:79] ["=================>JobProcess!"] [Percent=100]
[INFO] [migration/milvus2x_starter.go:75] ["[Loader] Begin to write data by batchInsert sdk to milvus"] [collection=src_collection_name]
[INFO] [dbclient/cus_field_milvus2x.go:151] ["[Loader] success to batchInsert to Milvus"] [col=batchInsert to Milvus]
[INFO] [migration/milvus2x_starter.go:79] ["=================>JobProcess!"] [Percent=100]
[INFO] [migration/milvus2x_starter.go:27] ["[Starter] migration Milvus2x to Milvus2x finish!!!"] [Cost=878.488801469]
[INFO] [starter/starter.go:109] ["[Starter] Migration Success!"] [Cost=878.488879839]

步骤四:创建索引

数据迁移完成后,您可以为Collection创建相应的索引。创建索引示例如下所示。

AUTOINDEX

AUTOINDEX索引的更多详情,请参见使用AUTOINDEX

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",
    metric_type="L2",
    index_type="AUTOINDEX",
)

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

client.load_collection(
    collection_name="src_collection_name"
)

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"
)