← 返回题目列表

Elasticsearch 集群 health 的 green、yellow、red 分别代表什么?

高频 中等 第 10 / 30 题 更新于 2026/07/29
Elasticsearch集群健康分片运维排查

简化版

green 表示所有主分片和副本分片都已分配;yellow 表示主分片已分配但部分副本未分配,数据可用但冗余不足;red 表示至少有主分片未分配,部分数据不可用。排查要看 unassigned shards、节点状态、磁盘水位、分片分配规则和 allocation explain。

详细版

集群健康状态主要围绕分片分配:

状态含义影响
green主副分片都正常最健康
yellow主分片正常,副本缺失可读写,但高可用下降
red主分片缺失部分索引不可用

常用排查命令包括 _cluster/health_cat/shards_cat/allocation_cluster/allocation/explain。面试要强调:yellow 不等于数据不可用,red 才说明有主分片不可用;但 yellow 长期存在也要处理,因为节点再挂可能丢可用性。

完整版教学

一、health 看的核心是分片分配

Elasticsearch 的索引被拆成 primary shard 和 replica shard。集群 health 并不是笼统说机器好不好,而是看分片是否被正确分配。

index
  primary shard 0
  replica shard 0
  primary shard 1
  replica shard 1

只要主分片可用,数据通常还能读写;副本缺失影响的是冗余和查询分摊。

记忆钩子:green 看主副都齐,yellow 看主在副缺,red 看主缺数据缺。

二、green 是主副分片都已分配

green 表示所有 primary 和 replica shard 都处于 active 状态。它是最理想状态。

{
  "status": "green",
  "active_primary_shards": 10,
  "active_shards": 20,
  "unassigned_shards": 0
}

这意味着副本能提供冗余。即使某个节点故障,集群也更有机会通过副本继续服务。

但 green 不代表性能一定好。慢查询、GC、磁盘高水位、线程池拒绝仍可能存在。health 是可用性指标,不是完整性能诊断。

三、yellow 是主分片在,副本没齐

yellow 最常见原因是单节点集群设置了副本数。比如只有 1 个节点,索引设置 number_of_replicas: 1,副本不能和主分片放在同一节点,所以永远 yellow。

1 node
primary shard -> node1
replica shard -> cannot assign to same node
status -> yellow

解决方式可以是增加节点,或者在开发环境把副本数改成 0。

PUT /my-index/_settings
{
  "number_of_replicas": 0
}

生产环境不能因为想变 green 就随便降副本,要看高可用要求。

四、red 表示至少有主分片不可用

red 是更严重状态,表示至少一个 primary shard 没有分配成功。对应索引的部分数据不可读写。

常见原因包括节点丢失、磁盘损坏、分片分配被禁止、磁盘水位过高、索引损坏、集群恢复失败。

primary shard missing
  -> index partial unavailable
  -> search may fail or return partial
  -> writes to that shard fail

red 时优先恢复主分片,而不是先关心副本。要查清是节点临时离线、磁盘问题,还是没有可用 shard copy。

五、排查 unassigned shard 的固定路径

常用命令:

GET /_cluster/health?pretty
GET /_cat/shards?v
GET /_cat/allocation?v
GET /_cluster/allocation/explain

allocation/explain 会告诉你某个分片为什么不能分配,例如磁盘超过水位、节点属性不匹配、同一分片副本不能放同节点、分配规则禁止等。

排查顺序可以是:

看 health -> 找 unassigned shard -> allocation explain -> 修复原因 -> 等待恢复

这套路径比背一堆可能原因更实用。

六、磁盘水位和分配规则是高频原因

ES 有磁盘水位保护。节点磁盘使用率过高时,集群可能不再往该节点分配分片,甚至迁移分片。

水位含义常见影响
low watermark开始限制新分片分配新分片不进高磁盘节点
high watermark更积极迁移分片搬离高磁盘节点
flood stage写保护索引可能变只读

另一个常见原因是 shard allocation filtering 或 awareness 配置不合理,比如要求分片只能去某类节点,但这类节点不存在。

七、常见误区与追问

  • 误区:yellow 表示数据不可用。 yellow 通常主分片可用,数据仍可读写,但副本缺失导致冗余不足。
  • 误区:green 就代表没有任何问题。 green 只代表分片分配正常,不代表查询性能、GC、磁盘都健康。
  • 误区:red 只要重启集群就行。 red 要定位主分片未分配原因,盲目重启可能扩大恢复时间。
  • 追问:单节点为什么经常 yellow? 副本不能和主分片放同一节点,单节点有副本配置就无法分配副本。
  • 追问:allocation explain 有什么用? 它解释分片无法分配的具体决策原因,是排查 unassigned shard 的关键。
  • 追问:磁盘水位会导致什么问题? 高水位会限制或迁移分片,flood stage 可能让索引进入只读保护。

八、加强记忆

集群 health 记成“主副分片状态灯”。green 是主副都齐,yellow 是主在副缺,red 是主缺导致数据不可用。排查时别靠猜,按 _cluster/health_cat/shardsallocation/explain 走,重点看节点、磁盘水位、分配规则和是否还有可用 shard copy。