ES-模型-分片与副本设计

定位:系统搞懂 Primary/Replica、分片数量如何规划、以及这些决策对性能与稳定性的长期影响。本页是索引与集群设计的基础必修课。

大纲

  1. Shard 基本概念:Primary / Replica
  2. 分片在读写流程中的作用
  3. 分片数量如何规划(经验法则与反例)
  4. 副本数量如何设置与常见策略
  5. 小分片过多 / 大分片过肥 的典型问题
  6. 与索引生命周期、时间分区的关系
  7. 与后续「集群架构」「性能优化」章节的关联

Todo 要点(查漏补缺清单)

1. Shard 基本概念

  • 定义:
    • Primary Shard:索引数据的主分片,负责写入。
    • Replica Shard:主分片的副本,提供冗余和读扩展。
  • 说明:
    • 一个索引由 N 个 primary shard + R 个 replica 组成。
    • 分片是 ES 水平扩展的最小单元。

2. 读写流程中的作用

  • 写入流程:
    • 写操作先到 Primary,再同步到 Replica。
    • 与 refresh/flush/acknowledged 设置的关系。
  • 查询流程:
    • 读请求可以在 Primary 和 Replica 上分摊。
    • 通过副本增加读吞吐、提高可用性。
  • Todo:
    • 用简单图或伪代码描述「client → coord node → shard → merge」流程。

3. 分片数量规划

  • 原则:在创建索引时就要慎重,后期调整成本高(需要 reindex)。
  • 影响因素:
    • 预计总数据量(TB / 年)。
    • 单个分片推荐大小(如 10~50GB 作为经验区间,根据版本和硬件微调)。
    • 集群节点数量与扩容计划。
  • 常见经验:
    • 不要为小数据量索引设置太多分片(如几 GB 数据却 10+ 分片)。
    • 对于时间分区索引,按天/周/月权衡分片大小。
  • Todo:
    • 写出「以 1TB 日志为例」的分片数量规划演算过程。

4. 副本数量策略

  • 说明:
    • 副本数至少为 1 可防单点,生产集群推荐。
    • 增加副本数可以提高读取能力,但会增加存储与写入成本。
  • 场景:
    • 开发/测试环境可设为 0 副本以节省资源(仅限非关键场景)。
    • 生产环境根据节点数和可用区部署,一般配置 1-2 副本。
  • Todo:
    • 给出「3 节点集群,1 副本」和「多 AZ 部署」的示意与原因说明。

5. 小分片过多 / 大分片过肥 问题

  • 小分片过多:
    • 每个分片都有内存和文件句柄开销。
    • 集群状态变大,协调成本上升。
    • 查询需要 fan-out 到大量分片,延迟飙升。
  • 分片过大:
    • Recovery 和 Rebalance 成本高。
    • 单分片热度过高,负载不均。
  • Todo:
    • 总结几条「反模式警告」作为 checklist,写在页尾以便上线前自查。

6. 与索引生命周期和时间分区的关系

  • 说明:
    • 对于日志/时序数据,常用「按时间分索引」+ ILM 策略。
    • 分片数量要结合索引生命周期(active → warm → cold → delete)设计。
  • Todo:

7. 与后续章节的关联