首页/数据/备份与容灾速查/Elasticsearch 快照与恢复
数据库与云备份56 条

Elasticsearch 快照与恢复

把索引与集群状态快照到共享仓库(S3 / 文件系统等):快照按段增量存储;用 SLM 策略可定时执行并自动保留。

备份与容灾速查数据更新于 2026-10-13

Elasticsearch 快照与恢复

把索引与集群状态快照到共享仓库(文件系统、S3、HDFS 等):快照按段增量存储,同一索引多次快照只传新增段,因此频繁执行的成本可控。用快照生命周期管理(SLM)策略可以定时执行并自动保留,恢复时按索引选择恢复到当前集群或新集群。

基本信息

适用平台Elasticsearch(版本间 API 与仓库插件差异较大)
仓库类型fs(共享文件系统)、s3、hdfs 等插件
前置配置各节点 path.repo 白名单内且路径一致
自动化SLM 策略定义仓库、时间表、保留与快照命名

典型使用场景

  • 日常索引备份:按天快照关键索引,出问题按索引恢复
  • 升级前留保护点:跨大版本前先做快照,异常时回退
  • 误删索引恢复:只恢复被删的索引,不必动整个集群
  • 跨集群迁移:把快照仓库挂到新集群,恢复索引完成搬迁
  • 合规留存:按 SLM 保留策略自动管理快照数量

注册仓库与快照

注册仓库与快照
# 1) 定义仓库(fs 类型),并确保所有节点 path.repo 已包含该路径
# repo.json: {"type":"fs","settings":{"location":"/mnt/es-backup"}}
curl -X PUT "localhost:9200/_snapshot/backup_repo" \
  -H 'Content-Type: application/json' -d @repo.json

# 2) 创建快照(wait_for_completion 等待完成)
curl -X PUT "localhost:9200/_snapshot/backup_repo/snap-2026.10.12?wait_for_completion=true"

# 3) 只恢复指定索引
curl -X POST "localhost:9200/_snapshot/backup_repo/snap-2026.10.12/_restore?wait_for_completion=true" \
  -H 'Content-Type: application/json' \
  -d '{"indices":"logs-2026.10.11","include_global_state":false}'

# 4) 查看仓库与快照状态
curl -s "localhost:9200/_snapshot/backup_repo/_all?verbose=false"

恢复参数读法

参数含义注意
indices要恢复的索引不填则恢复快照内全部
include_global_state是否恢复集群状态恢复到同一集群常设为 false
rename_pattern / rename_replacement恢复时重命名避免覆盖现有索引,适合并行比对
wait_for_completion是否等待完成大批量恢复建议异步并查任务状态
仓库位置需在 elasticsearch.yml 的 path.repo 白名单内,各节点路径保持一致,且运行 Elasticsearch 的用户要有读写权限;否则仓库注册直接失败。
跨大版本从快照恢复有限制:升级路径上应先用恢复演练或 reindex 到新集群验证,不要直接假定快照在新版本可用。
快照粒度是索引而不是文档:误删一批文档时,恢复整索引会连同其后的新增数据一起回退,实际做法通常是恢复到别名指向的新索引再做数据合并。SLM 策略要按天命名并设置保留份数,避免快照数量失控。

易错点

  • 各节点 path.repo 不一致或权限不足:仓库注册失败,快照任务根本无法创建
  • 恢复时 include_global_state 设为 true:集群级设置被整体覆盖,可能引入旧配置
  • 不指定 indices 做恢复:与现有索引冲突或覆盖线上数据
  • 跨大版本直接恢复:版本不兼容导致恢复失败,升级窗口内无法回退

数据来源与参考

  • Elasticsearch 官方文档(Snapshot and restore / SLM)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌