Milvus CDC
Milvus CDC(變更資料擷取)可將資料變更從一個 Milvus 叢集複製到另一個叢集。您可以使用 CDC 為 Milvus 建置主備災難復原拓撲。
在主-備拓撲中,其中一個叢集擔任主叢集並接受寫入操作。一個或多個備用叢集會持續接收來自主叢集的變更,並可處理讀取流量。當主叢集無法運作或需要進行維護時,您可以將服務流量切換至備用叢集。
架構
典型的拓撲包含:
- 主叢集:複製的來源叢集。它接受讀取與寫入操作。
- 備用叢集:複製的目標叢集。它接收來自主叢集的變更,並在維持備用狀態期間為唯讀模式。
- CDC 節點:Milvus 組件之一,負責將當前主叢集的 WAL 變更轉發至備用叢集。請在每個可能於切換或故障轉移後成為主叢集的叢集上部署 CDC。
- 複製拓撲:已配置的來源至目標關係,例如 cluster-a -> cluster-b。
以下為該拓撲的示意圖。
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 的滯後量。