Elasticsearch核心原理:分片(Shard)详解与集群核心作用
Elasticsearch核心原理:分片(Shard)详解与集群核心作用
- 一、前言
- 二、Elasticsearch 分片(Shard):基础定义
- 2.1 什么是分片?
- 2.2 官方核心定位
- 2.3 分片的两大类型
- 三、Elasticsearch 分片:架构流程图
- 3.1 分片分布式架构图
- 3.2 数据写入与查询流程图
- 3.3 流程解读
- 四、Elasticsearch 分片:在集群中的 6 大核心作用
- 4.1 作用一:突破单节点物理存储限制(核心)
- 4.2 作用二:提升并发查询与写入性能
- 4.3 作用三:实现分布式集群架构
- 4.4 作用四:支撑高可用与故障转移
- 4.5 作用五:提高集群稳定性与负载均衡
- 4.6 作用六:支持海量数据快速检索
- 五、Elasticsearch 分片:关键规则与特性
- 5.1 核心特性(必须掌握)
- 5.2 默认配置
- 六、Elasticsearch 分片:实战操作命令
- 6.1 查看集群所有分片状态
- 6.2 创建索引时指定分片数量
- 6.3 动态修改副本分片数量
- 6.4 查看索引分片配置
- 七、生产环境分片最佳实践
- 7.1 分片数量计算公式
- 7.2 不同集群规模配置建议
- 7.3 严禁出现的问题
- 八、主分片 vs 副本分片:核心区别
- 九、总结:分片的核心价值
- 十、文末总结
- 总结
🌺The Begin🌺点点关注,收藏不迷路🌺 |
一、前言
在 Elasticsearch 分布式架构中,分片(Shard)是最核心、最基础的物理单元,没有分片就没有 ES 的海量存储、水平扩展、高并发、高可用。
很多新手对分片一知半解,导致生产集群出现数据过大、查询缓慢、分片不合理、集群崩溃等问题。
本文将从分片定义、分类、工作原理、架构流程图、核心作用、生产最佳实践全方位讲解,帮你彻底掌握 ES 分片机制,搭建高效稳定的集群。
二、Elasticsearch 分片(Shard):基础定义
2.1 什么是分片?
分片是 Elasticsearch 底层Lucene 实例的独立运行单元,本质是:
把一个大索引的数据,均匀拆分到多个小的、独立的、可分布的物理数据块,这些数据块就叫分片。
简单理解:
- 一个大索引 = 多个分片组成
- 分片是 ES最小的数据管理单位
- 分片可分布在集群的不同节点上
2.2 官方核心定位
分片是 Elasticsearch实现分布式存储与并行计算的基石。
2.3 分片的两大类型
Elasticsearch 只有两种分片:
- 主分片(Primary Shard)
- 负责数据写入
- 索引创建时固定,后期无法修改
- 副本分片(Replica Shard)
- 主分片的数据备份
- 负责查询、容灾
- 可动态修改数量
注意:副本分片是为高可用服务,不属于数据拆分。
三、Elasticsearch 分片:架构流程图
3.1 分片分布式架构图
3.2 数据写入与查询流程图
3.3 流程解读
- 写入流程
- 数据通过路由算法找到对应主分片
- 主分片写入成功后同步到副本
- 分布式存储完成
- 查询流程
- 查询发给所有分片
- 多分片并行执行
- 协调节点合并结果并返回
四、Elasticsearch 分片:在集群中的 6 大核心作用
4.1 作用一:突破单节点物理存储限制(核心)
- 单节点磁盘空间有限
- 分片可将数据分散到多台服务器
- 让 ES 支持TB/PB 级海量数据存储
- 实现水平扩展存储
4.2 作用二:提升并发查询与写入性能
- 多分片 = 多线程并行处理
- 写入:分散到不同主分片
- 查询:主分片 + 副本分片同时执行
- 性能随节点数线性提升
4.3 作用三:实现分布式集群架构
- 分片让 ES 真正具备分布式能力
- 数据不依赖单节点
- 节点可自由扩容、缩容
4.4 作用四:支撑高可用与故障转移
- 主分片 + 副本分片分布在不同节点
- 某个节点宕机
- 其他节点上的副本自动提升为主分片
- 服务不中断、数据不丢失
4.5 作用五:提高集群稳定性与负载均衡
- 数据均匀分布,避免节点存储不均
- 读写压力分散,不会出现单点瓶颈
- 集群长期稳定运行
4.6 作用六:支持海量数据快速检索
- 每个分片是独立 Lucene 索引
- 大数据量下,分片越多,查询越快
- 天然支持分布式聚合、统计、排序
五、Elasticsearch 分片:关键规则与特性
5.1 核心特性(必须掌握)
- 主分片数量一旦固定,永久不能修改
- 只能通过 reindex 重建索引
- 副本分片数量可随时动态修改
- 无需停机、无需重建
- 一个分片默认推荐大小 30GB~50GB
- 过大:查询缓慢
- 过小:分片过多,消耗资源
- 主分片与副本不能在同一个节点
- 防止节点宕机导致数据同时丢失
- 副本数量不能超过节点数-1
- 否则无法分配,集群变黄
5.2 默认配置
- 索引默认:1 个主分片
- 索引默认:1 个副本分片
六、Elasticsearch 分片:实战操作命令
6.1 查看集群所有分片状态
GET /_cat/shards?v关键字段:index、shard、prirep(主/副)、state、node、disk空间
6.2 创建索引时指定分片数量
PUT /my_index { "settings": { "number_of_shards": 3, // 主分片:3个(固定不可改) "number_of_replicas": 1 // 副本:1个(可改) } }6.3 动态修改副本分片数量
PUT /my_index/_settings { "number_of_replicas": 2 }6.4 查看索引分片配置
GET /my_index/_settings七、生产环境分片最佳实践
7.1 分片数量计算公式
推荐主分片数量 = 预估数据总大小 / 40GB(推荐单分片大小)
例:
预估 200GB 数据 → 200/40 =5 个主分片
7.2 不同集群规模配置建议
- 单节点测试环境
- 主分片:1
- 副本:0
- 3 节点生产集群
- 主分片:3~6
- 副本:1~2
- 大规模高并发集群
- 主分片:根据数据量计算
- 副本:2(不建议超过 3)
7.3 严禁出现的问题
- 超大分片:>100GB(查询极慢)
- 分片过多:单节点 > 30 个(消耗大量内存)
- 单节点设置副本(集群永远 yellow)
八、主分片 vs 副本分片:核心区别
| 对比项 | 主分片 Primary | 副本分片 Replica |
|---|---|---|
| 数据写入 | 支持 | 不支持 |
| 数据查询 | 支持 | 支持 |
| 数量修改 | 不可修改 | 可动态修改 |
| 故障影响 | 宕机则副本升级 | 宕机无影响 |
| 核心作用 | 数据存储、写入 | 备份、查询、容灾 |
九、总结:分片的核心价值
- 分布式存储:突破单节点存储上限
- 性能倍增:并行读写,高并发支撑
- 高可用保障:故障转移,不丢数据
- 集群基石:ES 所有能力依赖分片实现
十、文末总结
Elasticsearch分片是整个分布式系统的灵魂。
理解分片 = 理解 ES 核心原理。
- 分片解决海量数据存储
- 分片解决高并发读写
- 分片解决集群高可用
合理规划分片数量,是搭建高效、稳定、可扩展ES 生产集群的第一步。
总结
- 分片定义:索引拆分后的最小物理数据单元,基于 Lucene 实现
- 两类分片:主分片(写入)、副本分片(备份+查询)
- 核心作用:分布式存储、提升性能、高可用、负载均衡、水平扩展
- 关键规则:主分片不可改,副本可动态改,主副不同节点
- 生产最佳实践:单分片 30~50GB,按数据量计算主分片数
🌺The End🌺点点关注,收藏不迷路🌺 |
