從阿里云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"
)