ES 的 unassigned shards 核心处理方案
背景:管理过数百个集群,使用方式千变万化,出现过各种各样的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 核心处理方案相关推荐
- es大量unassigned shards
原文地址:http://www.wklken.me/posts/2015/05/23/elasticsearch-issues.html 今天惯例看统计报表, 才发现es集群悲剧了......昨天下午 ...
- es unassigned shards 解决
服务器宕机后,es出现unassigned shards,使用reroute 命令提示 shard has exceeded the maximum number of retries,即使加上 re ...
- [unassigned_shards]Fix issue: elasticsearch unassigned shards
今天遇到了一个elasticsearch相关的坑[unassigned shards],蹚完了,记录一下(详细的解释在中下方,耐心看完). 1.先确保elasticsearch(后简称es)处于启动状 ...
- Elasticsearch unassigned shards的解决之道
出现这种提示,说明你的集群状态是亚健康的,status是yellow,至少有一个副本分片没有成功创建,集群是能正常工作的,只是有丢失数据的风险. 一,问题定位 解决思路,首先查清楚问题所在,es提供一 ...
- How to resolve unassigned shards in Elasticsearch——写得非常好
How to resolve unassigned shards in Elasticsearch 转自:https://www.datadoghq.com/blog/elasticsearch-un ...
- ES shard unassigned的解决方法汇总
ES shard unassigned的解决方法汇总 参考文章: (1)ES shard unassigned的解决方法汇总 (2)https://www.cnblogs.com/bonelee/p/ ...
- Reroute Unassigned Shards——遇到主shard 出现的解决方法就是重新路由
Red Cluster! 摘自:http://blog.kiyanpro.com/2016/03/06/elasticsearch/reroute-unassigned-shards/ There a ...
- Recovering unassigned shards on elasticsearch 2.x——副本shard可以设置replica为0在设置回来...
Recovering unassigned shards on elasticsearch 2.x 摘自:https://z0z0.me/recovering-unassigned-shards-on ...
- ElasticSearch学习系列(一)关于ES数据库的和核心倒排索引的介绍
关于ES数据库的和核心倒排索引的介绍 一.Elasticsearch概述 简介 关于全文检索引擎 关系型数据库的全文检索功能缺点 全文检索的应用场景 Elasticsearch 应用案例 二.Elas ...
最新文章
- GNN教程:DGL框架实现GCN算法!
- java 解析证书_java 读取证书类以及key tool gui 1.7
- 李连杰年度巨作霍元甲主题曲:周杰伦唱
- 【图像处理】——比特平面原理和实现方法(全网较全面,含所有比特位图的分层方法)
- 使用FileDialog查看文件内容
- DAY3 scp,rsync,chmod,chown,setfacl
- Harris角点检测算法 1
- Sharepoint 2013 表单验证四(添加用户到表单验证数据库)
- AIS家电行业供应链管理系统综合分析-零部件订货对应分析需求
- 计算机选择题在线,计算机基础知识选择题题库全集.doc
- android fsck,android fsck_msdos分析(一)
- 计算机桌面文字重影,为什么电脑屏幕上的字老是重影,该怎么调?
- 无情剑之了却红尘java,《无情剑-了却红尘》攻略
- 这三年,一路走来,劈荆斩棘 – Vol 2
- 基于区块链的分布式金融网络
- 模拟人类大脑每秒计算数量级及参数容量的估计
- Web在线聊天室(2) --- 技术实现原理
- android手势控制动画,轻松实现Android,iOS的一个手势动画效果
- 普通人的2022春招总结(阿里、腾讯offer)
- 电子科技20秋C语言在线作业3,【奥鹏】[电子科技大学]20秋《C语言》在线作业3...
热门文章
- .net core 使用swagger提示:Failed to load API definition.加载API定义失败
- 【编程素质】设计模式原则(SOLID原则)
- java static方法(单例)
- http://localhost/打开错误原因之一,eclipse PHP Web Application没反应 解决方法
- 创业故事分享:本地化论坛的缩影
- (二)性能测试的常用术语
- 一机一镜——为什么要使用定焦头练好基本功?
- ubuntu20.04开启SSH远程登录
- Excel的VBA进行百度搜索
- steam上快速游戏_如何将Steam游戏移动到另一个驱动器上