从阿里云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。该迁移工具是免安装版,直接解压即可使用。
步骤二:配置迁移工具
进入解压缩后的
milvus-migration-tool
目录。修改
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
指定索引模式。取值为:
manual(默认):不迁移索引。迁移完成后如需创建索引,请参见(可选)步骤四:创建索引。
migration:迁移源集群的索引。
步骤三:启动迁移工具
在迁移工具的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"
)