首页 > 其他分享 >elasticsearch集群red恢复损坏的索引

elasticsearch集群red恢复损坏的索引

时间:2024-01-05 17:55:51浏览次数:44  
标签:index 文件 lucene 索引 elasticsearch 分片 red

背景

客户磁盘损坏,修复磁盘后,重启机器,发现elasticsearch启动成功,ES状态正常green,但是历史数据都没有加载进,查看ES存储数据目录,发现数据还在。

解决方案

  1. 首先,需要确认indices目录下的lucene 索引正常。需要关闭ES(实际操作索引处于close状态也可以)。
# 检测lucene 索引数据是否正常
java -cp /usr/share/elasticsearch/lib/*:/usr/share/elasticsearch/lib/elasticsearch-*.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex    文件路径

如果返回java异常报错,注意文件路径,需要到index分片目录下,例如:

/data/elasticsearch/data/nodes/0/indices/LV3R8lK_RU6RJyQlYIx6Tw/0/index/

如果CheckIndex检测到问题并且其修复建议看起来很明智,使用 -exorcise 命令修复

# 修复lucene数据
java -cp /usr/share/elasticsearch/lib/*:/usr/share/elasticsearch/lib/elasticsearch-*.jar -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex -exorcise  文件路径
  1. 其次,查看索引分片具体的失败原因

使用如下API查看

# 查看分片分配失败原因
curl -XGET IP:9200/_cluster/allocation/explain?pretty

或者,查看es的日志,也会打印出堆栈信息,分片分配失败原因。

  1. 如果,报错_state目录下的.st文件损坏 则删除这个问题,然后重新分配

    3.1 手动重新分配

# 手动重新分配
curl -XPOST IP:9200/_cluster/reroute?retry_failed=true

3.2 手动分配陈腐的分片

# 手动分配陈腐的分片
curl -H "Content-Type:application/json" -XPOST "localhost:9200/_cluster/reroute?pretty" -d '
{
  "commands": [
    {
      "allocate_stale_primary": {
      "index": "{索引名称}",
      "shard": "{分片ID}",
      "node": "{节点名称}",
      "accept_data_loss": true
      }
    }
  ]
}'

需要从步骤2 查看分片分配失败原因的返回结果中,选取index 、shard、node信息

  1. 如果报错translog-*.tlog日志文件损坏,那么需要移走这个tlog日志文件,然后重试3.2步骤,手动分配陈腐的分片。

    此种情况会丢失损坏的tlog文件中的数据。但相对整个索引丢失,已经是最好的情况了

  2. 如果在索引的分片数据目录,出现corrupt开头的文件,则需要清理掉这个文件。corrupt开头的文件是记录文件损坏的位置,不移除这个文件,分配stale是无法恢复,移除了这个文件才能恢复。清理完corrupt文件之后,再重试 3.2 手动分配陈腐的分片

  3. 如果尝试以上种种,都不能恢复分片数据。那么为了保证当前索引的正常业务的读写以及ES正常的状态。只能重建索引。丢失的数据不要了(最糟糕的情况)。

# 丢弃分片,保留索引
curl -H "Content-Type:application/json" -XPOST "IP:9200/_cluster/reroute?pretty" -d '
{
  "commands": [
    {
      "allocate_empty_primary": {
      "index": "{索引名称}",
      "shard": "{分片ID}",
      "node": "{节点名称}",
      "accept_data_loss": true
      }
    }
  ]
}'

批量修复分片,不要数据了

标签:index,文件,lucene,索引,elasticsearch,分片,red
From: https://www.cnblogs.com/pengliblogs/p/17947761

相关文章

  • 无涯教程-Redis - 连接命令
    Redis连接命令基本上用于管理与Redis服务器的客户端连接。Connections-示例以下示例说明了客户端如何向Redis服务器进行身份验证并检查服务器是否正在运行。redis127.0.0.1:6379>AUTH"password"OKredis127.0.0.1:6379>PINGPONGConnections-命令下表列出了一......
  • 无涯教程-Redis - 脚本命令
    Redis脚本用于使用Lua解释器判断脚本,从版本2.6.0开始,它内置在Redis中,用于脚本编写的命令是EVAL命令。Scripting-语法以下是EVAL命令的基本语法。redis127.0.0.1:6379>EVALscriptnumkeyskey[key...]arg[arg...]Scripting-示例以下示例说明了Redis脚本的......
  • 【Redis深度专题】「核心技术提升」从源码角度探究Redis服务的内存使用、清理以及逐出
    背景介绍Redis作为一种高性能的内存NoSQL数据库,其容量受限于最大内存的限制。用户在使用阿里云Redis时,除了对性能和稳定性有较高的要求外,对内存占用也非常敏感。然而,在实际使用中,一些用户可能会发现他们的线上实例的内存占用比预期的要大。内存较高的场景在使用Redis时,以下是一些可......
  • 用 SpringBoot+Redis 解决海量重复提交问题
    1前言在实际的开发项目中,一个对外暴露的接口往往会面临很多次请求,我们来解释一下幂等的概念:任意多次执行所产生的影响均与一次执行的影响相同。按照这个含义,最终的含义就是对数据库的影响只能是一次性的,不能重复处理。如何保证其幂等性,通常有以下手段:数据库建立唯一性索引,可以保......
  • 无涯教程-Redis - 事务处理命令
    Redis事务允许在单个步骤中执行一组命令,以下是事务的两个属性。事务中的所有命令都作为单个隔离操作顺序执行。Redis事务也是原子的,原子表示所有命令或不被处理。Redis事务由命令MULTI启动,然后您需要传递应在事务中执行的命令列表,此后,整个事务由EXEC命令执行。redis......
  • 在Python中,有几个库可以帮助我们自动寻找最适合的机器学习模型和参数。这里有两个主要
    在Python中,有几个库可以帮助我们自动寻找最适合的机器学习模型和参数。这里有两个主要的库:1.**lazypredict**¹:这个库可以快速地比较多种机器学习算法的性能,从而帮助我们选择最佳的算法。它可以在循环中迭代多个模型,这通常需要一些时间,但是使用lazypredict可以克服这个限制。下......
  • 在TypeScript中重命名类型索引?
    在TypeScript中,要重命名类型索引,你可以使用TypeScript的类型别名或接口来实现。下面是两种常见的方法:1.使用类型别名(TypeAliases):类型别名允许你为一个类型定义一个别名,通过使用关键字type来创建。你可以在别名中定义索引类型,并为该类型定义一个新的名称。```typescripttypeMy......
  • 无涯教程-Redis - 发布订阅命令
    RedisPub/Sub实现了消息传递系统,其中发件人(用redis术语称为发布者)发送消息,而接收者(订户)接收消息,消息传输所通过的链接称为channel。在Redis中,客户端可以订阅任意数量的频道。PublishSubscribe-示例以下示例说明了发布订户概念的工作方式。在以下示例中,一个客户订阅......
  • Redis键值设计与BigKey处理方案
    1.优雅的key结构Redis的Key虽然可以自定义,但最好遵循下面的几个最佳实践约定:遵循基本格式:[业务名称]:[数据名]:[数据/数据id]长度不超过44字节不包含特殊字符例如:我们的登录业务,保存用户信息,其key可以设计成如下格式:优点:可读性强避免key冲突方便管理更节省内存:key是string类型,底......
  • Red Hat Enterprise Linux 9 (RHEL 9) 正式版发布(含 x86_64 和 aarch64 镜像下载)
    红帽企业Linux9作者主页:www.sysin.orgRedHatEnterpriseLinux9(RHEL9)发布说明2022年5月18日,IBM收购的红帽公司宣布推出红帽企业Linux9(RHEL9),这是世界领先的企业Linux平台的最新版本。RHEL9为支持混合云创新提供了更灵活、更稳定的基础,并为跨物理、虚拟、私......