Docker环境下的ES快照备份

  • 仓库
  • 创建仓库
  • 查看仓库
  • 查看仓库列表
  • 快照
  • 创建快照
  • 查看快照
  • 删除快照
  • 还原


仓库

注册前要配置文件加上

path.repo: ["/usr/share/elasticsearch/backup"]
##注意ES容器备份地址只能选择/usr/share/elasticsearch目录

必须先注册一个快照仓库,然后才能进行快照和恢复操作,快照备份文件存放在仓库里。
如果是ES集群,备份的路径需要是所有节点都能够访问的地址,需要部署nfs,将仓库目录共享,并且所有ES节点都设置改目录为仓库目录。
nfs部署参考:nfs部署 如果多个集群注册同一个快照仓库,只有一个集群可以对仓库进行写访问,其他所有集群应该设置该仓库为 readonly 模式。
跨主版本时快照格式可能会改变,所以不同版本的集群写同一个快照仓库,某个版本写的快照可能对其他版本不可见,仓库快照也存在问题。ES不支持仓库对所有集群设置为readonly,其中一个集群和不同主版本的多个集群一起工作。

创建仓库

curl -XPUT "http://localhost:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d'
{
  "type": "fs",
  "settings": {
    "location": "/usr/share/elasticsearch/backup"
  }
}'

其中my_backup为仓库名称

查看仓库

curl -XGET "http://localhost:9200/_snapshot/my_backup"

查看仓库列表

curl -XGET "http://localhost:9200/_cat/repositories?v"
id                   type
elasticsearch_backup   fs
test                   fs

快照

一个仓库可以拥有同一个集群的多个快照。在一个集群中快照拥有一个唯一名字作为标识。

创建快照

curl -XPUT "http://localhost:9200/_snapshot/my_backup/snapshot_20210101?wait_for_completion=true" -H 'Content-Type: application/json' -d'
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false
}'

该命令即为在my_backup下创建名为snapshot_20210101的快照备份。
参数 wait_for_completion 决定请求是在快照初始化后立即返回(默认),还是等快照创建完成之后再返回。快照初始化时,所有之前的快照信息会被加载到内存,所以在一个大的仓库中改请求需要若干秒(甚至分钟)才能返回,即使参数 wait_for_completion 的值设置为 false。
要包含到快照中索引列表可以使用支持多个索引语法的 indices 参数来指定,不指定即为包含所有打开和启动状态的索引。
快照请求也支持 ignore_unavailable 选项,该选项设置为 true 时,在创建快照时会忽略不存在的索引。默认情况下,如果选项 ignore_unavailable 没有设值,一个索引缺失,快照请求会失败。
通过设置 include_global_state 为 false,可以阻止集群全局状态信息被保存为快照的一部分。默认情况下,如果如果一个快照中的一个或者多个索引没有所有主分片可用,整个快照创建会失败,该情况可以通过设置 partial 为 true 来改变。

查看快照

curl -XGET "http://localhost:9200/_snapshot/my_backup/snapshot_20210101"

这个命令返回快照的基本信息,包括开始合结束时间、创建快照的 ElasticSearch 版本、包含的索引列表、快照当前状态和快照期间产生的失败索引列表。快照的状态有:

状态

描述

IN_PROGRESS

The snapshot is currently running.

SUCCESS

The snapshot finished and all shards were stored successfully.

FAILED

The snapshot finished with an error and failed to store any data.

PARTIAL

The global cluster state was stored, but data of at least one shard wasn’t stored successfully. The failure section in this case should contain more detailed information about shards that were not processed correctly.

INCOMPATIBLE

The snapshot was created with an old version of Elasticsearch and therefore is incompatible with the current version of the cluster.

curl -XGET "http://localhost:9200/_snapshot/my_backup/_all"

查看my_backup仓库下的所有快照

删除快照

curl -XDELETE "http://localhost:9200/_snapshot/my_backup/snapshot_20210101"

还原

curl -XPOST "http://localhost:9200/_snapshot/my_backup/snapshot_20210101/_restore" -H 'Content-Type: application/json' -d'
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": true,
  "rename_pattern": "index_(.+)",
  "rename_replacement": "restored_index_$1"
}'

默认情况下,快照中的所有索引将被恢复,集群状态不被恢复。可以通过在恢复请求中使用 indices 和 include_global_state 选项来指定要恢复的索引和允许恢复集群全局状态。索引列表支持多索引语法。rename_pattern 和 rename_replacement 选项在恢复时通过正则表达式来重命名索引。设置 include_aliases 为 false 可以防止与索引关联的别名被一起恢复。
恢复操作可以在正常运行的集群上执行。已存在的索引只能在关闭状态下才能恢复,并且要跟快照中索引拥有相同数目的分片。还原操作自动打开关闭状态的索引,如果被还原索引在集群不存在,将创建新索引。如果集群状态通过 include_global_state (默认是 false)选项被还原,在集群中不存在的模板会被新增,已存在的同名模板会被快照中的模板替换。持久化设置会被添加到现有的持久化设置中。