快照仓库是什么
快照要先在集群里注册一个仓库,之后才能往里写快照。仓库是「每个节点都能看到的共享位置」的抽象:fs 类型对应挂载的共享文件系统,S3、GCS、Azure 对应对象存储插件。注册时声明的路径必须落在 elasticsearch.yml 的 path.repo 白名单内,否则注册会被拒绝,这是最常见的失败原因。
基本信息
| 接口 | PUT /_snapshot/<repo> 注册、POST /_snapshot/<repo>/_verify 校验、GET /_snapshot/_all 列出 |
|---|---|
| fs 类型要求 | 共享文件系统挂载到所有节点同一路径,且已写入 path.repo |
| 其他类型 | S3 / GCS / Azure 等需要对应插件与访问凭证 |
| 常用设置 | location、compress、max_restore_bytes_per_sec、chunk_size |
| 权限要求 | 需要集群管理权限 |
典型使用场景
- 搭建定期备份:业务索引每日做一次快照
- 升级或变更前留退路,确认仓库可写、快照可恢复
- 跨集群迁移:源集群做快照,目标集群注册同一仓库后恢复
- 归档冷数据:老索引快照后删除索引释放磁盘
- 定期恢复演练,验证备份真的可用
注册与校验
注册与校验
# 1. 注册 fs 仓库,路径必须在 path.repo 白名单内
PUT /_snapshot/my_backup
{
"type": "fs",
"settings": {
"location": "/mnt/backups/es",
"compress": true,
"max_restore_bytes_per_sec": "200mb"
}
}
# 2. 校验连通性:任一节点不可读写都会失败
POST /_snapshot/my_backup/_verify
# 3. 列出已注册仓库及其中的快照
GET /_snapshot/_all
GET /_snapshot/my_backup/_all
# 4. 不再使用时可删除仓库(确认无快照依赖后再执行)
DELETE /_snapshot/my_backup注册失败对照
| 报错关键词 | 含义 | 处理方向 |
|---|---|---|
| mismatched path / not in path.repo | 仓库路径不在白名单内 | 补上 path.repo 并滚动重启节点 |
| repository_exception 连接或读写失败 | 某个节点无法访问该位置 | 检查挂载点、目录权限与网络连通 |
| repository already registered | 同一路径已被其他集群注册 | 为每个集群分配独立子目录 |
| invalid repository name | 仓库名含非法字符 | 只用小写字母、数字与下划线 |
用 NFS 做共享仓库要确认所有数据节点都能挂载并读写同一路径;把仓库指向某个节点的本地目录时,该节点故障会连同快照一起丢失,实质上不构成备份。