《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.15.Snapshot (上) https://developer.aliyun.com/article/1228108
Snapshot 快照备份
1.创建 Snapshot
一个仓库可以包含多个 Snapshot,一个 Snapshot 在集群中的名字是唯一的。Snapshot 快照备份的内容仅包含截止快照开始时间之前的数据,快照之后的数据需要通过不断的增量
Snapshot 来捕获。通过 PUT 请求创建一个 Snapshot,默认备份集群所有可读索引、流,如果需要部分备份则可以通过传参来指定。
# wait_for_completion 参数表示是否要同步等 Snapshot 创建完成再返回 # PUT 请求如果传参为空则默认备份所有可读索引、流 # my_fs_backup:指定(已创建的)仓库名称 # snapshot_1:指定快照名称 PUT /_snapshot/my_fs_backup/snapshot_1?wait_for_completion=true { # indices:指定要进行快照备份的索引、流 "indices": "hundredsman,index_1,index_2", # ignore_unavailable:忽略不可用的索引和流 "ignore_unavailable": true, # include_global_state:是否保存集群全局状态 "include_global_state": false, # metadata:元数据,一些注释性的数据。 "metadata": { "taken_by": "james", "taken_because": "Hundreds man fighting for book backup." } } # 返回结果 { "snapshot": { "snapshot": "snapshot_1", "uuid": "HQHFSpPoQ1aY4ykm2o-a0Q", "version_id": 7100099, "version": "7.10.0", # Snapshot 备份的索引 "indices": [ "index_1", "index_2", "hundredsman" ], "data_streams": [], # 是否保存集群全局状态 "include_global_state": true, # 当前快照状态 "state": "SUCCESS", "start_time": "2021-09-03T12:46:56.237Z", "start_time_in_millis": 1630673216237, "end_time": "2021-09-03T12:46:56.237Z", "end_time_in_millis": 1630673216237, "duration_in_millis": 0, # 备份失败的索引和流 "failures": [], # 分片状态 "shards": { "total": 3, "failed": 0, "successful": 3 } } }
2.删除 Snapshot
删除 Snapshot 需要发送 DELETE 请求:
DELETE /_snapshot/my_fs_backup/snapshot_1 # 删除多个可以用逗号分隔或者通配符 DELETE /_snapshot/my_fs_backup/snapshot_2,snapshot_3 DELETE /_snapshot/my_fs_backup/snap*
如果 Snapshot 正在创建过程中,Elasticsearch 也会终止任务并删除所有 Snapshot 相关的数据。但要注意不能手动删除仓库里的备份数据,这样会有数据损坏的风险。
Restore恢复
发送 POST 请求从 Snapshot 恢复数据:
# 不带参数的请求默认恢复所有 Snapshot 中的索引、流 POST /_snapshot/my_fs_backup/snapshot_1/_restore # 如果需要恢复特定的索引、流,可以在 POST 参数中指定 POST /_snapshot/my_fs_backup/snapshot_1/_restore { "indices": "index*", "ignore_unavailable": true, # include_global_state默认为 true,是否保存集群全局状态 "include_global_state": false, # 重命名索引匹配规则,如:index_1 "rename_pattern": "index_(.+)", # 重命名索引为新的规则,如:re_index_1 "rename_replacement": "re_index_$1", # 是否包含别名 "include_aliases": false } # 正常返回结果 { "accepted": true } # 如果索引已经存在,会提示已经有同名索引存在,需要重命名。 { "error": { "root_cause": [ { # Exception 类型 "type": "snapshot_restore_exception", # 发生错误原因详情 "reason": "[my_fs_backup:snapshot_1/90A9o4hORUCv732HTQBfRQ] \ cannot restore index [index_1] because an open \ index with same name already exists in the cluster.\ Either close or delete the existing index or restore\ the index under a different name by providing a \ rename pattern and replacement name" } ] }, "status": 500 }
需要注意的是如果没有匹配到 Stream 流的模板,Stream 流是不能滚动创建的。所以如果有快照中包含有 Stream 流数据,要记得提前创建模板。
《Elastic Stack 实战手册》——三、产品能力——3.5 进阶篇——3.5.15.Snapshot (下) https://developer.aliyun.com/article/1228106