當您的源 Milvus 為自建(非阿里雲 Milvus 服務)且無法通過公網訪問時,您可以在本地或阿里雲 VPC 內部署資料移轉工具容器,安全地將資料同步至阿里雲 Milvus 服務。本文基於 taihao-executor 容器鏡像實現,支援批量遷移多個資料集合,並保證資料一致性與高可靠性。
限制與配置要求
遷移前準備(必須執行)
操作狀態控制
叢集類型
要求
說明
源叢集
停止所有資料變更操作
包括寫入、刪除和更新操作,確保叢集處於唯讀狀態,防止資料變動導致遷移過程中出現不一致。
目的地組群
暫停所有資料操作
包括查詢、寫入、刪除和更新操作,保持不可用狀態,避免與遷移資料衝突。
版本相容性
要求
規範
源叢集版本
必須高於 2.3.6(即 ≥ v2.3.7)
目的地組群版本
必須不低於源叢集版本
遷移任務限制
任務管理
並發限制:同一時間僅能執行1個遷移任務。
資料範圍
資料庫限制:每個遷移任務僅支援同一資料庫下的Collection。
Collection數量:最多包含5個Collection。
資料總量:所有Collection的總實體數量不超過5億。
資料狀態
來源資料要求:待遷移的Collection必須處於已載入狀態(load狀態)。
目標執行個體要求:必須是空執行個體(無任何現有實體資料)。
網路要求
源 Milvus 與目標阿里雲 Milvus 可被容器所在網路訪問,建議部署在相同 VPC下。
遷移步驟
步驟1:拉取 VTS 鏡像
docker pull registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali步驟2:啟動容器並進入環境
啟動容器(後台運行)
docker run -d -it \ --name milvus-migration \ registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali \ /bin/bash查看容器 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 對目的地組合執行以下操作:
建立索引
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)載入集合到記憶體
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 觀察目的地組合行數變化。