分配概览看什么
_cat/allocation 是 Elasticsearch 的 cat 系列接口之一,按节点逐行输出该节点承载的分片数量与磁盘指标,包括索引自身占用(disk.indices)、整盘已用、可用、总量与使用率。分片是 ES 存放数据的最小单位,一个分片只能落在某个节点上,所以「哪个节点分片最多、哪块盘最紧」是容量排查的起点,这个接口不需要写 DSL 就能给出答案。
基本信息
| 接口 | GET /_cat/allocation?v |
|---|---|
| 适用版本 | Elasticsearch 7.x / 8.x(cat 接口自 5.x 起稳定) |
| 权限要求 | monitor 及以上,只读操作不影响集群 |
| 常用参数 | ?v 显示表头、?h= 只取指定列、?s= 排序、?format=json 便于脚本采集 |
| 数据来源 | 集群状态中的分片分配结果 + 各节点磁盘统计 |
典型使用场景
- 磁盘水位巡检:一眼看出哪个节点的 disk.percent 逼近 85% 低水位线
- 判断分片分布是否均匀:节点间分片数差异过大说明分配被磁盘或节点标签限制
- 排查未分配分片:确认是磁盘不足、还是节点下线导致无法分配
- 扩容决策:根据 disk.avail 与日均增量估算现有磁盘还能撑多久
- 定位混部隐患:同一集群里混用不同规格磁盘时,小盘节点往往最先被写满
常用取数与解读
常用取数与解读
GET /_cat/allocation?v&s=disk.percent:desc # 按使用率降序,先看最紧张的节点
GET /_cat/allocation?v&h=node,shards,disk.used,disk.avail,disk.percent # 只看关键列
GET /_cat/allocation/nodename?v # 只看某个节点的分配明细
GET /_cat/allocation?format=json # 交给监控脚本采集
GET /_cluster/settings?include_defaults=true # 确认水位线阈值是否被改过输出逐列读法
| 列 | 含义 | 正常 / 异常 |
|---|---|---|
| shards | 该节点承载的分片总数(含副本) | 节点间差异大说明分配不均衡 |
| disk.indices | ES 索引数据自身占用的空间 | 与 disk.used 的差值来自快照、日志和其他进程 |
| disk.used | 整块磁盘已用空间 | 涨幅异常时先排查非 ES 进程 |
| disk.avail | 剩余可用空间 | 低于总量 15% 即触发低水位,不再接收新分片 |
| disk.percent | 整盘使用率百分比 | 85% / 90% / 95% 三档水位线是最关键的阈值 |
| node | 节点名;未分配分片所在行显示 UNASSIGNED | 出现 UNASSIGNED 行说明有分片没有落盘 |
三个默认水位线都基于整盘使用率:低水位 85% 起不再向该节点分配新分片,高水位 90% 起尝试把分片迁走,洪水水位 95% 会把该节点上的索引置为只读。节点磁盘规格不统一时,同样的百分比对小盘节点意味着更少的余量。