解决elasticsearch分片unassigned的3个方法

在一次es集群崩溃重启之后,有分片出现了UNASSIGNED状态,我发现一直没有总结过这个问题的解决方法,以下是我所了解的解决方法,望补充,或指明问题

1.查找UNASSIGNED分片

命令:

GET /_cat/shards

在返回结果中查看状态为UNASSIGNED的分片

 

2.加载UNASSIGNED分片

 

使用reroute解决

对UNASSIGNED的分片执行以下命令:

POST /_cluster/reroute
{
   "commands": [
      {
         "allocate_replica": {
            "index": "cache",
            "shard": 1,
            "node": "cluster1"
         }
      }
   ]
}

若副本分片没有问题即可成功

记一个reroute报错

 

然后根据提示执行

POST /_cluster/reroute?retry_failed=true

等了一会,看到分片依旧还是UNASSIGNED...

细看,发现主备分片的数据量都不同了,这种情况下备份分片自然是起不来了

 

 

修改number_of_replicas 数量

将索引的副本分片数量改为0,那么elasticsearch会自动删掉副本分片

PUT /cache/_settings

{

     "number_of_replicas": "0"

}

执行 GET /_cat/shards,查看cache索引是否还有UNASSIGNED状态的分片,没有的话,再执行

PUT /cache/_settings

{

     "number_of_replicas": "1"

}

es会生成备份分片,并进行而分配

 

使用reindex解决

执行以下命令,做一个cache索引的备份

POST /_reindex
{
   "source": {
      "index": "cache"
   },
   "dest": {
      "index": "cache.bak",
      "version_type": "external"
   }
}

新生成的cache.bak索引的分片情况正常

删除原有索引

DELETE /cache

 

然后可以选择对cache.bak进行reindex,重新生成一个cache索引,并删除cache.bak

POST /_reindex
{
   "source": {
      "index": "cache.bak"
   },
   "dest": {
      "index": "cache",
      "version_type": "external"
   }
}

DElETE /cache.bak

 

或者给cache.bak设置一个别名,让它可以当做cache索引被操作

PUT cache.bak/_alias/cache

 

以上的3个就是我所了解的解决UNASSIGNED的方法.

如果所使用的es集群使用了snapshot仓库,也可以先备份索引,后删除,再restore一下.

 

 

 

 

 

 

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值