🔍 ES 主分片 vs 副本分片:职责解析
写入流程中各自到底在干什么?一张图说清楚
职责对比
核心职责
接收所有写入
写入 Translog
写入 Buffer
决定成功/失败
- 写入数据必须先到主分片,是数据变更的唯一入口
- 维护 Translog,记录每一条变更,用于崩溃恢复
- 数据先写 Translog 再写 Buffer,Translog 写成功才算成功
- 写入完成后,主动推送数据给副本分片同步
- 主分片挂了?集群自动把某个副本提升为新的主分片
核心职责
接收主分片推送
提供读负载均衡
高可用容灾
- 不接收客户端直接写入,只被动接收主分片同步过来的数据
- 自己没有 Translog,数据是主分片的拷贝,不参与崩溃恢复决策
- 提供读请求分流:搜索请求可以打到副本,提升并发读能力
- 主分片宕机时,副本自动晋升为主分片,保证数据不丢
- 可配置多个副本(number_of_replicas = N),副本越多容灾越强,但写入开销越大
写入时序:主分片和副本分片的交互步骤
2路由计算
hash(id) % 5找到目标主分片
3写入主分片
① 写 Translog ✅
② 写 Buffer
两处都成功才算写入成功
4'接收并写入副本
写入 Buffer
(无 Translog)
🟢 主分片的三个"唯一"
- 写入的唯一入口(客户端不能直接写副本)
- Translog 的唯一持有者(崩溃恢复的核心)
- 写入成功的唯一决策者(副本 ACK 才返回客户端)
🟠 副本分片的核心价值
- 读扩展:分担搜索请求,提升并发能力
- 高可用:主分片挂了,副本自动顶上去
- 数据安全:主分片数据丢失时可以从副本恢复