集群非green状态都是非健康状态,是需要处理的

集群 red 状态
原因: 表示所有的主分片都未必健康可用,一般是由于某个索引的主分片为 unassigned 状态引起的
处理方法: 找出分片为 unassigned 状态的索引,手工分配即可。

官方文档的详细说明请添加链接描述

通过curl GET http://{ESIP}:9200/_cluster/health?level=indices 找出是哪个索引状态为 red ,如果索引重要则修复,如果不重要则delete掉,方法见下面 “修复 red 或 yellow 方法实践”
Elasticsearch6.4集群报yellow和red状态问题_第1张图片

集群 yellow 状态
原因: 表示所有主分片健康可用,但副片都未必可用,最常见的情景是单节点时,主分片和副本不能在同一个节点上,所以副本就是未分配unassigned
处理方法: 过滤查看所有未分配索引的方式, curl -s "http://localhost:9200/_cat/shards" | grep UNASSIGNED结果,第一列表示索引名,第二列表示分片编号,第三列p是主分片,r是副本

`curl -s "http://{ESIP}:9200/_cat/shards" | grep UNASSIGNED

eslog1 3 p UNASSIGNED
eslog1 3 r UNASSIGNED
eslog1 1 p UNASSIGNED
eslog1 1 r UNASSIGNED`

修复 red 或 yellow 方法实践
知道哪个索引的哪个分片就开始手动修复,通过reroute的allocate分配

curl -XPOST '{ESIP}:9200/_cluster/reroute' -d '{
    "commands" : [ {
          "allocate" : {
              "index" : "eslog1",     --索引名
              "shard" : 4,
              "node" : "es1",           --分配的节点名
              "allow_primary" : true
          }
        }
    ]
}'

分配副本时必须要带参数"allow_primary" : true, 不然会报错
当集群中es版本不同时,如果这个未分配的分片是高版本生成的,不能分配到低版本节点上,反过来低版本的分片可以分配给高版本,如果遇到了,只要升级低版本节点的ES版本即可