ElasticSearch 开发总结(三)——Unavailable Shards Exception解决思路

今天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?

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值