Elasticsearch UNASSIGNED索引分片问题分析
时间:2022-07-24
本文章向大家介绍Elasticsearch UNASSIGNED索引分片问题分析,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
No.1 问题状态
线上突然有一台服务器宕机重启了,从而导致Elastisearch集群有些索引的分片出现UNASSIGNED的状态,情况如下:
[root@mes1 ~]# curl -s -XGET 'http://127.0.0.1:9200/_cat/shards?h=index,shard,prirep,state,unassigned.reason' |grep UNASS
osagent_20180422 6 p UNASSIGNED NODE_LEFT
osagent_20180423 9 p UNASSIGNED NODE_LEFT
osagent_20180424 9 p UNASSIGNED NODE_LEFT
每行都列出了索引的名称,分片号,它是主分片还是副本分片,以及未分配的原因。从字段NODE_LEFT
可以看出是因为集群中有节点脱离集群导致的。
No.2 分析问题
当节点离开集群时,主节点会暂时延迟碎片重新分配以避免在重新平衡碎片中不必要地浪费资源,原因是原始节点能够在特定时间段内(默认情况下为一分钟)恢复。
所以这种情况可以查看日志是不是因为碎片分配延迟问题,查看日志如下:
[root@des1 logs]# grep -i --color 'unassigned shards, next check in' ./* -r
./DES.log.2018-04-22:[2017-12-23 14:49:51,211][INFO ][cluster.routing ] [des1] delaying allocation for [6] unassigned shards, next check in [59.9s]
./DES.log.2018-04-23:[2017-12-25 12:03:52,018][INFO ][cluster.routing ] [des1] delaying allocation for [9] unassigned shards, next check in [59.9s]
./DES.log.2018-04-24:[2017-12-28 12:04:15,912][INFO ][cluster.routing ] [des1] delaying allocation for [9] unassigned shards, next check in [59.9s]
所以正式由于分片延迟分配超出1min,导致主分片不可用。
No.3 问题解决
如果你认为未分配的分片的所属索引是你不需要的,那可以删除索引,让集群恢复Green状态。
当一个节点脱离集群后,然后在重新加入后,索引分片恢复的时候中间会进行大量的网络I/O,所以遇到较大的索引的时候,可能有些索引分配恢复超出1min,所以我们可以设置延时分配时间参数index.unassigned.node_left.delayed_timeout
来加大延时分配时间,设置如下:
PUT /_all/_settings
{
"settings": {
"index.unassigned.node_left.delayed_timeout": "3m"
}
}
上述设置将分片重新分配延迟到3分钟之后,这样就可以等节点完全起来。
临时解决,让集群快速恢复的话,如果你不在意不能分配分片数据的话,设置如下:
curl -XPOST 'localhost:9200/_cluster/reroute' -d
'{ "commands" :
[ { "allocate" :
{ "index" : "osagent", "shard" : 6, "node": "<NODE_ID>", "allow_primary": "true" }
}]
}'
强制分配主分片后你将得到的是一个“空的”分片。
节点id你可以通过如下API获取:
curl 'localhost:9200/_nodes/process?pretty'
- 用GenePred注释文件进行数据分析
- 走在专家的路上,每天一条SQL优化(2)
- Entity Framework——性能测试
- 谷歌开放的TensorFlow Object Detection API 效果如何?对业界有什么影响?
- 生信编程直播课程优秀学员作业展示1
- ID转换大全
- 走在专家的路上,每天一条SQL优化(3)
- 表现层设计模式
- MongoDB模拟多文档事务操作
- 表达矩阵可视化大全
- .NET MongoDB Driver GridFS 2.2原理及使用示例
- .NET MongoDB Driver 2.2使用示例
- 设计模式(行为模式)——观察者模式
- 机器学习实战 | 第二章:线性回归模型
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法