跳到主要内容
版本:v3.0.x

Milvus CDC

Milvus CDC(变更数据捕获)可将数据变更从一个 Milvus 集群复制到另一个。您可以使用 CDC 为 Milvus 构建主备灾难恢复拓扑。

在主备拓扑中,一个集群作为主集群并接受写入。一个或多个备用集群持续接收来自主集群的更改,并可提供读取流量。当主集群不可用或需要维护时,可将服务流量切换到备用集群。

架构

典型的拓扑结构包括

  • 主集群:复制的源集群。它接受读取和写入。
  • 备用集群:复制的目标集群。它接收主集群的更改,并在保持备用集群时只读。
  • CDC 节点:从当前主集群向备用集群转发 WAL 更改的 Milvus 组件。在切换或故障切换后可能成为主集群的每个集群上部署 CDC。
  • 复制拓扑:配置的源到目标关系,如集群-a -> 集群-b。以下是拓扑示意图。 CDC workflow

支持的拓扑

最常见的 CDC 部署是一主一备:

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

Milvus CDC 也支持单主多备拓扑结构:

Text
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 示例。

Bulk Import in CDC Replication

在 CDC replication topology 中,Bulk Import 必须使用 two-phase commit (2PC) 模式,并设置 auto_commit=false。仅在 primary cluster 上运行 import 和 commit,并确保 primary cluster 和 standby cluster 都可以访问 import files。详情请参阅 Bulk Import in CDC Replication

限制

Milvus CDC 目前有以下限制:

  • 只支持 单主 拓扑。
  • 支持主动-主动或多主写入。
  • 备用集群可以为读取流量提供服务,但在备用期间拒绝直接写入。
  • 故障切换可能会丢失已写入旧主集群但尚未复制到备用集群的数据。
  • 配置的 pchannels 必须与每个集群的实际通道布局相匹配。

常见问题

备用集群可以提供查询服务吗?

可以。备用集群可以提供读取流量。在成为主集群之前,它不能接受写入。

Milvus CDC 是否支持主动-主动写入?

不支持。Milvus CDC 是为单主拓扑设计的。同时向多个集群写入会导致大脑分裂和数据分流。

切换会丢失数据吗?

不会。切换等待剩余数据复制完毕后,备用数据才会成为主数据。

故障切换会丢失数据吗?

会。任何写入旧主设备但尚未复制到备用设备的数据都可能丢失。

故障切换期间会丢失多少数据?

潜在的数据丢失会受到主备不可用时 CDC 滞后的限制。