版本: 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





