Elasticsearch 集群核心原理:分片(Shard)分配与管理机制全解
- 一、前言
- 二、基础概念:分片与节点关系
- 2.1 什么是分片(Shard)
- 2.2 谁负责管理分片?
- 三、整体流程:分片分配与管理流程图
- 四、分片分配核心 4 大流程(重点)
- 4.1 流程1:新索引创建时的分片分配
- 4.2 流程2:数据写入时的路由规则
- 4.3 流程3:节点宕机时的故障转移
- 4.4 流程4:新增节点时的自动负载均衡
- 五、分片分配的 6 大核心规则(必须懂)
- 1. 主分片与副本**绝不同节点**
- 2. 分片均匀分布
- 3. 磁盘水位线保护
- 4. 副本分配在不同机架(可选)
- 5. 只分配给数据节点(data: true)
- 6. 均衡分配,避免热点节点
- 六、分片管理的核心组件
- 6.1 Master Node(管理大脑)
- 6.2 Data Node(工作者)
- 6.3 Cluster State(集群状态)
- 七、分片分布示例图(3 节点 + 3 主 1 副本)
- 八、常见问题与原理
- 8.1 为什么集群 yellow?
- 8.2 为什么集群 red?
- 8.3 主分片数量为什么不能改?
- 九、总结(最核心 6 句话)
🌺The Begin🌺点点关注,收藏不迷路🌺 |
一、前言
在 Elasticsearch 分布式集群中,分片(Shard)是数据存储的最小单元,而节点如何自动分配、平衡、故障恢复分片,是 ES 实现高可用、负载均衡、水平扩展的关键。
很多新手不理解:
- 数据到底存在哪个节点?
- 为什么分片会自动移动?
- 主节点挂了怎么办?
- 集群如何保证负载均匀?
本文从原理、流程、算法、角色、流程图、运维规则全方位讲解,让你彻底搞懂 ES 集群分片管理机制。
二、基础概念:分片与节点关系
2.1 什么是分片(Shard)
- 主分片(Primary Shard)
数据写入的真实分片,一个索引会固定分成 N 个主分片。 - 副本分片(Replica Shard)
主分片的备份,用于提高查询能力与高可用。
2.2 谁负责管理分片?
主节点(Master Node)—— 集群的“总指挥”
唯一负责:
- 创建/删除分片
- 决定分片放在哪个节点
- 监控节点健康
- 故障自动转移
- 集群负载均衡
数据节点只负责存储分片、执行查询。
三、整体流程:分片分配与管理流程图
四、分片分配核心 4 大流程(重点)
4.1 流程1:新索引创建时的分片分配
- 你创建索引,指定
3主1副本 - 主节点决定分片位置
- 核心规则:
- 主分片与自己的副本不能在同一个节点
- 分片尽量均匀分布在所有节点
- 最终分布效果:
- 节点1:主0、副本1、副本2
- 节点2:主1、副本0、副本2
- 节点3:主2、副本0、副本1
4.2 流程2:数据写入时的路由规则
数据写入不是随机的,而是固定算法:
目标分片 = hash(document_id) % 主分片数好处:
- 读/写都能精准定位分片
- 性能极高
4.3 流程3:节点宕机时的故障转移
- 节点掉线,主节点立即发现
- 该节点上的主分片立刻失效
- 主节点将对应的副本分片提升为主分片
- 在其他节点上重新创建新副本
- 集群恢复健康(green)
这就是 ES 高可用的核心原理!
4.4 流程4:新增节点时的自动负载均衡
- 新增节点加入集群
- 主节点发现节点空闲
- 自动把部分分片从老节点迁移到新节点
- 最终所有节点分片数量均匀
- 无需人工干预
五、分片分配的 6 大核心规则(必须懂)
1. 主分片与副本绝不同节点
防止节点宕机导致数据完全丢失。
2. 分片均匀分布
所有节点的分片数量基本一致。
3. 磁盘水位线保护
- 低水位:85%
- 高水位:90%
- 停止水位:95%
超过后不再分配分片,防止磁盘爆满。
4. 副本分配在不同机架(可选)
机架感知,防止机架断电。
5. 只分配给数据节点(data: true)
主节点、协调节点默认不存数据。
6. 均衡分配,避免热点节点
主节点通过分片均衡算法自动调整。
六、分片管理的核心组件
6.1 Master Node(管理大脑)
- 维护集群状态
- 决定分片分配
- 故障转移
- 负载均衡
6.2 Data Node(工作者)
- 存储分片
- 执行写入/查询
- 心跳上报状态
6.3 Cluster State(集群状态)
- 记录所有分片位置
- 节点信息
- 索引配置
- 全局一致同步
七、分片分布示例图(3 节点 + 3 主 1 副本)
✅ 最均衡、最安全的分布方式
八、常见问题与原理
8.1 为什么集群 yellow?
副本分片没有分配成功
可能原因:
- 只有1个节点,副本无法分配(同节点禁止)
- 节点不足
- 磁盘满
8.2 为什么集群 red?
主分片未分配,数据不可用
可能原因:
- 节点宕机未恢复
- 数据损坏
8.3 主分片数量为什么不能改?
因为写入路由公式:hash(id) % 主分片数
一旦改变,所有数据路由位置全部失效。
九、总结(最核心 6 句话)
- 主节点负责分片分配与管理,数据节点只负责存储与查询。
- 分片分配遵循:主副不同节点、均匀分布、磁盘安全。
- 写入路由公式:
hash(_id) % 主分片数。 - 节点宕机自动提升副本为主分片,实现高可用。
- 新增节点自动迁移分片,实现负载均衡。
- 分片设计 = 集群性能与高可用的基石。
一句话记住:
主节点管分配,数据节点管存储;主副不同节点,宕机自动恢复!
🌺The End🌺点点关注,收藏不迷路🌺 |