通过快照备份与恢复命令,您可以实现手动备份与恢复阿里云Elasticsearch实例的索引数据,并将备份的数据保存到一个共享仓库里。本文介绍如何手动备份与恢复数据。
背景信息
Elasticsearch数据备份与恢复依赖于elasticsearch-repository-oss插件,阿里云Elasticsearch实例默认已安装该插件且不可卸载。关于该插件的详细信息,请参见elasticsearch-repository-oss。
前提条件
开通对象存储服务OSS(Object Storage Service),并新建一个Bucket。
注意 请创建标准存储类型的Bucket(不支持归档存储类型),且Bucket的地域与Elasticsearch实例的地域保持一致。
注意事项
- 手动备份与恢复数据前,请确保集群的状态正常,否则会影响备份任务。
- 快照仅保存索引数据,不保存Elasticsearch实例自身的监控数据(例如以
.monitoring
和.security_audit
为前缀的索引)、元数据、Translog、实例配置数据、Elasticsearch软件包、自带和自定义的插件、Elasticsearch日志等。 - 本文中的代码均可以在阿里云Elasticsearch实例的Kibana控制台上执行。详细信息,请参见登录Kibana控制台。
创建仓库
创建一个名称为my_backup的仓库。
注意 创建仓库时,请使用PUT的请求方式;更新仓库设置时,请使用POST而不是PUT方式,否则会更新已有仓库的设置。
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/"
}
}
参数 | 说明 |
---|---|
endpoint | OSS Bucket的内网访问域名。获取方式,请参见访问域名和数据中心。 |
access_key_id | 用于标识用户。获取方式,请参见获取AccessKey。 |
secret_access_key | 用于验证用户的密钥。获取方式,请参见获取AccessKey。 |
bucket | OSS Bucket的名称,需要一个已经存在的Bucket。获取方式,请参见创建存储空间。 |
compress | 打开快照文件的压缩功能:
|
chunk_size | 当您上传的数据非常大时,配置此参数可以限制快照过程中分块的大小。超过这个大小,数据将会被分块上传到OSS中。 |
base_path | 仓库的起始位置,默认为根目录。 |
获取仓库信息
- 获取所有仓库的信息
GET _snapshot
- 获取指定仓库的信息
GET _snapshot/my_backup
创建快照
- 为全部索引创建快照
PUT _snapshot/my_backup/snapshot_1
以上命令会为所有打开的索引创建名称为snapshot_1的快照,并保存到my_backup仓库中。该命令会立刻返回,并在后台执行备份任务。如果您希望任务执行完成后再返回,可通过添加wait_for_completion实现。该参数会阻塞调用直到备份完成,如果是大型快照,需要很长时间才能返回。PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
说明- 一个仓库可以包含多个快照,每个快照中可以包含所有、部分或单个索引的备份数据。
- 第一次创建快照时,系统会备份所有的数据,后续所有的快照仅备份已存快照和新快照之间的增量数据。随着快照的不断进行,备份也在增量的添加和删除。这意味着后续备份会相当快速,因为它们只传输很小的数据量。
- 为指定索引创建快照
系统默认会备份所有打开的索引。如果您在使用Kibana,并且考虑到磁盘空间大小因素,不需要把所有诊断相关的
.kibana
索引都备份起来,那么可以在创建快照时,指定需要备份的索引。PUT _snapshot/my_backup/snapshot_2 { "indices": "index_1,index_2" }
以上命令只会备份名称为index_1和index_2的索引。
查看快照信息
- 查看所有快照信息
GET _snapshot/my_backup/_all
预期结果如下:{ "snapshots": [ { "snapshot": "snapshot_1", "uuid": "vIdSCkthTeGa0nSj4D****", "version_id": 5050399, "version": "5.5.3", "indices": [ ".kibana" ], "state": "SUCCESS", "start_time": "2018-06-28T01:22:39.609Z", "start_time_in_millis": 1530148959609, "end_time": "2018-06-28T01:22:39.923Z", "end_time_in_millis": 1530148959923, "duration_in_millis": 314, "failures": [], "shards": { "total": 1, "failed": 0, "successful": 1 } }, { "snapshot": "snapshot_3", "uuid": "XKO_Uwz_Qu6mZrU3Am****", "version_id": 5050399, "version": "5.5.3", "indices": [ ".kibana" ], "state": "SUCCESS", "start_time": "2018-06-28T01:25:00.764Z", "start_time_in_millis": 1530149100764, "end_time": "2018-06-28T01:25:01.482Z", "end_time_in_millis": 1530149101482, "duration_in_millis": 718, "failures": [], "shards": { "total": 1, "failed": 0, "successful": 1 } } ] }
- 根据快照名查看指定快照的信息
GET _snapshot/my_backup/snapshot_3
预期结果如下:{ "snapshots": [ { "snapshot": "snapshot_3", "uuid": "vIdSCkthTeGa0nSj4D****", "version_id": 5050399, "version": "5.5.3", "indices": [ ".kibana" ], "state": "SUCCESS", "start_time": "2018-06-28T01:22:39.609Z", "start_time_in_millis": 1530148959609, "end_time": "2018-06-28T01:22:39.923Z", "end_time_in_millis": 1530148959923, "duration_in_millis": 314, "failures": [], "shards": { "total": 1, "failed": 0, "successful": 1 } } ] }
- 使用_status API查看指定快照的信息
GET _snapshot/my_backup/snapshot_3/_status
_status API可以查看快照的详细信息。不仅包括快照的总体状况,也包括每个索引和每个分片的统计值。执行成功后,返回结果如下。{ "snapshots": [ { "snapshot": "snapshot_3", "repository": "my_backup", "state": "IN_PROGRESS", "shards_stats": { "initializing": 0, "started": 1, "finalizing": 0, "done": 4, "failed": 0, "total": 5 }, "stats": { "number_of_files": 5, "processed_files": 5, "total_size_in_bytes": 1792, "processed_size_in_bytes": 1792, "start_time_in_millis": 1409663054859, "time_in_millis": 64 }, "indices": { "index_3": { "shards_stats": { "initializing": 0, "started": 0, "finalizing": 0, "done": 5, "failed": 0, "total": 5 }, "stats": { "number_of_files": 5, "processed_files": 5, "total_size_in_bytes": 1792, "processed_size_in_bytes": 1792, "start_time_in_millis": 1409663054859, "time_in_millis": 64 }, "shards": { "0": { "stage": "DONE", "stats": { "number_of_files": 1, "processed_files": 1, "total_size_in_bytes": 514, "processed_size_in_bytes": 514, "start_time_in_millis": 1409663054862, "time_in_millis": 22 } } } } } } ] }
删除快照
删除指定的快照。如果该快照正在进行,执行以下命令,系统会中断快照进程并删除仓库中创建到一半的快照。
DELETE _snapshot/my_backup/snapshot_3
注意 删除快照请使用DELETE API,而不能使用其他机制删除(例如手动删除可能会造成备份严重损坏)。因为快照是增量的,很多快照可能依赖于之前的备份数据。DELETE
API能够过滤出还在被其他快照使用的数据,只删除不再被使用的备份数据。
从快照恢复
注意 建议不要恢复
.
开头的系统索引,此操作可能会导致Kibana访问失败。
- 恢复所有索引(包含
.
开头的系统索引)POST _snapshot/my_backup/snapshot_1/_restore
- 假设snapshot_1中包含5个索引,那么这5个索引都会被恢复到集群中。
- _restore API会立刻返回,恢复进程会在后台进行。如果您希望调用阻塞直到恢复完成,可以添加wait_for_completion参数。
POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true
- 恢复所有索引(除
.
开头的系统索引)POST _snapshot/my_backup/snapshot_1/_restore {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}
- 恢复指定索引
如果您需要在不替换现有数据的前提下,恢复旧版本的数据来验证内容,或者进行其他处理,可恢复指定的索引,并重命名该索引。
POST /_snapshot/my_backup/snapshot_1/_restore { "indices": "index_1", "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" }
参数 说明 indices 只恢复index_1索引,忽略快照中的其他索引。 rename_pattern 查找正在恢复的索引,该索引名称需要与提供的模板匹配。 rename_replacement 重命名查找到的索引。
查看快照恢复信息
您可以通过_recovery API来监控快照恢复的状态、进度等信息:
- 查看快照中,指定索引的恢复状态。
GET restored_index_3/_recovery
- 查看集群中的所有索引的恢复信息(可能包含跟您的恢复进程无关的其他分片的恢复信息)。
GET /_recovery/
预期结果如下:{ "restored_index_3" : { "shards" : [ { "id" : 0, "type" : "snapshot", "stage" : "index", "primary" : true, "start_time" : "2014-02-24T12:15:59.716", "stop_time" : 0, "total_time_in_millis" : 175576, "source" : { "repository" : "my_backup", "snapshot" : "snapshot_3", "index" : "restored_index_3" }, "target" : { "id" : "ryqJ5lO5S4-lSFbGnt****", "hostname" : "my.fqdn", "ip" : "10.0.**.**", "name" : "my_es_node" }, "index" : { "files" : { "total" : 73, "reused" : 0, "recovered" : 69, "percent" : "94.5%" }, "bytes" : { "total" : 79063092, "reused" : 0, "recovered" : 68891939, "percent" : "87.1%" }, "total_time_in_millis" : 0 }, "translog" : { "recovered" : 0, "total_time_in_millis" : 0 }, "start" : { "check_index_time" : 0, "total_time_in_millis" : 0 } } ] } }
输出结果会展示所有恢复中的索引,并列出这些索引中的所有分片。同时每个分片中会展示启动和停止时间、持续时间、恢复百分比、传输字节数等统计值。部分参数说明如下。参数 说明 type 恢复的类型。snapshot表示这个分片是在从一个快照恢复。 source 待恢复的快照和仓库。 percent 恢复的进度。94.5%表示对应分片已经恢复了94.5%的数据。
删除正在进行快照恢复的索引
通过DELETE命令删除正在恢复的索引,取消恢复操作。
DELETE /restored_index_3
如果restored_index_3正在恢复中,以上删除命令会停止恢复,同时删除所有已经恢复到集群中的数据。