今天ElasticSearch集群出现UnavailableShardsException错误,经过查找及总结,Mark一下个人排查方案
第一步:查看集群是否处于健康状态
1.elasticsearch 集群的健康状态用三种颜色red yellow green表示
green:表示集群处于健康状态;
yellow:表示所有主分片可用,但不是所有副本分片都可用;
red:表示不是所有的主分片都可用,通常时由于某个索引的住分片为分片unassigned
2.查看方式
(1)用elasticsearch-head插件可以直接查看
(2)使用curl命令查看
curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty'
127.0.0.1:9200是默认的ip及端口号(分别替换为集群的ip及端口号)
第二步:查看节点是否处于正常状态
(1)用elasticsearch-head插件可以直接查看
(2)使用curl命令查看
curl -XGET '127.0.0.1:9200/_cat/nodes?v&pretty'
可以看到如下异常信息
index shard prirep state docs store ip node
india 2 p UNASSIGNED
india 2 r UNASSIGNED
india 0 p UNASSIGNED
india 0 r UNASSIGNED
india 3 p UNASSIGNED
india 3 r UNASSIGNED
india 1 p UNASSIGNED
india 1 r UNASSIGNED
india 4 p UNASSIGNED
india 4 r UNASSIGNED
mytest 4 p UNASSIGNED
mytest 4 r UNASSIGNED
mytest 0 p STARTED 0 115b <my ip> node2
mytest 0 r UNASSIGNED
mytest 3 p STARTED 1 2.6kb <my ip> node2
mytest 3 r UNASSIGNED
mytest 1 p STARTED 0 115b <my ip> node2
mytest 1 r UNASSIGNED
mytest 2 p STARTED 0 115b <my ip> node2
mytest 2 r UNASSIGNED
第三步:根据异常信息分别判断处理
ElasticSearch 单节点启动,出现“UnavailableShardsException When Creating Index With Settings”错误!
Exception detail: org.elasticsearch.action.UnavailableShardsException: [india][4] Primary shard is not active or isn't assigned is a known node. Timeout: [1m], request: index {[x][y][1], source[{"message":"a",}]}
此时集群处于黄色状态,极有可能是副本分片不可用
(1)若集群是单节点状态,ElasticSearch默认是有1个副本,主分片和副本不能在同一个节点上,副本就是未分配unassigned因此单节点是不能够分配副本的;
(2)集群是多个节点,由于其他原因其中部分节点脱离集群,主节点暂时延迟分片重新分配;
此时看到的错误应该是:delaying allocation for [54] unassigned shards, next check in [1m]
(3)集群中,其他的节点加入造成节点未分配;
第四步:解决办法
集群是单节点状态
(1)用ElasticSearch-head插件
1.新建索引,副本数设置为0;
2.删除旧索引,让集群重新分配
警告:此时索引数据会丢失
(2)curl命令
1.设置副本数为0;
PUT enter_index_name_here/_settings
{
“index” : {
“number_of_replicas” : 0
}
}
2.强制让集群重新分配;
POST /_cluster/reroute
{
“commands”: [{
“allocate”: {
“index”: “put_index_name_here“,
“shard”: 0,
“node”: “put_datanode_name_here”,
“allow_primary”: 1
}
}]
}
(2)多节点情况
通过重启(重启、重装、重装系统三大法宝,哈哈)集群,一般可以解决
参考:It’s RED!!! How do I recover unassigned elasticsearch cluster shards?