Milvus CDC
Milvus CDC(变更数据捕获)可将数据变更从一个 Milvus 集群复制到另一个。您可以使用 CDC 为 Milvus 构建主备灾难恢复拓扑。
在主备拓扑中,一个群集作为主群集并接受写入。一个或多个备用群集持续接收来自主群集的更改,并可提供读取流量。当主群集不可用或需要维护时,可将服务流量切换到备用群集。
架构
典型的拓扑结构包括
- 主群集:复制的源群集。它接受读取和写入。
- 备用群集:复制的目标群集。它接收主群集的更改,并在保持备用群集时只读。
- CDC 节点:从当前主集群向备用集群转发 WAL 更改的 Milvus 组件。在切换或故障切换后可能成为主集群的每个集群上部署 CDC。
- 复制拓扑:配置的源到目标关系,如群集-a -> 群集-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 示例。
限制
Milvus CDC 目前有以下限制:
- 只支持单主拓扑。
- 它不支持主动-主动或多主写入。
- 备用集群可以为读取流量提供服务,但在备用期间拒绝直接写入。
- 故障切换可能会丢失已写入旧主集群但尚未复制到备用集群的数据。
- 配置的
pchannels必须与每个群集的实际通道布局相匹配。
常见问题
备用群集能否提供查询服务?
可以。备用群集可以提供读取流量。在成为主集群之前,它不能接受写入。
Milvus CDC 是否支持主动-主动写入?
不支持。Milvus CDC 是为单主拓扑设计的。同时向多个集群写入会导致大脑分裂和数据分流。
切换会丢失数据吗?
不会。切换等待剩余数据复制完毕后,备用数据才会成为主数据。
故障切换会丢失数据吗?
会。任何写入旧主设备但尚未复制到备用设备的数据都可能丢失。
故障切换期间会丢失多少数据?
潜在的数据丢失会受到主备不可用时 CDC 滞后的限制。