您的位置:首页 > 其它

处理Elasticsearch集群yellow和red状态

2017-12-01 16:00 260 查看

原文出处:http://www.jwsblog.com/archives/59.html

red

原因

red表示不是所有的主分片都可用,通常时由于某个索引的住分片为分片unassigned,只要找出这个索引的分片,手工分配即可

处理

官方文档的详细说明

通过
curl GET http://{ESIP}:9200/_cluster/health?level=indices[/code]查看所有索引信息,查看下是哪个索引的status是red导致了集群都red了(集群索引多的时候一眼看不出来,直接把结果拷出来,搜red关键字就跟踪到索引和分片了) 
如果这个索引不是很重要,直接delete掉省事,集群状态马上恢复green完事~

通过reroute强制分配该分片(文章后面)

yellow

原因

yellow表示所有主分片可用,但不是所有副本分片都可用,最常见的情景是单节点时,由于es默认是有1个副本,主分片和副本不能在同一个节点上,所以副本就是未分配unassigned

处理

过滤查看所有未分配索引的方式,
curl -s "http://10.19.22.142: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

分配分片

知道哪个索引的哪个分片就开始手动修复,通过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版本即可(博主注:es的版本号要全部一致,小版本之间也会出现此兼容性问题,[b]比如2.4.4和2.4.6,并且升级es要谨慎,也是一个大坑)[/b]

(升级ES版本详见官方详细文档,我是ubuntu系统apt安装的,直接
apt-get install elasticsearch
升级的,
elasticsearch.yml
配置文件没变不用修改,但是
/usr/share/elasticsearch/bin/elasticsearch
文件中有个内存配置
ES_HEAP_SIZE=6G
需要再手动加一下&重启es)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  es elasticsearch yellow