首页/数据/NoSQL 速查/_cat/shards 检查分片分布
Elasticsearch89 条

_cat/shards 检查分片分布

_cat/shards 列出每个索引的每个分片状态、所在节点、文档数与存储量;排查未分配分片与分布倾斜时的首站接口。

NoSQL 速查数据更新于 2026-10-13

接口干什么用

_cat/shards 按行列出每个索引的每个分片:状态、所在节点、文档数、磁盘占用,以及未分配时的原因。它是排查「分片卡在 UNASSIGNED」「分布倾斜」「某个分片特别大」的第一站接口,输出是纯文本表格,适合直接看或脚本解析。

基本信息

适用版本Elasticsearch 7.x / 8.x
接口GET /_cat/shards?v 或 /_cat/shards/<index>?v
常用参数h= 选列、s= 排序、state= 过滤
关键列shard、prirep、state、docs、store、node、unassigned.reason
配套接口GET /_cluster/allocation/explain、GET /_cat/allocation?v

典型使用场景

  • 排查未分配分片:过滤 state=unassigned,再顺着 unassigned.reason 找根因
  • 检查分布倾斜:看各分片 docs 与 store 是否均匀落在各节点
  • 定位大分片:store 明显偏大的分片是合并与恢复耗时的源头
  • 滚动重启前后核对:确认分片是否都回到 STARTED
  • 验证副本数变更:改完 number_of_replicas 后看是否多出对应的 r 行

示例

示例
GET /_cat/shards?v&s=state                                   # 按状态排序,异常排前面
GET /_cat/shards/logs-2026.10.01?v&h=index,shard,prirep,state,docs,store,node,unassigned.reason
GET /_cat/shards?v&state=unassigned                          # 只看未分配分片
GET /_cluster/allocation/explain                             # 未分配时查根因(也可指定 index/shard)
GET /_cat/allocation?v                                       # 各节点的分片数与磁盘占用对照

列读法

列含义正常/异常
shard分片编号,从 0 开始编号范围应与主分片数一致
prirepp 表示主分片,r 表示副本统计主分片数时只数 p 行
stateSTARTED / INITIALIZING / RELOCATING / UNASSIGNED长期 UNASSIGNED 或反复 INITIALIZING 即异常
docs该分片内的文档数分片间差距悬殊说明分布不均
store该分片的磁盘占用单分片过大(常见经验值几十 GB 量级)会拖慢恢复
node所在节点名为空表示尚未分配
unassigned.reason未分配原因,如 NODE_LEFT、ALLOCATION_FAILED定位是节点缺失、分配失败还是磁盘水位触发
state 的四种状态含义不同:STARTED 正常服务、INITIALIZING 正在恢复、RELOCATING 正在迁移、UNASSIGNED 尚未分配。看到 INITIALIZING 长时间不动,通常是大分片恢复或磁盘受限。
单节点集群里副本永远是 UNASSIGNED,因为找不到第二个节点放副本,这是预期行为;结合 unassigned.reason 就能和真正的故障区分开。
输出很长时用 h 参数只取需要的列,用 s 参数排序,既能减少人工阅读负担,也能让脚本解析更稳(列顺序固定后无需按位置硬编码)。

易错点

  • 统计索引的分片总数时把副本行也算进去,得到的分片数是实际主分片的倍数 → 只看 prirep=p
  • 以为 state 是 STARTED 就健康,其实副本所在节点磁盘吃紧时状态仍可能显示 STARTED
  • 单节点集群看到副本 UNASSIGNED 就当故障处理,实际是没有其他节点可放
  • 分片间 docs 差异大就断言是故障,自定义 routing 或热点索引本来就会倾斜 → 结合路由方式与查询模式判断
  • 拿 store 的数值当原始数据体积,store 里还包含索引结构、段与副本开销

数据来源与参考

  • Elasticsearch Guide: cat shards API
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌