集群健康与红色分片是什么
集群健康用三种颜色表示分片分配状态:绿色表示主分片与副本都已分配,黄色表示副本未分配(数据可读写但无冗余),红色表示主分片未分配(部分数据不可用)。红色是真正需要立刻处理的级别,正确做法是先查未分配原因再决定处置,而不是急着重启节点。
基本信息
| 绿色 | 主分片与副本均已分配 |
|---|---|
| 黄色 | 副本未分配,缺冗余 |
| 红色 | 主分片未分配,数据不可用 |
| 诊断接口 | _cluster/health、_cat/shards、_cluster/allocation/explain |
| 常见原因 | 磁盘水位、分配规则、节点离线 |
| 处置顺序 | 先看原因,再动手,慎重启 |
典型使用场景
- 巡检发现红色后定位是哪个索引的哪个分片未分配
- 黄灯时判断是单节点集群的正常现象还是真缺冗余
- 磁盘水位触发分片分配失败时按提示清理或扩容
- 节点下线后确认分片是否已重新分配完成
- 用分配解释接口查清原因,避免盲目重启造成二次震荡
- 升级部署前核对健康状态,确认基线正常
诊断命令
诊断命令
# 集群与索引级健康
GET /_cluster/health?level=indices
# 分片状态与未分配原因
GET /_cat/shards?v&h=index,shard,prirep,state,unassigned.reason
# 让 ES 解释为什么分片未分配
GET /_cluster/allocation/explain
{ "index": "logs-app", "shard": 0, "primary": true }状态对照
| 颜色 | 含义 | 处置优先级 |
|---|---|---|
| green | 全部正常 | 无需处置 |
| yellow | 副本未分配 | 单节点集群属正常,多节点需排查 |
| red | 主分片未分配 | 优先恢复,数据不可用 |
| unassigned.reason | 未分配原因 | 按原因选择处置方式 |
黄常见于单节点集群(无法分配副本);红意味着有数据暂不可用,优先恢复主分片,处置前先看分配解释的输出。
用分配解释看清原因(磁盘水位、分配规则、节点离线)再动手:直接重启会触发新一轮分片恢复,可能让问题扩大。
磁盘水位相关的分配限制通常有多个阈值,临时清理或扩容后分片才会自动分配,必要时可临时放宽限制但要尽快恢复。
恢复期间集群负载会明显上升,避免同时做强制合并、大批量写入等重操作。