🔍 ES 主分片 vs 副本分片:职责解析

写入流程中各自到底在干什么?一张图说清楚

写入数据时,分片之间的协作关系
💻 Client 发送请求
写入
🔀 协调节点 路由计算
转发
🟢 主分片 写 + Translog
同步副本
🟠 副本分片 接收备份
职责对比
🟢
Primary Shard
主分片 · 写入的"唯一真理源"
核心职责
接收所有写入 写入 Translog 写入 Buffer 决定成功/失败
  • 写入数据必须先到主分片,是数据变更的唯一入口
  • 维护 Translog,记录每一条变更,用于崩溃恢复
  • 数据先写 Translog 再写 Buffer,Translog 写成功才算成功
  • 写入完成后,主动推送数据给副本分片同步
  • 主分片挂了?集群自动把某个副本提升为新的主分片
🟠
Replica Shard
副本分片 · 数据的安全备份
核心职责
接收主分片推送 提供读负载均衡 高可用容灾
  • 接收客户端直接写入,只被动接收主分片同步过来的数据
  • 自己没有 Translog,数据是主分片的拷贝,不参与崩溃恢复决策
  • 提供读请求分流:搜索请求可以打到副本,提升并发读能力
  • 主分片宕机时,副本自动晋升为主分片,保证数据不丢
  • 可配置多个副本(number_of_replicas = N),副本越多容灾越强,但写入开销越大
写入时序:主分片和副本分片的交互步骤
💻 Client
1发送写入请求
POST /index/_doc
5收到 200 OK
写入成功
🔀 协调节点
2路由计算
hash(id) % 5
找到目标主分片
5转发响应给 Client
🟢 Primary Shard
3写入主分片
① 写 Translog ✅
② 写 Buffer
两处都成功才算写入成功
4推送数据给副本
并行同步数据
🟠 Replica Shard
4'接收并写入副本
写入 Buffer
(无 Translog)
ACK 响应主分片

🟢 主分片的三个"唯一"

🟠 副本分片的核心价值