ElasticSearch-解决unassigned shareds问题

背景

es版本:6.4

因为一次集群异常,重启es集群后显示unassigned shareds。以下是解决办法

注意:如果网上其他博客的方法执行curl命令总报错的时候,一定要去官网,选择自己的版本,查看cluster reroute的文档。很可能是字段错了!!!

文档链接给大家留在最后的参考文档了,可点进去自行选择版本。

1.获取unassigned shareds信息

curl elasticsearch_ip:9400/_cat/shards > UNASSIGNED.txt

进行筛选用于脚本处理(此命令主要筛选出unassigned状态的分片的index和shard两列)

cat UNASSIGNED.txt | grep UNASSIGNED | awk '{print $1,$2}' | uniq > UNASSIGNED-2.txt

2.使用脚本重新分配主分片路由

由于是6.4版本使用其他博客中的"allocate"都无效。

查阅官网,此版本要使用"allocate_replica"。

但是由于主分片也有问题,所以要使用这个"allocate_stale_primary",将主分片分配给保存过时副本的节点。官网文档说明了,这个要慎用,可能造成数据丢失。还是先尝试"allocate_replica"。

cat /root/UNASSIGNED-2.txt | while read line;do
index_name=`echo $line | awk '{print $1}'`
shard_name=`echo $line | awk '{print $2}'`
curl -H 'Content-type: application/json' -XPOST 'http://172.24.27.124:9400/_cluster/reroute' -d '{
 "commands": [
  {
   "allocate_stale_primary": {
    "index": "'$index_name'",
    "shard": '$shard_name',
    "node": "g83t-f8sRHS88r_mwVn76Q",
    "accept_data_loss": true
   }
  }
 ]
}'
done

index:填写索引名称

shard:填写分片id

node:观察UNASSIGNED.txt文件,看分片不在哪个节点上,就填写哪个节点。

node值查看方式

curl elasticsearch:9400/_nodes/process?pretty

参考文档

Cluster Reroute | Elasticsearch Guide [6.4] | Elastichttps://www.elastic.co/guide/en/elasticsearch/reference/6.4/cluster-reroute.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值