3. 跨集群搜索基础:什么是跨集群搜索(CCS),适用场景与基本工作流

3.1 什么是跨集群搜索(CCS)

跨集群搜索(Cross-Cluster Search, CCS)是一种分布式查询技术,允许用户通过一个统一的入口(协调节点或网关)同时向多个物理或逻辑上隔离的 Elasticsearch / OpenSearch 集群发起搜索请求,并将各集群返回的结果合并、排序、聚合后返回给客户端。对用户而言,CCS 屏蔽了底层集群的分布细节,呈现为一个“逻辑大集群”。

核心思想:查询不移动数据,只移动查询请求与结果摘要。每个集群独立执行搜索,仅将命中文档的元信息(ID、得分、排序字段)返回给协调层,由协调层完成全局合并。

3.2 适用场景

场景 说明 典型示例
地理隔离部署 数据中心分布在多个地域,数据不跨域复制,但需要全局搜索 跨国电商搜索:美东集群存北美商品,欧西集群存欧洲商品,用户一次搜索看到全球库存
多租户隔离 每个租户拥有独立集群,但平台需要提供跨租户的全局搜索能力 SaaS 日志平台:不同客户集群独立运维,管理员跨集群检索所有租户的异常日志
冷热数据分离 热数据集群(SSD)与冷数据集群(HDD/对象存储)分开,查询需同时覆盖 时序监控系统:近 7 天数据在热集群,历史数据在冷集群,CCS 实现“全量时间范围”搜索
业务单元独立运维 不同业务线拥有独立集群和索引策略,但需要统一搜索入口 企业内部文档搜索:HR、财务、研发各自管理集群,员工通过统一门户搜索所有文档
迁移与滚动升级 新旧集群并存期间,通过 CCS 实现双写双查,平滑过渡 集群版本升级:旧集群 v6.8 与新集群 v7.17 同时在线,CCS 保证搜索不中断

3.3 基本工作流

CCS 的查询执行过程分为五个阶段,下图展示了从客户端发起请求到最终结果返回的完整链路:

跨集群搜索(CCS)基本工作流 ① 客户端发起查询 ② 协调节点解析目标集群与索引 ③ 并行分发查询到各远程集群 集群 A 本地执行查询 集群 B 本地执行查询 集群 C 本地执行查询 ④ 协调节点合并、排序、聚合 ⑤ 返回最终结果

3.4 工作流详细步骤

  1. 客户端发起查询:用户通过 REST API 或 SDK 向协调集群(或专用网关)发送搜索请求,请求中指定目标索引模式(如 logs-*)或显式列出远程集群别名。
  2. 解析目标集群与索引:协调节点根据集群注册信息(cluster.remote 配置或种子节点列表)将索引模式映射到具体的远程集群。例如 logs-us:* 映射到美国集群,logs-eu:* 映射到欧洲集群。
  3. 并行分发查询:协调节点将原始查询请求(Query DSL)并行发送到每个匹配的远程集群。每个远程集群独立执行查询,包括分片路由、倒排索引检索、本地排序与聚合。
  4. 结果合并与排序:各远程集群返回命中文档的 _id、_score、排序字段值及聚合桶结果。协调节点执行全局归并排序(Merge Sort),重新计算 Top N 文档,并合并聚合结果。
  5. 返回最终结果:协调节点将合并后的结果集(文档元信息 + 聚合数据)返回给客户端。客户端如需完整文档内容,可发起 mget 或二次查询从各集群拉取详情。

3.5 关键设计要点

设计维度 说明 注意事项
网络开销 CCS 仅传输元数据(ID、得分、排序字段),而非完整文档 若排序字段过多或聚合桶过大,网络带宽仍可能成为瓶颈
一致性模型 每个集群独立维护近实时(NRT)视图,CCS 不保证跨集群的全局一致性 同一秒内写入集群 A 的数据可能无法立即被 CCS 查询到
超时与容错 协调节点可设置每个远程集群的查询超时,部分集群失败不影响整体结果 需配置 skip_unavailable 参数,避免单集群故障阻塞整个查询
安全与认证 远程集群之间需建立互信 TLS 连接,通常使用证书或 API Key 避免在公网暴露集群端口,建议使用 VPN 或专线
实践建议:在跨地域 CCS 场景中,优先将协调节点部署在离用户最近的区域,并启用 ccs_minimize_roundtrips 优化(Elasticsearch 7.x+),减少跨集群的往返次数。

3.6 CCS 与联邦查询的边界

CCS 是联邦查询(Federated Query)的一种具体实现形式,但两者存在细微差异:

  • CCS 通常指同构系统(如 Elasticsearch ↔ Elasticsearch)之间的搜索,共享相同的查询 DSL 和数据模型。
  • 联邦查询 更广义,可跨越异构数据源(如 Elasticsearch + MySQL + S3),需要额外的适配层进行查询转换与结果归一化。