专栏首页后场技术Elasticsearch UNASSIGNED索引分片问题分析

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'

本文分享自微信公众号 - 后场技术(opstalk),作者:空心菜

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • ​Shell之可爱的变量

    知止而后能定,定而后能静,静而后能定,安而后能虑,虑而后能得。 —- 语出<<大学>>

    后场技术
  • Python是一门什么语言

    编程语言主要从以下几个角度为进行分类,编译型和解释型、静态语言和动态语言、强类型定义语言和弱类型定义语言,每个分类代表什么意思呢,下面我们一起看一下。

    后场技术
  • CitusDB调研分享

    CitusDB 是基于 PostgreSQL 扩展(类似 PHP 扩展)实现的 PostgreSQL 集群。

    后场技术
  • SQL学习笔记之B+树

    任意节点,它的左子树如果不为空,那么左子树上所有节点的值都小于根节点的值; 任意节点,他的右子树如果不为空,那么右子树上的所有节点的值大于根节点的值。

    Jetpropelledsnake21
  • C语言 | 每日问答(96)

    阿一:在C语言里没有一个标准且可移植的方法。在标准中跟本就没有提及屏幕和 键盘的概念, 只有基于字符 “流” 的简单输入输出。在某个级别, 与键盘的交互输入一般...

    C语言入门到精通
  • 实用的top命令(r3笔记54天)

    对于系统级的监控来说,top命令是实用而高效的瑞士军刀。相比vmstat,sar来说提供的是实时的进程信息,对于监控性能,排查问题是很高效的。而且提供了交互式的...

    jeanron100
  • Deep Memory Network 深度记忆网络

    一个记忆网络是由一个记忆mmm(一个以mim_imi​作为索引的数组对象)和4个组件I,G,O,RI,G,O,RI,G,O,R组成。其中:

    Steve Wang
  • LSTM 学习理解

    一年前看LSTM,感觉非常复杂难理解,如今再看,感觉似乎简单清晰了许多,此处做个简单记录。

    种花家的奋斗兔
  • 使用Ink!开发Substrate ERC20智能合约

    ERC20 通证标准(ERC20 Token Standard)是通过以太坊创建通证时的一种规范。按照 ERC20 的规范可以编写一个智能合约,创建“可互换通证...

    jasonruan
  • Linux crontab 定时任务整理笔记

    版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u011415782/article/de...

    泥豆芽儿 MT

扫码关注云+社区

领取腾讯云代金券