Milvus CDC

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

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

架构

典型的拓扑结构包括

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

支持的拓扑

最常见的 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 示例。

限制

Milvus CDC 目前有以下限制:

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

常见问题

备用群集能否提供查询服务?

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

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

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

切换会丢失数据吗?

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

故障切换会丢失数据吗?

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

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

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