通过 Elasticsearch 快照功能,将集群中的索引数据备份到阿里云对象存储 OSS,并在需要时从备份中恢复数据。手动快照适用于数据迁移、特定时间点恢复、开发测试环境搭建以及高危操作前的安全备份。与自动快照相比,手动快照在快照范围和时间上更灵活,但需要自行管理快照的生命周期。
数据备份与恢复依赖 elasticsearch-repository-oss 插件,阿里云 Elasticsearch 实例默认已安装且不可卸载。详情请参见 elasticsearch-repository-oss。
快照仅保存索引数据,不保存监控数据(.monitoring、.security_audit前缀索引)、元数据、Translog、实例配置、软件包、插件和日志。本文中的命令均可在 Kibana 控制台的 Dev Tools 中执行,详情请参见通过Kibana连接集群。
创建快照仓库
快照仓库是存放快照的逻辑容器。创建仓库前,需准备一个与 Elasticsearch 实例同地域的 OSS Bucket(建议使用标准存储类型)。具体操作请参见创建存储空间。RAM 用户需具备 AliyunOSSFullAccess 权限策略,具体操作请参见为RAM用户授权。
以下示例创建名为 my_backup 的仓库。
云上集群
PUT _snapshot/my_backup/
{
"type": "oss",
"settings": {
"endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
"access_key_id": "xxxx",
"secret_access_key": "xxxxxx",
"bucket": "xxxxxx",
"compress": true,
"chunk_size": "500mb",
"base_path": "snapshot/"
}
}8.x 版本自建集群
自建集群需先安装 elasticsearch-repository-oss 插件,具体操作请参见elasticsearch-repository-oss插件。自建集群使用不同版本的插件,参数名需添加 oss.client. 前缀。
PUT /_snapshot/my_backup
{
"type": "oss",
"settings": {
"oss.client.endpoint": "oss-cn-shanghai.aliyuncs.com",
"oss.client.access_key_id": "xxx",
"oss.client.secret_access_key": "xxx",
"oss.client.bucket": "xxxxxx",
"oss.client.base_path":"snapshot/",
"oss.client.compress": true
}
}参数说明
参数 | 说明 |
endpoint | OSS Bucket 的内网访问域名。获取方式请参见地域和Endpoint。 |
access_key_id | RAM 用户的 AccessKey ID。获取方式请参见创建AccessKey。 |
secret_access_key | RAM 用户的 AccessKey Secret。获取方式请参见创建AccessKey。 |
bucket | OSS Bucket 名称,需使用已存在的 Bucket。 |
compress | 是否压缩快照的元数据文件(索引映射和设置)。数据文件不受此参数影响。默认值:false。 |
chunk_size | 快照过程中分块上传的大小限制。超过此大小的数据会被分块上传到 OSS。 |
base_path | 仓库的起始路径,默认为根目录。可指定子目录隔离不同集群或环境的快照,例如 |
验证仓库连通性
POST _snapshot/my_backup/_verify配置正确时返回所有连接成功的节点列表。如果返回错误,检查 Endpoint、Bucket 名称及 RAM 权限配置。
获取仓库信息
# 获取所有仓库的信息
GET _snapshot
# 获取指定仓库的信息
GET _snapshot/my_backup创建快照
为全部索引创建快照
PUT _snapshot/my_backup/snapshot_1此命令为所有 open 状态的索引创建名为 snapshot_1 的快照,命令立即返回并在后台执行。添加 wait_for_completion=true 参数可阻塞直到备份完成:
PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true一个仓库可包含多个快照。首次创建快照时备份全量数据,后续快照仅备份增量数据,因此速度更快。
为指定索引创建快照
PUT _snapshot/my_backup/snapshot_2
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false
}参数 | 说明 |
indices | 指定要备份的索引,多个索引用逗号分隔,支持通配符(如 |
ignore_unavailable | 设为 true 时,指定索引不存在则忽略而非失败。 |
include_global_state | 设为 false 时不备份集群全局状态,仅备份数据时建议设为 false。 |
查看快照信息
# 查看所有快照
GET _snapshot/my_backup/_all
# 查看指定快照
GET _snapshot/my_backup/snapshot_1
# 查看快照详细状态(含每个索引和分片的统计值)
GET _snapshot/my_backup/snapshot_1/_status删除快照
DELETE _snapshot/my_backup/snapshot_1如果快照正在进行中,此命令会中断快照进程并删除已创建的部分数据。
严禁直接在 OSS 控制台或通过其他工具删除快照文件,此操作会破坏增量备份链,可能导致后续所有快照损坏且无法恢复。
从快照恢复数据
恢复前注意:
不建议恢复
.开头的系统索引,否则可能导致 Kibana 访问失败。如果集群中已存在同名索引,需先关闭或删除该索引,否则恢复失败。
跨地域恢复需先将 OSS 中的快照数据迁移到目标地域,再恢复到目标集群。OSS 间迁移请参见迁移实施。
在目标集群中创建 OSS 仓库
恢复前需在目标集群中创建仓库,映射到与备份相同的 OSS 地址,参数配置请参见创建快照仓库。
PUT _snapshot/my_backup_restore/
{
"type": "oss",
"settings": {
"endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
"access_key_id": "xxxx",
"secret_access_key": "xxxxxx",
"bucket": "xxxxxx",
"compress": true,
"chunk_size": "500mb",
"base_path": "snapshot/"
}
}恢复指定索引
恢复指定索引并重命名,避免与现有索引冲突:
POST /_snapshot/my_backup_restore/snapshot_1/_restore
{
"indices": "index_1",
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1"
}参数 | 说明 |
indices | 指定要恢复的索引,忽略快照中的其他索引。 |
rename_pattern | 正则表达式模板,匹配待恢复索引的名称。 |
rename_replacement | 重命名后的索引名称,支持正则捕获组引用。 |
恢复所有索引(除系统索引)
POST _snapshot/my_backup_restore/snapshot_1/_restore
{"indices": "*,-.monitoring*,-.security*,-.kibana*,-.internal.alerts*,-.alerts*","ignore_unavailable": true}以上排除模式为常见系统索引示例。不同版本的集群可能包含其他系统索引(如.ds-ilm-history-*、.slo-*等),需根据实际集群中的系统索引调整排除列表。8.x 版本集群通常还需额外排除-.ds*等 data stream backing index。
恢复所有索引(包含系统索引)
POST _snapshot/my_backup_restore/snapshot_1/_restore_restore API 立即返回,恢复在后台进行。添加 wait_for_completion=true 可阻塞直到恢复完成:
POST _snapshot/my_backup_restore/snapshot_1/_restore?wait_for_completion=true恢复到 Indexing Service 实例
恢复快照到 Indexing Service 实例时,需通过 ignore_index_settings 参数忽略不兼容的索引设置:
POST /_snapshot/my_backup_restore/snapshot_1/_restore
{
"indices": "index_1",
"ignore_index_settings": [
"index.apack.cube.following_index"
]
}查看快照恢复信息
通过 _recovery API 监控恢复的状态和进度。
# 查看指定索引的恢复状态
GET restored_index_1/_recovery
# 查看集群中所有索引的恢复信息(可能包含与当前恢复无关的分片信息)
GET /_recovery/输出结果中的关键字段:
字段 | 说明 |
type | 恢复类型。 |
source | 待恢复的快照和仓库。 |
percent | 恢复进度百分比。 |
取消恢复
删除正在恢复的索引即可取消恢复操作:
DELETE /restored_index_3此命令会停止恢复进程,同时删除所有已恢复到集群中的数据。