Elasticsearch CCR 跨集群复制是什么?Follower Index 和 Leader Index 怎么理解?
简化版
CCR 是 Cross-Cluster Replication,用来把一个集群中的 leader index 复制到另一个集群的 follower index。它适合异地容灾、跨地域读扩展和数据分发,但不是替代普通副本的同集群机制。
详细版
普通 replica shard 在同一个集群内提供高可用和读扩展;CCR 面向跨集群复制。Follower index 从 leader index 拉取变更并跟随写入。
- Leader index 接收主写入,Follower index 复制 leader 的操作。
- 常用于跨机房灾备、就近查询、数据中心迁移。
- 复制是异步的,存在延迟,不能当作强同步双写。
- Follower 通常不直接接收业务写入,否则会破坏复制语义。
- 要监控复制延迟、失败、网络和权限配置。
完整版教学
一、为什么普通 replica 不能解决跨集群容灾
ES 的普通副本 shard 属于同一个集群,由集群统一调度和选主。它适合一套集群内的节点故障,但如果整个机房或集群不可用,普通 replica 也可能一起受影响。CCR 的目标是把数据复制到另一个独立 ES 集群,让另一个地域或机房拥有可查询的数据副本。它解决的是跨集群层面的容灾和分发问题,不是普通副本的替代品。
同集群 replica:
Cluster A: primary + replica
CCR:
Cluster A leader index ---> Cluster B follower index
记忆钩子:Replica 是同城备份,CCR 更像异地跟随;一个在集群内,一个跨集群。
二、Leader 和 Follower 的角色
Leader index 是源索引,接收业务写入;Follower index 在远端集群中跟随 leader 的操作日志,把变更复制过来。Follower 的核心动作是拉取 leader 上已经发生的操作,然后在本地重放。这个模型决定了业务通常不要直接写 follower,否则会和复制状态冲突。需要切换灾备时,也要有明确的提升和写入切换流程。
PUT /follower-index/_ccr/follow
{
"remote_cluster": "cluster-a",
"leader_index": "leader-index"
}
三、CCR 是异步复制,延迟必须接受和监控
CCR 不是每次写入都等远端确认后才返回,它通常是异步跟随。因此 leader 上写入成功后,follower 可能晚几十毫秒、几秒甚至更久才看到数据,具体取决于网络、写入压力和远端处理能力。这个延迟对于容灾和就近查询通常可以接受,但不适合强一致读写。面试里要明确说“跨集群复制通常不是强同步双活”。
| 场景 | CCR 是否适合 | 原因 |
|---|---|---|
| 异地灾备 | 适合 | 远端保留数据副本 |
| 就近只读查询 | 适合 | 降低跨地域读延迟 |
| 强一致双写 | 不适合 | 异步复制有延迟 |
| 同集群节点故障 | 普通 replica 更直接 | 调度在集群内完成 |
四、带数字理解 RPO 和复制延迟
假设 leader 每秒写入 5000 条文档,网络抖动导致 follower 落后 10 秒,那么远端大约少了 50000 条最新文档。如果这时主集群灾难不可恢复,业务可能损失这 10 秒窗口内的数据,这就是容灾里的 RPO 风险。CCR 能降低跨集群恢复成本,但不能让异步复制没有数据窗口。
5000 docs/s × 10s lag = 50000 docs 落后窗口
RPO 不是 0,必须结合业务可接受范围设计
五、CCR 和跨集群搜索的区别
跨集群搜索 CCS 是在查询时访问远端集群,不复制数据;CCR 是把数据复制到本地集群后查询。CCS 的优点是不用存两份数据,缺点是查询依赖远端可用性和网络;CCR 的优点是本地有副本,适合容灾和就近读,缺点是多一份存储和复制成本。二者经常被一起提问,要把“查远端”和“复制到本地”分清。
CCS: Query -> Remote Cluster
CCR: Remote Data -> Local Follower -> Query Local
六、生产落地要关注哪些指标
CCR 要关注 follower 是否正常、复制延迟、失败重试、远端连接、权限、leader 索引生命周期和 follower 存储空间。如果 leader 索引 rollover,follower 侧也要有跟随策略,否则只跟了一个老索引。跨地域网络还会影响吞吐和延迟,不能只在低流量测试环境验证。灾备方案还要定期演练切换,不演练的容灾常常只是心理安慰。
监控重点:
follower lag、failed reads、remote connection、storage、rollover follow 状态
七、常见误区与追问
- 误区:CCR 和 replica 是一回事。 Replica 在同集群,CCR 跨集群,目标和调度模型不同。
- 误区:CCR 可以实现零延迟双活写。 CCR 通常异步复制,follower 不应随意接收同一数据的业务写入。
- 误区:有了 CCR 就不用演练灾备。 切换流程、权限、别名和应用连接都需要演练。
- 追问:CCR 和 CCS 区别是什么? CCR 复制数据到本地,CCS 是查询时访问远端。
- 追问:如何评估灾备损失窗口? 看复制延迟和写入速率,估算 RPO 窗口内可能未复制的数据量。
八、加强记忆
CCR 记成“远端集群跟读主集群日志”。Leader 负责写,Follower 负责跟;它适合异地容灾和就近读,不适合强一致双活写。回答时用 replica、CCS、CCR 三者对比,再补复制延迟和 RPO 数字,面试官通常就知道你不是只背名词。