Milvus CDC

Milvus CDC(變更資料擷取)可將資料變更從一個 Milvus 叢集複製到另一個叢集。您可以使用 CDC 為 Milvus 建置主備災難復原拓撲。

在主-備拓撲中,其中一個叢集擔任主叢集並接受寫入操作。一個或多個備用叢集會持續接收來自主叢集的變更,並可處理讀取流量。當主叢集無法運作或需要進行維護時,您可以將服務流量切換至備用叢集。

架構

典型的拓撲包含:

  • 主叢集:複製的來源叢集。它接受讀取與寫入操作。
  • 備用叢集:複製的目標叢集。它接收來自主叢集的變更,並在維持備用狀態期間為唯讀模式。
  • CDC 節點:Milvus 組件之一,負責將當前主叢集的 WAL 變更轉發至備用叢集。請在每個可能於切換或故障轉移後成為主叢集的叢集上部署 CDC。
  • 複製拓撲:已配置的來源至目標關係,例如 cluster-a -> cluster-b。 以下為該拓撲的示意圖。 CDC workflow CDC 工作流程

支援的拓撲結構

最常見的 CDC 部署方式為一個主叢集和一個備用叢集:

Application writes
      |
      v
Primary cluster A  -- CDC replication -->  Standby cluster B

Milvus CDC 亦支援單主叢集、多備援叢集的拓撲:

Primary cluster A  -- CDC replication -->  Standby cluster B
                  \-- CDC replication -->  Standby cluster C

Milvus CDC 不支援多主或主動-主動部署,即兩個或更多叢集同時接受寫入流量的部署模式。

主節點與備用節點的運作行為

角色讀取寫入複製行為
主節點是是將變更傳送至備用叢集
備用是否從主叢集接收複製的變更

備用叢集會拒絕直接寫入請求。此舉可防止「腦裂」現象,並維持複製拓撲的一致性。

預定切換與故障轉移

Milvus CDC 提供兩種方式,將服務流量從當前主叢集移轉至備用叢集。

操作適用於資料遺失預期行為
切換當前主節點仍可連線,或您正在進行預定維護RPO = 0在角色變更前,會等待剩餘的複製資料完成
故障轉移當前主伺服器無法使用且無法快速恢復可能立即提升備用伺服器為主伺服器,以便寫入操作能恢復

只要當前主伺服器仍能回應,就應使用切換。僅當恢復可用性比等待原始主伺服器更重要時,才使用故障轉移。

CDC 滯後及其重要性

CDC 滯後是指已寫入主叢集但尚未套用至備用叢集的資料量。

CDC 滯後會影響以下兩種恢復選項:

  • 在切換期間,較低的 CDC 滯後通常意味著操作能更快完成。
  • 在故障轉移期間,CDC 滯後代表若原始主叢集不可用時,可能遺失的資料範圍。

您應持續監控 CDC 滯後,並盡可能將其維持在最低水平。「設定 CDC 複製」頁面中包含一個用於估算 CDC 滯後的 PromQL 範例。

CDC 複製中的批次匯入

在 CDC 複製拓撲中,批量匯入必須使用兩階段提交 (2PC) 模式,並搭配 `auto_commit=false`。僅針對主叢集執行匯入與提交,並確保主叢集和備用叢集均可存取匯入檔案。詳細資訊請參閱《CDC 複製中的批量匯入》。

限制

Milvus CDC 目前有以下限制:

  • 僅支援單主節點拓撲。
  • 不支援主動-主動(active-active)或多主節點寫入。
  • 備用叢集可處理讀取流量,但在維持備用狀態期間會拒絕直接寫入。
  • 發生故障轉移時,可能遺失已寫入舊主節點但尚未複製至備用節點的資料。
  • 所設定的pchannels 必須與各叢集的實際通道佈局相符。

常見問題

備用叢集可以處理查詢嗎?

可以。備用叢集可以處理讀取流量,但在成為主叢集之前,無法接受寫入操作。

Milvus CDC 是否支援主動-主動寫入?

不。Milvus CDC 專為單一主節點拓撲設計。同時向多個叢集寫入資料可能會導致「腦裂」及資料分歧。

切換時會丟失資料嗎?

不會。系統切換會等待剩餘資料完成複製後,才讓備用叢集成為主叢集。

故障轉移會導致資料遺失嗎?

可能會。任何寫入舊主節點但尚未複製到備用節點的資料,都可能遺失。

故障轉移期間可能損失多少資料?

潛在的資料損失量取決於主伺服器無法運作時,CDC 的滯後量。