崩溃后Elasticsearch无法恢复

 曾的曾的力 发布于 2022-12-14 08:20

跑出磁盘空间,搞砸了弹性搜索碎片.现在有三个节点为红色,两个节点已恢复,状态为黄色.ES在CPU上运行150%,在内存上运行很高,试图恢复它们.但看起来有一些版本匹配冲突.

我清理了磁盘空间并删除了分片的translog以停止从translog加载.但令人惊讶的是,translog再次被创建!

请分享如何阻止此尝试从translog恢复并恢复正常索引操作.我不想删除分片数据.

[2014-10-31 03:11:43,742][WARN ][cluster.action.shard     ] [Angela Cairn] [western_europe][4] sending failed shard for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type match [101]]; ]]
[2014-10-31 03:11:43,742][WARN ][cluster.action.shard     ] [Angela Cairn] [western_europe][4] received shard failed for [western_europe][4], node[x5M73qVXS5eZIBdz40boEg], [P], s[INITIALIZING], indexUUID [wy-tIJqdQiynz5SGQ2IrGA], reason [Failed to start shard, message [IndexShardGatewayRecoveryException[[western_europe][4] failed to recover shard]; nested: ElasticsearchException[failed to read [tweet][527924645014818817]]; nested: ElasticsearchIllegalArgumentException[No version type match [101]]; ]]
[2014-10-31 03:11:43,859][WARN ][indices.cluster          ] [Angela Cairn] [western_europe][2] failed to start shard
org.elasticsearch.index.gateway.IndexShardGatewayRecoveryException: [western_europe][2] failed to recover shard
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:269)
    at org.elasticsearch.index.gateway.IndexShardGatewayService$1.run(IndexShardGatewayService.java:132)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.elasticsearch.ElasticsearchException: failed to read [tweet][527936245440065536]
    at org.elasticsearch.index.translog.Translog$Index.readFrom(Translog.java:511)
    at org.elasticsearch.index.translog.TranslogStreams.readTranslogOperation(TranslogStreams.java:52)
    at org.elasticsearch.index.gateway.local.LocalIndexShardGateway.recover(LocalIndexShardGateway.java:241)
    ... 4 more
Caused by: org.elasticsearch.ElasticsearchIllegalArgumentException: No version type match [116]
    at org.elasticsearch.index.VersionType.fromValue(VersionType.java:307)
    at org.elasticsearch.index.translog.Translog$Index.readFrom(Translog.java:508)

Iskar Jarak.. 5

首先,检查分片本身是否确实没有问题。cd到您的/usr/share/elasticsearch/lib目录或等效目录,然后像这样使用Lucene的CheckIndex:

java -cp "*" -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /var/lib/elasticsearch//nodes//indices//

这将检查分片是否存在问题,如果分片很大,则需要一段时间。

请注意,如果您弄错了Java类路径,则某些必需的jar文件将丢失,并且CheckIndex可能会引发错误并错误地认为分片中的所有段均已损坏,因此请仔细阅读输出。

如果分片有问题,并且您没有其他方法可以还原它,则使用带有-fix参数的相同命令将修复该分片,但会丢失数据。CheckIndex会警告您将从分片丢失的文档数量(如果有)。

如果CheckIndex报告该分片一切正常,那么希望您的问题仅在事务日志中。事务日志是ElasticSearch用于原子性的预写日志。崩溃后,ES将尝试恢复分片,包括尚未刷新到分片索引本身的写入。这些都在事务日志中,因此,如果删除它将会丢失它们。但是,这比丢失碎片要好得多。在您的情况下,Translog已显示为损坏,我不知道有任何方法可以恢复它。

要删除被用于恢复损坏的事务日志,只是删除超越对消除在超越对文件/var/lib/elasticsearch//nodes//indices///translog/ 为每个受影响的节点每个相关碎片。后一部分很重要,因为您可能会看到集群在从另一个节点删除碎片后尝试从另一个节点重新生成碎片的事务记录。

然后碎片应该正确初始化,尽管照例可能需要一段时间才能完成。

1 个回答
  • 首先,检查分片本身是否确实没有问题。cd到您的/usr/share/elasticsearch/lib目录或等效目录,然后像这样使用Lucene的CheckIndex:

    java -cp "*" -ea:org.apache.lucene... org.apache.lucene.index.CheckIndex /var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER/index/
    

    这将检查分片是否存在问题,如果分片很大,则需要一段时间。

    请注意,如果您弄错了Java类路径,则某些必需的jar文件将丢失,并且CheckIndex可能会引发错误并错误地认为分片中的所有段均已损坏,因此请仔细阅读输出。

    如果分片有问题,并且您没有其他方法可以还原它,则使用带有-fix参数的相同命令将修复该分片,但会丢失数据。CheckIndex会警告您将从分片丢失的文档数量(如果有)。

    如果CheckIndex报告该分片一切正常,那么希望您的问题仅在事务日志中。事务日志是ElasticSearch用于原子性的预写日志。崩溃后,ES将尝试恢复分片,包括尚未刷新到分片索引本身的写入。这些都在事务日志中,因此,如果删除它将会丢失它们。但是,这比丢失碎片要好得多。在您的情况下,Translog已显示为损坏,我不知道有任何方法可以恢复它。

    要删除被用于恢复损坏的事务日志,只是删除超越对消除在超越对文件/var/lib/elasticsearch/<ES-NAME>/nodes/<NODE-NUMBER>/indices/<INDEX-NAME>/<SHARD-NUMBER>/translog/ 为每个受影响的节点每个相关碎片。后一部分很重要,因为您可能会看到集群在从另一个节点删除碎片后尝试从另一个节点重新生成碎片的事务记录。

    然后碎片应该正确初始化,尽管照例可能需要一段时间才能完成。

    2022-12-14 08:23 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有