索引、分片与副本是什么
Elasticsearch 的索引由分片组成:主分片数量在建索引时确定,决定写入并行度与单索引的容量上限;副本是主分片的完整拷贝,数量可以随时调整,既提供高可用又能分担读流量。副本带来额外存储与写入成本,分片数量则直接影响集群元数据与合并压力,两者都需要按容量规划而非拍脑袋设定。
基本信息
| 主分片 | 建索引时确定,之后不能直接改 |
|---|---|
| 副本 | 可动态调整,每副本一份完整拷贝 |
| 分片规模建议 | 单分片按 10-50GB 量级规划 |
| 查看命令 | _cat/indices、_cat/shards |
| 调整副本 | PUT /<index>/_settings |
| 影响面 | 存储、写入成本、查询并行度 |
典型使用场景
- 新索引设计时确定主分片数,避免后期重建索引迁移数据
- 高峰期临时减少副本换取写入性能,低峰再调回
- 用 _cat/shards 查看分片分布是否均衡,排查热点节点
- 容量评估时核对单分片大小,避免出现超大分片拖慢恢复
- 多节点集群通过副本实现节点故障时的数据可用性
- 发现分片数过多导致集群状态更新缓慢时合并索引或调整规划
查看与调整
查看与调整
# 查看索引分片状态
GET /_cat/indices?v&s=store.size:desc
GET /_cat/shards/logs-app?v
# 动态调整副本数(主分片数建索引后不可直接改)
PUT /logs-app/_settings
{ "number_of_replicas": 0 }
# 查看未分配分片的原因
GET /_cluster/allocation/explain概念对照
| 概念 | 是否可改 | 作用与代价 |
|---|---|---|
| 主分片 | 建索引时定 | 决定写入并行度与容量上限 |
| 副本分片 | 可动态调整 | 高可用与读分担,占额外存储 |
| 单分片规模 | 间接控制 | 过大恢复慢,过小碎片多 |
| 分片总数 | 随索引增长 | 过多会推高元数据与合并压力 |
分片数不是越多越好:单分片规模按 10-50GB 量级规划,能兼顾恢复速度与查询效率,避免碎片化与超大分片并存。
改副本数会触发大量数据复制与恢复,应避开写入高峰,并确认集群有足够的磁盘与网络余量。
单节点集群无法分配副本,健康状态长期为黄色属正常;要消除黄色需要在有第二个节点后再开副本。
主分片数只能通过重建索引或 shrink/split 改变,因此新索引的分片规划要在创建时就与容量增长曲线对齐。