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

为什么这个错误发生 #

repository_missing_exception 表示尝试访问的快照仓库不存在。

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

  1. 仓库名称拼写错误:请求中的仓库名称输入错误
  2. 仓库未创建:仓库尚未被创建
  3. 仓库被删除:仓库已被删除但客户端仍在引用
  4. 大小写不匹配:仓库名称区分大小写
  5. 集群重启后丢失:临时配置的仓库在重启后丢失

如何修复这个错误 #

1. 列出所有仓库 #

# 查看所有已注册的仓库
GET /_snapshot?verbose

# 或使用简洁格式
GET /_cat/repositories?v

2. 验证仓库名称 #

# 确认仓库名称拼写正确
# 仓库名称区分大小写
GET /_snapshot/<repository_name>?verbose

3. 创建仓库 #

# 创建文件系统仓库
PUT /_snapshot/<repository_name>
{
  "type": "fs",
  "settings": {
    "location": "/path/to/backup"
  }
}

# 创建共享文件系统仓库
PUT /_snapshot/<repository_name>
{
  "type": "fs",
  "settings": {
    "location": "/mount/shared_backup"
  }
}

# 创建 S3 仓库(需要插件)
PUT /_snapshot/<repository_name>
{
  "type": "s3",
  "settings": {
    "bucket": "my-backup-bucket",
    "region": "us-east-1"
  }
}

4. 验证仓库 #

# 验证仓库配置
POST /_snapshot/<repository>/_verify

5. 检查配置文件 #

# 确保仓库配置在配置文件中(如果使用文件配置)
# easysearch.yml
path.repo: ["/mnt/backup", "/mount/backup"]

6. 重启节点(如果修改了配置文件) #

# 修改配置文件后需要重启节点
sudo systemctl restart easysearch

7. 注册共享文件系统 #

# 使用共享文件系统仓库
PUT /_snapshot/<repository_name>
{
  "type": "fs",
  "settings": {
    "location": "/mount/backups"
  }
}

8. 检查目录权限 #

# 确保目录存在且有正确权限
mkdir -p /path/to/backup
chown -R easysearch:easysearch /path/to/backup
chmod 750 /path/to/backup

9. 使用索引模板 #

# 对于快照策略,使用 SLM
PUT /_slm/policy/<policy_name>
{
  "schedule": "0 0 2 * * ?",
  "name": "<snapshot-name>",
  "repository": "<repository_name>",
  "config": {
    "indices": ["*"]
  }
}

10. 查看快照列表 #

# 创建仓库后查看快照列表
GET /_snapshot/<repository>/_all

预防措施 #

  • 在创建快照前确保仓库已创建
  • 使用统一的仓库命名规范
  • 在配置文件中配置 path.repo
  • 定期验证仓库状态
  • 使用 SLM 自动化快照管理
  • 在生产环境使用持久化配置
  • 为不同的业务使用不同的仓库
  • 监控仓库存储空间使用