单集群搜索架构回顾:索引分片、副本、查询路由与协调节点原理

在深入跨集群搜索之前,必须牢固掌握单集群内部的搜索执行路径。单集群架构是所有分布式搜索系统的基石,其核心组件包括索引分片、副本、查询路由与协调节点。理解这些要素如何协同工作,是后续理解联邦查询与跨集群搜索的前提。

3.1 索引分片:水平拆分的原子单元

索引(Index)是逻辑上的数据容器,而分片(Shard)是物理存储与计算的基本单元。每个分片本质上是一个完整的 Lucene 索引实例,负责存储索引数据的一个子集。

核心原则:分片数量在索引创建时确定,后续无法修改(除重建索引外)。分片过多或过少都会影响性能——过少导致单分片负载过高,过多则增加协调开销。
分片属性 说明 推荐范围
主分片(Primary Shard) 数据写入的目标,每个分片有且仅有一个主分片 按节点数 × 2~3 倍估算
副本分片(Replica Shard) 主分片的完整拷贝,提供读服务与容错 1~2 个副本(生产环境至少 1)
分片大小 单个分片存储的数据量 20GB~50GB(建议不超过 100GB)

3.2 副本:高可用与读扩展

副本分片是主分片的精确复制品。副本的存在解决了两个关键问题:

  • 高可用性:当主分片所在节点宕机时,副本分片会被提升为新的主分片,保证数据不丢失且服务不中断。
  • 读扩展:查询请求可以分发到主分片或任意副本分片上执行,从而线性提升集群的查询吞吐能力。
实践建议:副本数量并非越多越好。每增加一个副本,写入时需要同步的数据量就增加一份,写入延迟会相应上升。对于读多写少的搜索场景,副本数可设为 2~3;对于写入密集场景,副本数建议不超过 2。

3.3 查询路由与协调节点:请求的指挥中枢

当客户端发起一个搜索请求时,请求首先到达集群中的任意一个节点——该节点自动成为本次请求的协调节点(Coordinating Node)。协调节点负责执行完整的查询生命周期:

  1. 解析与分发:解析查询 DSL,确定需要查询哪些索引及对应的分片列表。
  2. 扇出(Fan-out):将查询请求并行发送到目标分片(主分片或副本分片)所在的节点。
  3. 本地执行:每个数据节点上的分片独立执行查询,返回匹配的文档 ID 及评分。
  4. 结果归并:协调节点收集所有分片的返回结果,进行全局排序、聚合、分页等操作。
  5. 返回响应:将最终结果组装后返回给客户端。
单集群查询路由与协调节点执行流程 客户端 协调节点(Coordinating Node) 解析 → 扇出 → 归并 → 返回 数据节点 1 主分片 P0 副本分片 R1 本地执行查询 数据节点 2 主分片 P1 副本分片 R0 本地执行查询 数据节点 3 主分片 P2 副本分片 R2 本地执行查询 协调节点归并阶段 全局排序 · 聚合计算 · 分页截断 最终响应返回客户端 协调节点可以是任意节点 不一定是专用节点

3.4 分片选择策略:查询路由的核心算法

协调节点在决定将查询发送到哪个分片时,遵循特定的选择策略:

  • 自适应副本选择(ARS):优先选择响应时间最短、队列深度最浅的副本分片,实现负载均衡。
  • 轮询(Round-Robin):在同等优先级的副本之间轮流分发请求。
  • 偏好本地分片:如果协调节点本身也是数据节点,优先查询本地的分片副本,减少网络开销。
常见误区:很多人认为查询请求只会发送到主分片。实际上,协调节点会随机或按策略选择主分片或任意副本分片来执行查询。这意味着副本分片越多,单个分片承担的查询压力越小,但协调节点需要维护的路由表也越大。

3.5 两阶段查询:Scatter / Gather 模型

单集群搜索采用经典的Scatter / Gather(分散/收集)两阶段模型:

阶段 执行者 操作 网络传输量
Phase 1: Scatter 协调节点 → 数据节点 分发查询请求(DSL + 参数) 小(KB 级别)
Phase 2: Gather 数据节点 → 协调节点 返回匹配文档的 ID、评分、排序字段 中(取决于匹配数)
Phase 2b: Fetch(可选) 协调节点 → 数据节点 根据文档 ID 拉取完整文档内容 大(取决于文档大小)

这种模型的关键优势在于:数据本地性——每个分片只处理自己持有的数据子集,计算任务被均匀分散到所有节点上,协调节点只负责轻量级的元数据操作与结果归并。

Scatter / Gather 两阶段查询模型 协调节点 Phase 1: Scatter 数据节点 1 数据节点 2 数据节点 3 Phase 2: Gather 归并排序 + 返回结果 Fetch 阶段仅在需要完整文档时触发

3.6 关键性能指标与瓶颈分析

理解单集群搜索架构后,需要关注以下性能指标,它们也是后续跨集群搜索优化的核心参考:

  • 协调节点 CPU 使用率:结果归并、全局排序是 CPU 密集型操作,高并发场景下协调节点可能成为瓶颈。
  • 网络带宽:Gather 阶段的数据传输量直接受限于网络带宽,尤其是当查询返回大量文档 ID 或需要 Fetch 阶段时。
  • 分片数量与查询延迟:分片越多,协调节点需要等待的并行查询结果越多,最慢的分片(长尾延迟)决定了整体查询延迟。
  • 副本利用率:如果副本分片未被充分利用,说明查询路由策略或节点负载均衡需要优化。