Elasticsearch 快照恢复 API 深度解析
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
概述
Elasticsearch 的快照恢复 API 是数据备份与恢复功能的核心组件,它允许用户从已创建的快照中恢复集群、数据流或特定索引。本文将全面解析该 API 的使用方法、参数含义以及最佳实践。
基本用法
要执行快照恢复操作,最基本的 API 调用格式如下:
POST /_snapshot/my_repository/my_snapshot/_restore
这个请求会从名为 my_repository
的仓库中恢复名为 my_snapshot
的快照。
前置条件
在执行恢复操作前,必须满足以下条件:
- 权限要求:需要具备
manage
或cluster:admin/snapshot/*
集群权限 - 集群状态:集群必须正常运行且有主节点
- 版本兼容性:快照版本必须与集群版本兼容
- 全局元数据可写:集群不能处于只读状态
- 数据流模板:恢复数据流前需确保存在匹配的索引模板
- 企业搜索加密密钥:如果快照包含 App Search 或 Workplace Search 数据,需先恢复加密密钥
关键参数详解
路径参数
<repository>
:必填,指定快照所在的仓库名称<snapshot>
:必填,指定要恢复的快照名称
查询参数
wait_for_completion
:是否等待恢复完成(默认 false)master_timeout
:等待主节点响应的超时时间
请求体参数
恢复范围控制
indices
:指定要恢复的索引或数据流(支持多目标语法)include_global_state
:是否恢复集群状态(默认 false)feature_states
:指定要恢复的功能状态
恢复行为控制
ignore_unavailable
:是否忽略快照中不存在的索引(默认 false)partial
:是否允许部分恢复(默认 false)rename_pattern
和rename_replacement
:重命名恢复的索引
索引设置
ignore_index_settings
:不恢复的索引设置index_settings
:要添加或修改的索引设置include_aliases
:是否恢复别名(默认 true)
集群状态恢复详解
当 include_global_state
设为 true 时,将恢复以下集群状态内容:
- 持久化集群设置
- 索引模板(包括新旧版本)
- Ingest 管道
- ILM 策略
- 存储的脚本
- 功能状态(7.12.0 及以上版本)
注意:启用此选项会完全替换集群中现有的非传统索引模板、持久设置、Ingest 管道和 ILM 策略。
实用示例
重命名恢复
POST /_snapshot/my_repository/snapshot_2/_restore?wait_for_completion=true
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1",
"include_aliases": false
}
此示例会将 index_1
和 index_2
分别重命名为 restored_index_1
和 restored_index_2
后恢复。
原地恢复
当需要修复损坏的索引时,可以采用原地恢复方式:
POST index_1/_close
POST /_snapshot/my_repository/snapshot_2/_restore?wait_for_completion=true
{
"indices": "index_1"
}
此操作会先关闭目标索引,然后从快照中恢复覆盖原索引。
最佳实践
- 测试恢复:在生产环境执行恢复前,先在测试环境验证
- 监控进度:使用恢复状态 API 监控大型恢复操作
- 资源规划:确保集群有足够资源处理恢复操作
- 版本兼容:特别注意跨版本恢复的兼容性问题
- 模板管理:恢复数据流前确保模板存在且配置正确
常见问题处理
- 恢复失败:检查集群日志获取详细错误信息
- 版本不兼容:考虑使用滚动升级或重建集群
- 权限不足:确认执行用户具有足够权限
- 磁盘空间不足:确保目标集群有足够存储空间
- 索引冲突:使用重命名参数或先删除冲突索引
通过深入理解快照恢复 API 的各项参数和功能,用户可以更灵活地管理 Elasticsearch 数据备份与恢复流程,确保数据安全性和业务连续性。
elasticsearch 项目地址: https://gitcode.com/gh_mirrors/elas/elasticsearch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考