4. 跨集群复制(CCR)与CCS的区别与联系:主动-被动复制 vs 实时联邦查询

在Elasticsearch多集群架构中,跨集群复制(CCR,Cross-Cluster Replication)与跨集群搜索(CCS,Cross-Cluster Search)是解决数据分布与访问问题的两种核心机制。虽然它们都涉及多个集群之间的数据交互,但在设计目标、数据流向、一致性模型和适用场景上存在本质差异。本章将从架构原理、核心区别、联系与选型策略三个维度进行深度剖析。

核心认知:CCR是数据层的主动-被动复制,保证数据在集群间最终一致;CCS是查询层的实时联邦聚合,不复制数据,只转发查询请求并合并结果。

4.1 跨集群复制(CCR):主动-被动复制

CCR基于Elasticsearch的主从复制模型,在远程集群(Leader)和本地集群(Follower)之间建立单向数据同步通道。Leader集群负责写入,Follower集群被动接收并应用来自Leader的变更操作(如索引、更新、删除)。

4.1.1 核心架构与流程

  • Leader索引:位于远程集群,接受所有写请求,产生操作日志(Translog)。
  • Follower索引:位于本地集群,通过CCR插件从Leader拉取操作日志并重放到本地分片。
  • 同步机制:基于拉取(Pull)模式,Follower定期轮询Leader的Translog偏移量,获取增量变更。
  • 一致性:最终一致性,存在秒级至分钟级的复制延迟(取决于网络、负载和索引速率)。
适用场景:异地容灾、数据中心级故障转移、就近读取(将数据复制到离用户更近的集群)、合规性数据隔离(主集群写,只读副本用于分析)。

4.1.2 CCR关键参数

参数 默认值 说明
ccr.max_read_request_operation_count 5120 单次拉取请求最大操作数,影响同步吞吐
ccr.indices.recovery.max_bytes_per_sec 40mb 初始同步与恢复时的带宽限制
ccr.following_index_buffer_size 512mb Follower索引的写入缓冲区大小,影响写入性能
ccr.poll_timeout 1m Follower轮询Leader的最大等待时间

4.2 跨集群搜索(CCS):实时联邦查询

CCS是一种查询层联邦技术,允许在本地集群(查询协调节点)上发起搜索请求,自动将请求分发到一个或多个远程集群,然后合并各集群返回的结果,最终返回给客户端。CCS不复制任何数据,远程集群的索引数据始终保持在原始位置。

4.2.1 核心架构与流程

  • 查询协调节点:本地集群中的节点,负责解析远程集群别名、分发查询子请求、合并结果。
  • 远程集群:通过cluster.remote配置注册,每个远程集群有一个逻辑名称(如cluster_a)。
  • 查询执行:协调节点将查询请求发送到远程集群的所有相关分片,远程集群独立执行查询并返回结果片段。
  • 结果合并:协调节点对来自多个集群的命中结果(Hits)进行全局排序、聚合计算,然后返回给客户端。
性能风险:CCS的查询延迟取决于最慢的远程集群。如果某个远程集群响应缓慢或不可用,整个查询可能超时或失败。建议使用ccs_minimize_roundtrips参数优化网络往返次数。

4.2.2 CCS关键参数

参数 默认值 说明
search.ccs.minimize_roundtrips true 是否最小化协调节点与远程集群的网络往返
cluster.remote.connect true 是否允许本地集群连接到远程集群
cluster.remote.connections_per_cluster 3 每个远程集群的TCP连接数
cluster.remote.node.attr — 通过节点属性过滤远程集群中的网关节点

4.3 CCR与CCS的核心区别

下表从多个维度对比两种机制的本质差异:

对比维度 CCR(跨集群复制) CCS(跨集群搜索)
数据流向 Leader → Follower(单向复制) 查询请求 → 远程集群 → 结果返回(无数据移动)
数据冗余 是,数据在Follower集群存在完整副本 否,数据仅存储在原始集群
写入能力 仅Leader可写,Follower只读 所有集群独立写入,查询时联邦读取
一致性模型 最终一致性(复制延迟) 读写分离,查询时读取各集群最新已提交数据
查询延迟 低(本地查询Follower副本) 较高(依赖网络和远程集群响应)
网络开销 持续后台复制流量 按需查询流量
故障隔离 Follower集群可独立提供服务 远程集群故障导致查询失败或部分结果
典型场景 灾备、数据本地化、读写分离 多集群统一搜索、跨地域数据聚合

4.4 CCR与CCS的联系与协同

尽管CCR和CCS在架构上不同,但在实际生产环境中,它们经常组合使用以构建高可用、低延迟的全球分布式搜索系统。例如:

  • CCR提供数据冗余:将核心索引从主数据中心复制到多个边缘集群,确保数据在本地可用。
  • CCS提供全局视图:在边缘集群上使用CCS查询所有远程集群(包括主集群和其他边缘集群),实现跨地域的实时搜索。
  • 读写分离模式:主集群通过CCR将数据推送到只读副本集群,查询流量全部路由到副本集群,主集群专注于写入;副本集群之间通过CCS实现联邦查询。
最佳实践:对于延迟敏感的查询,优先使用CCR将数据复制到本地集群;对于数据新鲜度要求高且数据量较小的场景,使用CCS直接查询远程集群。两者结合可实现“本地读取+全局搜索”的混合架构。

4.5 架构对比示意图

下图展示了CCR与CCS在数据流和查询流上的核心差异:

CCR与CCS架构对比 CCR(主动-被动复制) vs CCS(实时联邦查询) CCR 架构 Leader 集群 (可写) Follower 集群 (只读副本) 复制 写请求 → Leader 读请求 → Follower 数据单向复制,最终一致 Follower可独立提供查询服务 适用于灾备、数据本地化 CCS 架构 本地集群 (查询协调) 远程集群 (数据源) 查询 结果 联邦查询请求 不复制数据,按需查询 结果合并后返回客户端 适用于多集群统一搜索

4.6 选型决策矩阵

在实际架构设计中,可根据以下条件选择CCR、CCS或两者组合:

业务需求 推荐方案 理由
需要低延迟本地查询 CCR 数据在本地集群有副本,查询无需跨网络
需要实时查看所有集群最新数据 CCS 直接查询远程集群,无复制延迟
主集群故障切换需求 CCR + 手动/自动切换 Follower集群可提升为Leader,继续提供服务
跨地域数据聚合搜索 CCS 无需复制所有数据,节省存储和带宽
写密集型+读密集型分离 CCR(写主读从) 主集群专注写入,副本集群处理查询
多数据中心统一视图 CCS + 部分CCR 核心数据通过CCR复制,边缘数据通过CCS查询

4.7 组合架构示例

下图展示了一个典型的混合架构:主数据中心通过CCR将数据复制到两个边缘数据中心,同时边缘数据中心之间通过CCS实现联邦查询,提供全局搜索能力。

CCR + CCS 组合架构 CCR + CCS 混合架构:灾备 + 联邦查询 主数据中心 Leader 集群(可写) 边缘数据中心 A Follower 集群(只读) 边缘数据中心 B Follower 集群(只读) CCR 复制 CCR 复制 CCS 联邦查询 客户端 查询 查询 说明 主集群写入,CCR复制到边缘 边缘集群通过CCS互相查询
架构要点:在此组合架构中,边缘数据中心通过CCR获得主集群的数据副本,保证本地查询的低延迟;同时通过CCS查询其他边缘数据中心的数据,实现全局搜索。主集群故障时,可将某个边缘集群提升为新的Leader,保证业务连续性。