gpt4 book ai didi

Elasticsearch 崩溃后无法恢复

转载 作者:行者123 更新时间:2023-11-29 02:49:47 25 4
gpt4 key购买 nike

用完了磁盘空间,搞砸了 elasticsearch 分片。三个节点现在是红色的,两个已经恢复并且它们的状态是黄色的。 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)

最佳答案

首先,检查碎片本身确实没有问题。 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 报告分片一切正常,那么希望您的问题仅在 translog 中。事务日志是 ElasticSearch 用于原子性的预写日志。崩溃后,ES 将尝试恢复分片,包括尚未刷新到分片索引本身的写入。这些都在 translog 中,所以如果删除它们就会丢失。然而,这比失去碎片要好得多。在你的情况下,translog 已经损坏,我不知道有什么方法可以恢复它。

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

然后分片应该正确初始化,尽管像往常一样可能需要一段时间才能完成。

关于Elasticsearch 崩溃后无法恢复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26667063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com