news 2026/4/21 18:14:01

Elasticsearch 集群核心原理:分片(Shard)分配与管理机制全解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Elasticsearch 集群核心原理:分片(Shard)分配与管理机制全解

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)

  1. 主分片(Primary Shard)
    数据写入的真实分片,一个索引会固定分成 N 个主分片。
  2. 副本分片(Replica Shard)
    主分片的备份,用于提高查询能力与高可用。

2.2 谁负责管理分片?

主节点(Master Node)—— 集群的“总指挥”
唯一负责:

  • 创建/删除分片
  • 决定分片放在哪个节点
  • 监控节点健康
  • 故障自动转移
  • 集群负载均衡

数据节点只负责存储分片、执行查询


三、整体流程:分片分配与管理流程图

创建索引/新增节点/节点宕机

主节点触发分片管理

计算分片应该分配到哪些节点

遵循:同分片不放在同一节点

遵循:分片均匀分布

遵循:磁盘水位线/权重规则

开始分配主分片

分配副本分片到不同节点

完成分配,集群变绿

持续平衡负载


四、分片分配核心 4 大流程(重点)

4.1 流程1:新索引创建时的分片分配

  1. 你创建索引,指定3主1副本
  2. 主节点决定分片位置
  3. 核心规则
    • 主分片与自己的副本不能在同一个节点
    • 分片尽量均匀分布在所有节点
  4. 最终分布效果:
    • 节点1:主0、副本1、副本2
    • 节点2:主1、副本0、副本2
    • 节点3:主2、副本0、副本1

4.2 流程2:数据写入时的路由规则

数据写入不是随机的,而是固定算法:

目标分片 = hash(document_id) % 主分片数

好处:

  • 读/写都能精准定位分片
  • 性能极高

4.3 流程3:节点宕机时的故障转移

  1. 节点掉线,主节点立即发现
  2. 该节点上的主分片立刻失效
  3. 主节点将对应的副本分片提升为主分片
  4. 在其他节点上重新创建新副本
  5. 集群恢复健康(green)

这就是 ES 高可用的核心原理!

4.4 流程4:新增节点时的自动负载均衡

  1. 新增节点加入集群
  2. 主节点发现节点空闲
  3. 自动把部分分片从老节点迁移到新节点
  4. 最终所有节点分片数量均匀
  5. 无需人工干预

五、分片分配的 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 副本)

节点3

主分片2

节点2

主分片1

副本分片0

节点1

主分片0

副本分片1

副本分片2

✅ 最均衡、最安全的分布方式


八、常见问题与原理

8.1 为什么集群 yellow?

副本分片没有分配成功
可能原因:

  • 只有1个节点,副本无法分配(同节点禁止)
  • 节点不足
  • 磁盘满

8.2 为什么集群 red?

主分片未分配,数据不可用
可能原因:

  • 节点宕机未恢复
  • 数据损坏

8.3 主分片数量为什么不能改?

因为写入路由公式:
hash(id) % 主分片数
一旦改变,所有数据路由位置全部失效。


九、总结(最核心 6 句话)

  1. 主节点负责分片分配与管理,数据节点只负责存储与查询。
  2. 分片分配遵循:主副不同节点、均匀分布、磁盘安全
  3. 写入路由公式:hash(_id) % 主分片数
  4. 节点宕机自动提升副本为主分片,实现高可用。
  5. 新增节点自动迁移分片,实现负载均衡。
  6. 分片设计 = 集群性能与高可用的基石。

一句话记住:
主节点管分配,数据节点管存储;主副不同节点,宕机自动恢复!



🌺The End🌺点点关注,收藏不迷路🌺
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 18:03:25

K-means聚类实战:用Python给鸢尾花(Iris)数据集自动分个类

K-means聚类实战:用Python给鸢尾花(Iris)数据集自动分个类 鸢尾花数据集是机器学习领域的经典入门案例,包含150个样本,每个样本有4个特征(萼片长度、萼片宽度、花瓣长度、花瓣宽度)和对应的品种标签。我们将使用K-mean…

作者头像 李华
网站建设 2026/4/21 17:58:51

STM32 ADC实战:土壤湿度传感器数据采集与校准全解析

1. 土壤湿度传感器与STM32 ADC基础认知 第一次接触土壤湿度传感器时,我把它插进花盆里,发现数值乱跳得像心电图。后来才明白,这背后是模拟信号到数字世界的奇妙旅程。常见的三线制传感器(VCC、GND、AO)工作时&#xf…

作者头像 李华