全部产品
Search
文档中心

检索分析服务Elasticsearch版:通过CCR实现跨集群数据复制

更新时间:Mar 28, 2026

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

方案选型

Elasticsearch(ES)异地容灾主要有以下方案:

  • OSS快照备份与恢复:通过将索引数据备份到阿里云对象存储OSS,实现数据持久化保存。首次快照为全量备份,后续为增量备份。通过跨集群OSS仓库,可将快照数据恢复到目标ES实例。详情请参见设置跨集群OSS仓库

  • Logstash:通过配置管道(Pipeline),从源端ES集群读取数据,经过处理后写入目标集群。适用于版本跨度较大的数据迁移和需要数据过滤转换的场景。详情请参见快速入门

  • Reindex:通过ES内置的Reindex API,将全量或符合条件的数据从一个索引复制到另一个索引,支持跨集群操作。适用于数据量较小的一次性迁移场景。详情请参见通过Reindex API迁移数据

  • 跨集群复制(CCR):将Leader集群的可写索引,以异步、增量的方式自动复制到一个或多个Follower集群。支持近实时同步,适用于对RPO和RTO要求较高的容灾场景。

方案对比

方案

适用场景

RPO

RTO

主要限制

OSS快照

大规模数据(GB~PB级别)的定期备份与恢复

小时级到天级(取决于快照间隔)

数小时(取决于数据量和分片恢复时间)

无法实现持续同步;恢复期间可能需要停止服务

Logstash

对实时性要求不高的数据迁移;需要数据过滤转换的场景;版本跨度较大的迁移

秒级到分钟级(取决于同步频率)

数小时(取决于数据量和实例性能)

批量同步,无法实时;不支持同步delete操作

Reindex

数据量较小的一次性索引迁移

不适用(一次性操作)

分钟级到数小时(取决于数据量)

无法持续同步;大规模数据迁移效率低

CCR

异地容灾、读写分离、就近访问

近零(秒级)

秒级到分钟级

Follower索引只读;需要相同的mapping和分片数

对于RPO和实时性要求高的异地容灾场景,CCR是最佳选择:

  • CCR实现秒级数据同步,数据丢失最小化。

  • 主集群故障时,业务流量切换到Follower集群即可恢复服务,无需等待快照恢复。

  • 虽然初始部署成本较高,但长期来看避免了数据丢失导致的业务损失,性价比更高。

CCR工作原理

基本架构

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

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

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

数据复制流程

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,也无法直接实现集群间的私网互通。需要借助NLB和PrivateLink打通管控VPC网络。

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

场景

说明

操作文档

同地域

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

同地域ES数据复制

跨地域

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

跨地域ES数据复制

使用限制

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

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

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

  • Follower索引为只读状态,不支持写入操作。如需写入,需对目标索引执行以下操作,恢复索引的可读写状态:

    1. 暂停跟随任务:POST /<index>/_ccr/pause_follow

    2. 关闭索引:POST /<index>/_close

    3. 解除跟随关系:POST /<index>/_ccr/unfollow

    4. 重新打开索引,使其可读写:POST /<index>/_open

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