Elasticsearch6.4集群报yellow和red状态问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch6.4集群报yellow和red状态问题相关的知识,希望对你有一定的参考价值。
集群非green状态都是非健康状态,是需要处理的
集群 red 状态
原因: 表示所有的主分片都未必健康可用,一般是由于某个索引的主分片为 unassigned 状态引起的
处理方法: 找出分片为 unassigned 状态的索引,手工分配即可。
通过curl GET http://{ESIP}:9200/_cluster/health?level=indices 找出是哪个索引状态为 red ,如果索引重要则修复,如果不重要则delete掉,方法见下面 “修复 red 或 yellow 方法实践”
集群 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版本即可
以上是关于Elasticsearch6.4集群报yellow和red状态问题的主要内容,如果未能解决你的问题,请参考以下文章
ELKdocker6.Elasticsearch 集群启动多节点 + 解决ES节点集群状态为yellow