📣 极限科技诚招搜索运维工程师(Elasticsearch/Easysearch)- 全职/北京 👉 : 立即申请加入

版本: 6.8-8.9

简而言之,当 Elasticsearch 由于损坏或磁盘问题无法从事务日志(translog)恢复数据时,会发生此错误。事务日志对于节点重启后的数据恢复至关重要。要解决此问题,您可以尝试重启 Elasticsearch 节点。如果错误持续存在,可以考虑从快照恢复(如果可用)。如果没有快照,您可能需要删除损坏的事务日志文件,但这可能会导致数据丢失。务必确保有备份策略以防止此类问题。

日志上下文 #

日志 “failed to recover from translog” 的类名是 InternalEngine.java。 我们从 Elasticsearch 源代码中提取了以下内容,供那些寻求深入上下文的人参考:

final long localCheckpoint = getProcessedLocalCheckpoint();
 if (localCheckpoint < recoverUpToSeqNo) {
 try (Translog.Snapshot snapshot = newTranslogSnapshot(localCheckpoint + 1; recoverUpToSeqNo)) {
 opsRecovered = translogRecoveryRunner.run(this; snapshot);
 } catch (Exception e) {
 throw new EngineException(shardId; "failed to recover from translog"; e);
 }
 } else {
 opsRecovered = 0;
 }
 // flush if we recovered something or if we have references to older translogs