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

为什么这个错误发生 #

translog_exception 是与事务日志(translog)相关的通用异常。事务日志用于保证数据操作的 durability,记录所有未刷新到磁盘的操作。

这个错误可能由以下原因引起:

  1. 事务日志损坏:translog 文件损坏或格式错误
  2. 写入失败:写入 translog 时磁盘空间不足或 I/O 错误
  3. 读取失败:读取 translog 恢复数据时失败
  4. 文件锁定:translog 文件被其他进程锁定
  5. 权限问题:没有权限读写 translog 目录
  6. 版本不兼容:translog 版本与当前版本不兼容
  7. 文件系统错误:底层文件系统错误
  8. 磁盘故障:物理磁盘损坏

如何修复这个错误 #

1. 检查磁盘空间和状态 #

# 检查磁盘空间
df -h

# 检查磁盘错误
dmesg | grep -i error
smartctl -a /dev/sda

# 检查文件系统
fsck -f /dev/sda1

2. 检查 translog 文件状态 #

# 查看 translog 配置
GET /<index>/_settings?filter_path=**.translog

# translog 通常位于数据目录下
# /path/to/data/nodes/0/indices/<index>/0/translog/

3. 刷新 translog #

# 刷新索引使 translog 清空
POST /<index>/_flush

4. 从副本恢复 #

# 如果有健康的副本,可以删除问题分片并从副本恢复
POST /_cluster/reroute
{
  "commands": [{
    "allocate_stale_primary": {
      "index": "<index>",
      "shard": 0,
      "node": "<node_with_replica>",
      "accept_data_loss": false
    }
  }]
}

5. 从快照恢复 #

# 从快照恢复索引
POST /_snapshot/<repository>/<snapshot>/_restore
{
  "indices": "<index>",
  "include_global_state": false
}

6. 调整 translog 设置 #

# 增加 translog 刷新间隔(减少写入频率)
PUT /<index>/_settings
{
  "index": {
    "translog.durability": "async",
    "translog.sync_interval": "30s"
  }
}

# 或减少 translog 保留大小
PUT /<index>/_settings
{
  "index": {
    "translog.retention.size": "512mb"
  }
}

7. 检查文件权限 #

# 确保 Easysearch 有权限访问 translog 目录
ls -la /path/to/data/nodes/0/indices/<index>/0/translog/

# 修复权限
chown -R easysearch:easysearch /path/to/data/
chmod 750 /path/to/data/

8. 清理损坏的 translog #

# 停止节点
sudo systemctl stop easysearch

# 备份数据目录
cp -r /path/to/data /path/to/data.backup

# 删除问题分片的 translog
rm /path/to/data/nodes/0/indices/<index>/0/translog/*

# 重启节点
sudo systemctl start easysearch

9. 重建索引 #

# 如果 translog 严重损坏,可能需要重建索引
POST /_reindex
{
  "source": { "index": "<old_index>" },
  "dest": { "index": "<new_index>" }
}

10. 检查节点日志 #

# 查看详细的 translog 错误信息
grep -i "translog" /path/to/easysearch/logs/easysearch.log | tail -100

预防措施 #

  • 确保充足的磁盘空间
  • 使用 RAID 保护数据
  • 配置适当的 translog 刷新策略
  • 定期检查磁盘健康状态
  • 使用副本提高数据可用性
  • 定期执行快照备份
  • 监控 translog 大小
  • 避免异常断电(使用 UPS)
  • 使用稳定的文件系统(如 XFS、EXT4)