背景:管理过数百个集群,使用方式千变万化,出现过各种各样的shards分配不了的情况,趁此假期做一些unassigned处理方案的总结;

先总结一下:所有的unassigned都可以通过explain API查到原因和处理方案

GET /_cluster/allocation/explain
{"index":"index_name","shard":0,"primary":false
}

先找到所有的unassigned分片:

curl -XGET localhost:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason| grep UNASSIGNED

出现unassigned的主要原因:

  • nodes 数小于分片副本数

  • 节点失联(node_left)

  • node_permission设置不合理

  • rebalance过程中的yellow(一般不需要处理,只需要查清楚rebalance的原因)

  • 磁盘空间不足(空间不足只能扩容或者删除旧的index,下面不做详细介绍)

  • 节点暂时出现问题,等几分钟后又好了,这时候retry 5 次已经结束了,unassigned的分片已经不能分配了(此时可以通过retry API 进行重试,概率较小,直接贴出解决方案,下面不详细介绍了)

数据不重要可以delete:

如果数据不重要,可以直接delete index;

或者将副本数设置为0,再设置回原配置(yellow的情况)

修改副本分片API:PUT movie/_settings
{"index" : {"number_of_replicas" : 1}
}删除index API:delete index_name

设置不合理处理方案:

1.node数小于副本分片数

直接修改副本分片数API:PUT movie/_settings
{"index" : {"number_of_replicas" : 1}
}如果发现是有某些节点被exclude导致节点不够,在确认node正常后,可以将exclude去掉:PUT _cluster/settings
{"transient" : {"cluster.routing.allocation.exclude._ip" : null}
}

2.设置索引在节点上最多容纳的分片不合理:

可增大这个参数:PUT /index_name/_settings
{"index.routing.allocation.total_shards_per_node":"3"
}

这个参数设置不合理可能会造成如下bug:

暂时没有正常的解决方案:retry也不会生效,只能改大total_shards_per_node参数,原因是es的allocation是通过分配器和17个决策器(责任链模式)进行分配的,只要节点符合决策条件就会分配,如上图的情况,只要前五个节点符合所有决策器条件就会直接分配,等轮到第6个shard开始分配的时候,发现不符合条件了,前五个shard也不会去重新分配,就只能让第6个shard变成unassigned状态了;

补充retry API:防止修改配置不生效POST /_cluster/reroute?retry_failed=true

如果由于故障(异常)导致的分配不了的解决方案:

1.首先是解决故障,比如看到日志发现是分词器找不到导致不能正常运行,那么首先将分词器装好,然后再解决unassigned的问题,正常情况ES会自动分配,但是由于出现故障,导致分配分片的5次(默认)重试机会用完了,所以不会再自动分配,所以需要在故障解决完成之后进行retry;

POST /_cluster/reroute?retry_failed=true

处理节点离开集群后主分片不能分配的问题

节点离开再回来这种问题不是很好处理,可能性很多,一般的解决方案如下:

1.尝试进行retry

POST /_cluster/reroute?retry_failed=true

2.如果是自己操作的,设置延迟allocation时间较大,则不需要处理,等待allocation副本分配即可,或者减小延迟时间

注:延迟分配是为了防止节点掉出去后立刻进行副本分片分配,比如node1掉出去了,shard马上开始重新分配,30s后node1又回来了,于是发现node1上的shard无效了,于是干掉node1上的shard,然后又重新分配一次,这样大大的消耗了性能

修改延迟分配的时间API:PUT  */_settings
{"settings": {"index": {"unassigned": {"node_left": {"delayed_timeout": "1m"}}}}}

3.手动分配分片

如果到了需要手动分配这一步,说明故障时间比较长,或者故障节点过多,如果是red,那么这时候数据丢失已经无法避免了;

red情况下手动分配主分配操作流程:

1.先查询未分配的主分片原来是在哪个节点上GET /order_orderlist/_shard_stores2.将主分片分配(只丢失部分数据)POST _cluster/reroute
{"commands": [{"allocate_stale_primary": {"index": "index_name","shard": 4,"node": "node1","accept_data_loss" : true}}]
}3.如果数据不重要,可以不用放到原来的节点上,直接新建一个空分片替代POST _cluster/reroute
{"commands": [{"allocate_empty_primary": {"index": "test_11","shard": 2,"node": "node0","accept_data_loss" : true}}]
}

yellow情况下手动分配副本分片操作:

POST /_cluster/reroute
{ "commands" :[{ "allocate_replica" : { "index" : "index_name", "shard" : 0, "node": "node1"}}]}

补充:不是所有的unassigned都是不正常的,集群启动、扩容的时候就会有短暂的yellow,甚至Shard allocation过程由于延迟机制的设置,也会出现正常的yellow情况(当然这种也是不正常的,只是不是shard的不正常,而是集群层面的不正常,比如压力过大等情况)

ES 的 unassigned shards 核心处理方案相关推荐

  1. es大量unassigned shards

    原文地址:http://www.wklken.me/posts/2015/05/23/elasticsearch-issues.html 今天惯例看统计报表, 才发现es集群悲剧了......昨天下午 ...

  2. es unassigned shards 解决

    服务器宕机后,es出现unassigned shards,使用reroute 命令提示 shard has exceeded the maximum number of retries,即使加上 re ...

  3. [unassigned_shards]Fix issue: elasticsearch unassigned shards

    今天遇到了一个elasticsearch相关的坑[unassigned shards],蹚完了,记录一下(详细的解释在中下方,耐心看完). 1.先确保elasticsearch(后简称es)处于启动状 ...

  4. Elasticsearch unassigned shards的解决之道

    出现这种提示,说明你的集群状态是亚健康的,status是yellow,至少有一个副本分片没有成功创建,集群是能正常工作的,只是有丢失数据的风险. 一,问题定位 解决思路,首先查清楚问题所在,es提供一 ...

  5. How to resolve unassigned shards in Elasticsearch——写得非常好

    How to resolve unassigned shards in Elasticsearch 转自:https://www.datadoghq.com/blog/elasticsearch-un ...

  6. ES shard unassigned的解决方法汇总

    ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...

  7. Reroute Unassigned Shards——遇到主shard 出现的解决方法就是重新路由

    Red Cluster! 摘自:http://blog.kiyanpro.com/2016/03/06/elasticsearch/reroute-unassigned-shards/ There a ...

  8. Recovering unassigned shards on elasticsearch 2.x——副本shard可以设置replica为0在设置回来...

    Recovering unassigned shards on elasticsearch 2.x 摘自:https://z0z0.me/recovering-unassigned-shards-on ...

  9. ElasticSearch学习系列(一)关于ES数据库的和核心倒排索引的介绍

    关于ES数据库的和核心倒排索引的介绍 一.Elasticsearch概述 简介 关于全文检索引擎 关系型数据库的全文检索功能缺点 全文检索的应用场景 Elasticsearch 应用案例 二.Elas ...

最新文章

  1. GNN教程:DGL框架实现GCN算法!
  2. java 解析证书_java 读取证书类以及key tool gui 1.7
  3. 李连杰年度巨作霍元甲主题曲:周杰伦唱
  4. 【图像处理】——比特平面原理和实现方法(全网较全面,含所有比特位图的分层方法)
  5. 使用FileDialog查看文件内容
  6. DAY3 scp,rsync,chmod,chown,setfacl
  7. Harris角点检测算法 1
  8. Sharepoint 2013 表单验证四(添加用户到表单验证数据库)
  9. AIS家电行业供应链管理系统综合分析-零部件订货对应分析需求
  10. 计算机选择题在线,计算机基础知识选择题题库全集.doc
  11. android fsck,android fsck_msdos分析(一)
  12. 计算机桌面文字重影,为什么电脑屏幕上的字老是重影,该怎么调?
  13. 无情剑之了却红尘java,《无情剑-了却红尘》攻略
  14. 这三年,一路走来,劈荆斩棘 – Vol 2
  15. 基于区块链的分布式金融网络
  16. 模拟人类大脑每秒计算数量级及参数容量的估计
  17. Web在线聊天室(2) --- 技术实现原理
  18. android手势控制动画,轻松实现Android,iOS的一个手势动画效果
  19. 普通人的2022春招总结(阿里、腾讯offer)
  20. 电子科技20秋C语言在线作业3,【奥鹏】[电子科技大学]20秋《C语言》在线作业3...

热门文章

  1. .net core 使用swagger提示:Failed to load API definition.加载API定义失败
  2. 【编程素质】设计模式原则(SOLID原则)
  3. java static方法(单例)
  4. http://localhost/打开错误原因之一,eclipse PHP Web Application没反应 解决方法
  5. 创业故事分享:本地化论坛的缩影
  6. (二)性能测试的常用术语
  7. 一机一镜——为什么要使用定焦头练好基本功?
  8. ubuntu20.04开启SSH远程登录
  9. Excel的VBA进行百度搜索
  10. steam上快速游戏_如何将Steam游戏移动到另一个驱动器上