通过CCR实现跨集群数据复制

更新时间:
复制为 MD 格式

跨集群复制CCR(Cross-Cluster Replication)支持将Leader集群的索引数据近实时复制到Follower集群,实现异地容灾、读写分离和就近访问。本文介绍ES常见容灾方案的对比分析和CCR的工作原理,帮助选择适合的容灾方案。

CCR工作原理

基本架构

CCR采用主动-被动(Active-Passive)架构。Leader集群负责接收所有写操作,Follower集群为只读状态,仅从Leader集群复制数据。

  • Leader集群:源端集群,承担所有写操作。

  • Follower集群:目标端集群,只读状态,通过CCRLeader集群同步数据。

数据复制流程

CCR的数据复制分为两个阶段:

初始化阶段

Follower集群向Leader发起初始化请求,Leader将索引的所有Lucene segment文件传输到Follower索引,类似于快照恢复机制。

增量同步阶段

Follower索引的分片定期(默认每秒)向Leader发起拉取请求,获取自上次同步点之后的最新操作。具体过程如下:

  1. 定位拉取起点:Follower本地维护一个remote_checkpoint,表示已成功应用到本地的最新操作位置,对应Leader Translog(事务日志)中的global_checkpoint

  2. Leader Translog读取操作:Leader根据Follower提供的from_seq_no定位Translog中的起始位置,读取后续所有操作(index、update、delete),返回操作列表。

  3. Follower本地重放:Follower在本地按顺序重放这些操作,更新remote_checkpoint。如果重放失败(如版本冲突),会暂停同步并记录错误。

  4. 持续轮询:Follower以固定间隔持续拉取新操作,通常延迟小于1秒。

Translog的核心作用

Translog(事务日志)是CCR增量同步的数据来源,在ES中承担以下作用:

  • 防止数据丢失:ES默认每秒refresh一次,将内存缓冲区数据生成新的Lucene可搜索段,但这些段尚未同步到磁盘。Translog记录了所有写操作,可在节点崩溃后通过重放恢复数据。

  • 保障副本一致性:写操作先写入Translog,再转发给副本分片。只有主副分片都确认写入后,才返回成功。

  • 支持CCR增量同步:CCR通过ES内部的Translog API读取操作日志,获取指定序列号之后的所有变更,实现近实时数据复制。

Translog按分片隔离存储,每个分片拥有独立的Translog目录,存储路径为indices/{index_uuid}/{shard_id}/translog/。Translog文件(.tlog)以二进制格式存储,采用Generation机制滚动管理:每次flush或文件达到大小上限(默认512MB)时,创建新一代文件。

阿里云ES集群的CCR网络方案

阿里云ES实例部署在独立的管控VPC内,而非用户VPC中。即使两个集群在同一地域或已通过CEN打通跨地域VPC,也无法直接实现集群间的私网互通。需要借助NLBPrivateLink打通管控VPC网络。

根据两个集群是否在同一地域,选择对应的操作文档:

场景

说明

操作文档

同地域

LeaderFollower集群在同一地域,通过NLB+PrivateLink打通管控VPC

同地域ES数据复制

跨地域

LeaderFollower集群在不同地域,需先通过CEN打通用户VPC,再通过NLB+PrivateLink打通管控VPC

跨地域ES数据复制

使用限制

  • 两个集群的管控部署模式均需为云原生新管控(v3)。如果集群为v1v2架构,需先完成架构升级,请参见实例架构升级

    如何识别ES集群架构版本:登录ES控制台,在实例基本信息页面查看管控部署模式云原生新管控(v3)或者基础管控(v2)

  • 两个集群的版本均需为7.10.0及以上,且Follower集群版本不低于Leader集群版本。

  • Leader集群索引的mapping和分片数必须与Follower集群索引一致,Follower集群的分片数不能更改。