全部產品
Search
文件中心

Vector Retrieval Service for Milvus:使用鏡像工具遷移資料至阿里雲Milvus

更新時間:Jan 16, 2026

當您的源 Milvus 為自建(非阿里雲 Milvus 服務)且無法通過公網訪問時,您可以在本地或阿里雲 VPC 內部署資料移轉工具容器,安全地將資料同步至阿里雲 Milvus 服務。本文基於 taihao-executor 容器鏡像實現,支援批量遷移多個資料集合,並保證資料一致性與高可靠性。

限制與配置要求

遷移前準備(必須執行)

  1. 操作狀態控制

    叢集類型

    要求

    說明

    源叢集

    停止所有資料變更操作

    包括寫入、刪除和更新操作,確保叢集處於唯讀狀態,防止資料變動導致遷移過程中出現不一致。

    目的地組群

    暫停所有資料操作

    包括查詢、寫入、刪除和更新操作,保持不可用狀態,避免與遷移資料衝突。

  2. 版本相容性

    要求

    規範

    源叢集版本

    必須高於 2.3.6(即 ≥ v2.3.7)

    目的地組群版本

    必須不低於源叢集版本

遷移任務限制

  1. 任務管理

    • 並發限制:同一時間僅能執行1個遷移任務。

  2. 資料範圍

    • 資料庫限制:每個遷移任務僅支援同一資料庫下的Collection。

    • Collection數量:最多包含5個Collection。

    • 資料總量:所有Collection的總實體數量不超過5億。

  3. 資料狀態

    • 來源資料要求:待遷移的Collection必須處於已載入狀態(load狀態)。

    • 目標執行個體要求:必須是空執行個體(無任何現有實體資料)。

網路要求

源 Milvus 與目標阿里雲 Milvus 可被容器所在網路訪問,建議部署在相同 VPC下。

遷移步驟

步驟1:拉取 VTS 鏡像

docker pull registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali

步驟2:啟動容器並進入環境

  1. 啟動容器(後台運行)

    docker run -d -it \
      --name milvus-migration \
      registry.cn-hangzhou.aliyuncs.com/taihao-executor/taihao-executor:release_2.22.0-ali \
      /bin/bash
  2. 查看容器 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 對目的地組合執行以下操作:

  1. 建立索引

    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)
  2. 載入集合到記憶體

    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 觀察目的地組合行數變化。