原文网址:ElasticSearch--排查集群健康状态是Red、Yellow的问题_IT利刃出鞘的博客-CSDN博客
说明
本文介绍ElasticSearch的红色、黄色、绿色状态的含义以及如何将其变为绿色(恢复正常)。
相关网址
ElasticSearch--查看健康状态(health)的方法(API)_IT利刃出鞘的博客-CSDN博客
在一个网络/云的环境里,失败随时都可能发生,在某个分片/节点不知怎么的就处于离线状态,或者由于某种原因消失了,这种情况下,有一个故障转移机制非常有用,并且也是强烈
推荐的。为此,Elasticsearch允许你创建分片的一份或多份拷贝,这些拷贝叫作复制分片,或者直接叫副本。
副本之所以重要,有以下两个主要原因:
总之,每个索引可以被分成多个分片。一个索引可以有一至多个副本。一旦有了副本,每个索引就有了主分片(作为复制源的原来的分片)和副本分片(主分片的拷贝)之别。分片和副本的数量可以在索引创建的时候指定。在索引创建之后,可以在任何时候动态地改变副本的数量,但是事后不能改变分片的数量。
| 颜色 | 含义 | 影响 |
| 绿色 | 所有的主分片和副本分片都可用。 | 这是最健康的状态。 |
| 黄色 | 所有的主分片可用,但至少一个副本分片不可用。 | 数据都是可用的。 搜索性能下降;数据有丢失风险。 |
| 红色 | 至少一个主分片不可用。 | 一些数据以及索引的某些部分不可用。 部分数据仍然可以查到。 |
下边这些会导致unassigned,但过一会儿一般能自动恢复正常。
法1:命令行方式
GET _cluster/health?filter_path=status,*_shards
结果:

法2:可视化方式
head 插件可视化

法3:Kibana

方法
GET _cat/shards?v=true&h=index,shard,prirep,state,node,unassigned.reason&s=state
几个参数解释如下:
结果

如上截图代表:order_info、test_data等索引包含未分配的副本分片,这点和集群健康状态“黄色”一致。
上面的返回结果:unassigned.reason 已经基本包含了未分配的原因。但想得到更为详细的解释,需要使用如下的命令。
- GET _cluster/allocation/explain?filter_path=index,node_allocation_decisions.node_name,node_allocation_decisions.deciders.*
- {
- "index": "order_info",
- "shard": 0,
- "primary": false
- }
结果

Explanation 就是根本原因。
本质原因就是:只有一个节点,但是设置了副本,导致了主分片可以分片正常,副本分片无法分配。进而导致:集群健康状态是黄色。
也可以在Head插件和Kinana查看节点数量

