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

为什么这个错误发生 #

snapshot_in_use_deletion_exception 表示尝试删除正在被使用的快照。快照可能正在被恢复操作使用,或与其他快照有依赖关系。

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

  1. 正在恢复:快照正在被用于恢复索引
  2. 快照依赖:其他快照依赖此快照
  3. 克隆操作:快照正在被用于克隆索引
  4. 搜索快照:快照正在被搜索
  5. 事务未完成:与快照相关的事务未完成
  6. 锁未释放:快照上的锁未正确释放

如何修复这个错误 #

1. 查看快照状态 #

# 查看快照状态
GET /_snapshot/<repository>/<snapshot_name>

# 查看所有快照
GET /_snapshot/<repository>/_all

2. 检查正在进行的恢复 #

# 查看正在进行的恢复操作
GET /_cat/recovery?v&active_only=true

# 查看特定快照的恢复状态
GET /_snapshot/<repository>/<snapshot_name>/_status

3. 等待恢复完成 #

# 等待恢复完成后再删除快照
# 监控恢复进度
GET /_cat/recovery?v&h=index,shard,bytes_percent

4. 取消恢复操作 #

# 如果需要立即删除,可以先取消恢复
DELETE /<index>

# 然后删除快照
DELETE /_snapshot/<repository>/<snapshot_name>

5. 查看快照依赖 #

# 查看快照信息
GET /_snapshot/<repository>/<snapshot_name>

# 检查是否有其他快照依赖此快照

6. 删除依赖的快照 #

# 先删除依赖此快照的其他快照
DELETE /_snapshot/<repository>/<dependent_snapshot>

# 然后删除目标快照
DELETE /_snapshot/<repository>/<snapshot_name>

7. 检查克隆操作 #

# 检查是否有正在进行的克隆操作
GET /_cat/tasks?v&actions=*clone*

8. 关闭相关索引 #

# 关闭正在使用快照的索引
POST /<index>/_close

# 等待关闭完成
# 然后删除快照
DELETE /_snapshot/<repository>/<snapshot_name>

9. 查看错误日志 #

# 查看快照相关错误日志
grep -i "snapshot.*delet\|snapshot.*use" /path/to/easysearch/logs/easysearch.log | tail -100

10. 检查快照仓库状态 #

# 查看仓库状态
GET /_snapshot/<repository>

# 验证仓库完整性
POST /_snapshot/<repository>/_verify

11. 使用强制删除(谨慎) #

# 警告:强制删除可能导致恢复失败
# 仅在确认安全后使用
DELETE /_snapshot/<repository>/<snapshot_name>?force=true

12. 等待操作完成 #

# 等待所有相关操作完成
# 查看所有活动任务
GET /_tasks?detailed=true

13. 重新尝试删除 #

# 如果是临时锁问题,等待后重试
# 几分钟后重试
DELETE /_snapshot/<repository>/<snapshot_name>

14. 检查快照搜索 #

# 如果快照正在被搜索,等待搜索完成
# 或停止搜索操作

15. 验证快照不再需要 #

# 在删除前确认快照不再需要
# 列出所有使用该快照的索引
GET /_cat/indices?v

预防措施 #

  • 等待恢复完成后再删除快照
  • 确认快照不再被使用
  • 检查快照依赖关系
  • 使用有意义的快照名称
  • 文档化快照用途
  • 定期清理旧快照
  • 监控快照使用情况
  • 实现快照生命周期管理
  • 使用快照保留策略
  • 测试快照删除流程