为什么这个错误发生 #
repository_missing_exception 表示尝试访问的快照仓库不存在。
这个错误可能由以下原因引起:
- 仓库名称拼写错误:请求中的仓库名称输入错误
- 仓库未创建:仓库尚未被创建
- 仓库被删除:仓库已被删除但客户端仍在引用
- 大小写不匹配:仓库名称区分大小写
- 集群重启后丢失:临时配置的仓库在重启后丢失
如何修复这个错误 #
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 自动化快照管理
- 在生产环境使用持久化配置
- 为不同的业务使用不同的仓库
- 监控仓库存储空间使用





