手动备份与恢复

更新时间:
复制为 MD 格式

通过 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

仓库的起始路径,默认为根目录。可指定子目录隔离不同集群或环境的快照,例如 snapshot/prod/snapshot/dev/

验证仓库连通性

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

指定要备份的索引,多个索引用逗号分隔,支持通配符(如 logs-*)。

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

恢复类型。snapshot 表示从快照恢复。

source

待恢复的快照和仓库。

percent

恢复进度百分比。

取消恢复

删除正在恢复的索引即可取消恢复操作:

DELETE /restored_index_3
重要

此命令会停止恢复进程,同时删除所有已恢复到集群中的数据。

相关文档