记录ElasticSearch分片被锁定导致无法分配处理过程

这篇具有很好参考价值的文章主要介绍了记录ElasticSearch分片被锁定导致无法分配处理过程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

本篇文章记录最近ES做节点替换,从shard迁移过程中被锁定导致无法分配,主shard正常,希望可以帮助其它人
failed to create shard,failed to obtain in-memory shard lock,ShardLockObtainFailedException

一、问题描述

这次遇到的问题比较特殊,尝试过以下几种手段都没有恢复:

  1. _cluster/reroute手动分片shard
  2. 由于是从shard无法分片,所以当时试过将所以的副本改成0,然后再设置成1,想通过重新生成副本来解决,结果也失败

接下来是排查问题的过程:

1、通过“GET _cat/shards/indexname”错误信息如下,从shard无法分配,主shard正常,正常的shard未展示出来:
indexname                3     r      UNASSIGNED                                 
indexname                4     r      UNASSIGNED                                 
indexname                1     r      UNASSIGNED                                 

之前在运维过程中也遇到过UNASSIGNED这种从shard无法分配的问题,通过"allocate_replica"命令手动分配可以解决,这类问题一般都是因为node节点重启或者失联导致的shard分片异常

2、通过“GET _cluster/allocation/explain”错误信息如下:

"index": "indexname",
  "shard": 3,
  "primary": false,
  "current_state": "unassigned",
  "unassigned_info": {
    "reason": "ALLOCATION_FAILED",
    "at": "2023-11-02T18:43:14.758Z",
    "failed_allocation_attempts": 300,
    "details": "failed shard on node [4MMOUt8-SMatWGCzX1asAQ]: failed to create shard, failure IOException[failed to obtain in-memory shard lock]; nested: ShardLockObtainFailedException[[indexname][3]: obtaining shard lock timed out after 5000ms]; ",
    "last_allocation_status": "no_attempt"
  },
  "can_allocate": "no",
  "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes",

大多数情况下shard的allocate相关的问题都可以通过“GET _cluster/allocation/explain”命令获取到有用的关键信息,从返回的内容来分析是索引的第3个shard导致的,在node节点[4MMOUt8-SMatWGCzX1asAQ]被锁定。

二、处理过程

知道问题原因了就有方法解决了,我准备了三套方案,如下:

前置工作

  1. 业务将索引的读写请求切走
  2. 创建一个测试索引验证shard是否都正常
  3. 备份索引数据

方案1:重启索引

--刷新索引
POST indexname/_flush
--关闭索引
POST indexname/_close
---打开索引
POST indexname/_open

在本次处理过程中,使用了方案1重启索引就已经把问题解决了,但是方案一还是的业务配合将读写请求切走,否则索引close会导致应用的请求报错

方案2:重启节点node节点

[4MMOUt8-SMatWGCzX1asAQ]

PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "none"
}
}

PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "all"
}
}

方案2重启锁定shard的节点理论上来说也是可以解决这个问题,但是因为方案一已经解决了问题就没机会做测试

方案3.重建索引

  1. 先还原备份到一个临时索引,验证数据没问题
  2. 删除当前索引,还原创建新索引
方案3是最后的方案了,如果方案1和2都解决不了的话只能通过方案3进行索引重建来解决,通过备份还原的方式来恢复索引其实也是很快的

三、思考总结

其实整个问题处理过程中还有一些其它的细节在文中没有提到,集群在默认开启自动shard均衡过程中由于shard多次尝试分配无法成功,达到默认的5次重试之后就会报错,这个时候其实可以尝试将集群的自动分片关闭"cluster.routing.allocation.enable": "none",然后执行"POST /_cluster/reroute?retry_failed=true"来重置计数,最后通过手动分片shard的方式来做迁移也有可能能解决问题。只不过在每次遇到问题的时候需要结合当时的最佳场景去做判断,寻找影响范围最小的方案;

 

备注:

    作者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》文章来源地址https://www.toymoban.com/news/detail-745939.html

到了这里,关于记录ElasticSearch分片被锁定导致无法分配处理过程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决selenium访问网页中多个iframe,导致无法锁定元素的问题

    获取全部的iframe列表 调试获取目标iframe 使用: browser.switch_to.frame(目标iframe) 退回到原有的状态: browser.switch_to.default_content() 不同的iframe之间的元素无法被selenium锁定,因此需要通过人为调试,得到具体的iframe窗口,进入目标iframe后才能够进行元素的锁定,锁定后就得到目标

    2024年02月22日
    浏览(46)
  • Elasticsearch基础篇(七):分片大小修改和路由分配规则

    在Elasticsearch中,分片是对索引数据的水平划分和分布。索引被分成多个分片,每个分片可以在集群的不同节点上存储。这种分片的设计提供了一种水平扩展的能力,允许将大量数据分布到多个节点上,从而提高性能和可伸缩性。每个分片就是一个Lucene的实例,具有完整的功能

    2024年01月21日
    浏览(58)
  • Elasticsearch:如何使用集群级别的分片分配过滤(不包括节点)安全地停用节点

    当你想停用 Elasticsearch 中的节点时,通常的过程不是直接销毁节点。 如果你这样做,那么你就有数据丢失的风险,这不是你想要对应该是可靠的数据库做的事情。 这样做的问题是,节点很可能会通过 Elasticsearch 处理的恰当命名的分片分配分配给它们的分片。 Elasticsearch 中的

    2024年02月07日
    浏览(46)
  • 记录Elasticsearch 分片恢复问题

    ES在重启只有健康状态变为yellow,有几个分片未分配成功 查看原因:是因为集群恢复导致的 常见的几种未分配原因如下: ALLOCATION_FAILED:由于分片分配失败而未分配。 CLUSTER_RECOVERED:由于集群恢复而未分配。 DANGLING_INDEX_IMPORTED:由于导入了悬空索引导致未分配。 EXISTING_INDE

    2024年02月03日
    浏览(35)
  • ES踩坑记录之UNASSIGNED分片无法恢复

    我们线上有一套ES集群,三台机器,共运行了6个节点。一直在线上跑了几个月也一直没出什么问题。然而好巧不巧,就在昨天,集群中的3号节点磁盘出现故障,导致机器直接瘫痪。本来大家觉得问题不大,ES不是有容灾吗,换个新节点上去不就能自动分配分片了。 当我们信心

    2024年02月11日
    浏览(43)
  • elasticsearch分片unassign问题处理

    1、查询集群状态(当前为yellow) 2、查询分片情况 看到有四个分片是 unassign ,目前都是副本分区,不是主分区 3、查看unassign原因 (参考 elasticsearch官网 cart-shards ) 看到是因为 NODE_LEFT 4、检查有问题的shard和node对应关系 发现没有 lijun_2 该节点 5、检查集群node信息 发现 lijun_

    2024年02月09日
    浏览(57)
  • elasticsearch——ES集群分片不平衡处理

    在使用云上的一个ES集群的时候,发现搜索性能很差,查看分片情况,发现ES有12个节点,索引创建了10个分片,1个副本,最后20个分片全在其中3个节点上,分布不均衡,实际只消耗了3个节点的资源,所以性能很差,再次创建新的索引,发现仍然是这种情况,最后通过下面的命

    2024年02月13日
    浏览(39)
  • 忘记Linux系统的root密码怎么办?快速找回方法,重置root密码 、Linux 登录账号解锁、密码正确无法登录、账号锁定问题处理

    查看用户登录失败的信息 解封用户 方法一 ,rd.break 第 1 步:重启系统编辑内核参数 第 2 步:找到 linux 这行,在此行末尾空格后输入rd.break   (End键也可直接进入行尾) 成功后显示页面为: 第 3 步:以读写方式挂载sysroot(这里sysroot是以只读的形式挂载的,所以要以可读可

    2024年04月12日
    浏览(91)
  • 记录 无法识别USB串口设备以及由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)

    今天使用串口的时候突然电脑设备器显示无法识别USB设备,在这之前都是一切没有问题,我百思不得其解,于是我百度并且试了很多方法比如说换根线连接,重启电脑,卸载设备(没有卸载芯片)等之类的但是都不起作用。 后来我想起来有虚拟串口这个东西。我这边用的是

    2024年02月12日
    浏览(66)
  • Oracle Exadata X7-2掉电宕机导致集群无法启动处理过程

    客户突然联系说应用无法连接数据库,报错如下: 集群状态宕掉了,且无法正常启动!!! ping自己私有IP延迟高 ping其它主机私有IP不通 那么问题定位到私有IP不通导致的集群无法启动,一体机内部私有IP交互是通过自身的IB交换机完成的,很有可能是IB交换机问题,下面进行

    2024年02月08日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包