全部產品
Search
文件中心

:通過CCR實現跨叢集資料複製

更新時間:Mar 29, 2026

跨叢集複製CCR(Cross-Cluster Replication)支援將Leader叢集的索引資料近即時複製到Follower叢集,實現異地容災、讀寫分離和就近訪問。本文介紹ES常見容災方案的對比分析和CCR的工作原理,協助選擇適合的容災方案。

方案選型

Elasticsearch(ES)異地容災主要有以下方案:

  • OSS快照備份與恢複:通過將索引資料備份到阿里雲Object Storage Service,實現資料持久化儲存。首次快照為全量備份,後續為增量備份。通過跨叢集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叢集的分區數不能更改。