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 的查询执行过程分为五个阶段,下图展示了从客户端发起请求到最终结果返回的完整链路:
3.4 工作流详细步骤
- 客户端发起查询:用户通过 REST API 或 SDK 向协调集群(或专用网关)发送搜索请求,请求中指定目标索引模式(如
logs-*)或显式列出远程集群别名。 - 解析目标集群与索引:协调节点根据集群注册信息(
cluster.remote配置或种子节点列表)将索引模式映射到具体的远程集群。例如logs-us:*映射到美国集群,logs-eu:*映射到欧洲集群。 - 并行分发查询:协调节点将原始查询请求(Query DSL)并行发送到每个匹配的远程集群。每个远程集群独立执行查询,包括分片路由、倒排索引检索、本地排序与聚合。
- 结果合并与排序:各远程集群返回命中文档的
_id、_score、排序字段值及聚合桶结果。协调节点执行全局归并排序(Merge Sort),重新计算 Top N 文档,并合并聚合结果。 - 返回最终结果:协调节点将合并后的结果集(文档元信息 + 聚合数据)返回给客户端。客户端如需完整文档内容,可发起
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),需要额外的适配层进行查询转换与结果归一化。