恢复快照要注意什么
恢复是把仓库里的快照写回成索引:可以挑选索引、重命名到新名字、只恢复部分分片。恢复的目标索引必须不存在,或者处于关闭状态,否则请求会被直接拒绝,所以「先恢复到临时索引验证、再用别名切换」在生产上更稳妥。
基本信息
| 接口 | POST /_snapshot/<repo>/<snapshot>/_restore |
|---|---|
| 重命名 | rename_pattern 正则加 rename_replacement 分组引用,如 logs-(.+) 对应 restored-logs-$1 |
| 前置检查 | GET /_snapshot/<repo>/<snapshot> 看包含哪些索引、版本与分片数 |
| 异步执行 | 加 wait_for_completion=false 立即返回,用 recovery 接口看进度 |
| 常用参数 | indices、include_aliases、ignore_unavailable、partial |
典型使用场景
- 误删数据后的定点恢复:只恢复某几个索引,不影响其他数据
- 升级前验证:先恢复到临时索引,确认查询与聚合行为正常
- 跨集群迁移:目标集群注册同一仓库后从快照恢复
- 排查数据问题:恢复到临时索引后按条件检索原始记录
- 恢复演练:测量恢复耗时,验证备份真的可用
恢复流程
恢复流程
# 1. 先看快照里有什么:索引、版本、分片数
GET /_snapshot/my_backup/snapshot_2024-07-01
# 2. 恢复并重命名,避免覆盖线上索引;异步执行立即返回
POST /_snapshot/my_backup/snapshot_2024-07-01/_restore?wait_for_completion=false
{
"indices": "logs-2024.06",
"ignore_unavailable": true,
"include_aliases": false,
"rename_pattern": "logs-(.+)",
"rename_replacement": "restored-logs-$1"
}
# 3. 观察恢复进度
GET /_cat/recovery?v&active_only=true
# 4. 确认新索引可用后再切别名或删除旧索引
GET /_cat/indices/restored-logs-*?v恢复参数与取舍
| 参数 | 作用 | 注意 |
|---|---|---|
| indices | 限定要恢复的索引,支持通配 | 名字写错且未开容错会直接失败 |
| include_aliases | 是否一并恢复别名 | 误恢复别名可能把流量引到临时索引 |
| ignore_unavailable | 索引不存在时跳过而不报错 | 批量恢复与演练时常用 |
| rename_pattern 与 rename_replacement | 把快照里的索引恢复成新名字 | 目标名已存在时同样会失败 |
| partial | 允许恢复部分分片 | 只在集群健康前提下使用,慎用 |
恢复到已存在的索引会直接失败;若必须覆盖原索引,可先关闭目标索引再执行同名恢复,但更安全的做法是恢复成新名字后用别名切换流量。