ELK elasticsearch 快照与恢复模块(6th)

elasticsearch 快照和恢复模块可以创建单个索引或者整个集群的快照到远程的仓库。在最初的版本只支持共享文件系统存储,但是现在,各种后端可用通过官方支持的存储插件。

存储介质

在任何快照或者恢复操作之前,需要先完成一个快照存储介质的注册。

查看所有的存储介质:

curl localhost:9200/_snapshot/_all

curl localhost:9200/_snapshot

如果要查看单独的URL后面加上注册的快照存储介质名称。

共享文件存储介质

共享文件存储介质类型是fs,使用共享文件系统来存储快照。

假如共享文件存储介质挂载在/mount/back目录下,需要在elasticsearch.yml添加如下配置:

path.repo: ["/mount/back"]

否则在注册时,报如下错误:

{"error":"RepositoryException[[backup] failed to create repository]; nested: CreationException[Guice creation errors:\n\n1) Error injecting constructor, org.elasticsearch.repositories.RepositoryException: [backup] location [/mount/bak] doesn't match any of the locations specified by path.repo because this setting is empty\n  at org.elasticsearch.repositories.fs.FsRepository.<init>(Unknown Source)\n  while locating org.elasticsearch.repositories.fs.FsRepository\n  while locating org.elasticsearch.repositories.Repository\n\n1 error]; nested: RepositoryException[[backup] location [/mount/bak] doesn't match any of the locations specified by path.repo because this setting is empty]; ","status":500}

注册backup

如果location设置成相对路径,相对于path.repo参数的第一个路径而言的。

查看backup:

支持的参数有:

location 快照的位置,必须的。
compress 快照文件是否压缩。仅仅应用于元文件  (index mapping and settings)。数据文件不压缩。默认是true。
chunk_size 在快照时,大文件可以分块。块大小以字节为单位或使用大小数值,如1g,10m,5k。默认是null,块无限大。
max_restore_bytes_per_sec 每个节点恢复速率。默认40mb/s。
max_snapshot_bytes_per_sec 每个节点快照速率。默认40mb/s。

Read-only URL存储介质

类型为url,URL存储介质支持的协议有:http、https、ftp、file和jar。URL存储介质以http:、https: 和 ftp: URLs必须列入 repositories.url.allowed_urls 允许的URLs白名单中,支持通配符。

存储介质插件

如s3、ec2、HDFS等等。

快照

一个存储介质可以有同一集群的多个快照。同一个集群中快照名称必须唯一。如:

PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true

wait_for_completion 参数指定无论请求是否在快照初始化完后立即返回(默认)或者等待快照完成。

在快照初始化时,所有以前的快照信息被加载到内存中。即时wait_for_completion参数设置为false,对于大的存储可能需要几秒钟甚至几分钟才返回。

也可以对指定的索引创建快照,如下所示:

PUT /_snapshot/backup/snapshot_1

{

"indices": "index_1,index_2",

"ignore_unavailable": "true",

"include_global_state": false

}

查看当前正在运行的所有快照列表的详细信息:

GET /_snapshot/_status

Elasticsearch

"state": "SUCCESS" 快照创建成功。

查看正在执行的指定快照的详细信息:

GET /_snapshot/backup/_status

如果同时指定了存储介质和快照,即时不是正在执行的,也会返回详细的信息:

GET /_snapshot/backup/snapshot_1/_status

指定多个快照也是可以的,如:

GET /_snapshot/backup/snapshot_1,snapshot_2/_status

删除快照:

DELETE /_snapshot/backup/snapshot_1

当快照从存储介质中删除,elasticsearch删除与被删除快照关联的所有问题,并且不使用任何其它快照。在创建快照过程中执行删除快照操作,那么快照会被中止并会清理掉该过程中所创建的所有文件。因此,删除快照操作可以用作于中止误启动的耗时长的快照操作。

删除快照存储介质设置:

DELETE /_snapshot/backup

当存储介质被删除了,elasticsearch仅仅删除快照存储介质相关联的位置。

恢复

快照可以通过下面的命令进行恢复操作:

POST /_snapshot/backup/snapshot_1/_restore

默认情况下,快照中的所有索引和集群状态都得到了恢复。可以选定要恢复的索引,也可以通过指定include_global_state选项来防止全局集群状态被恢复。

索引列表支持多索引语法。rename_pattern 和 rename_replacement 选项可用于在恢复时使用正则表达式对索引进行重命名。

设置include_aliases为false,防止与索引相关联的别名被一起恢复。

POST /_snapshot/backup/snapshot_1/_restore

{

"indices": "index_1,index_2",

"ignore_unavailable": "true",

"include_global_state": false,

"rename_pattern": "index_(.+)",

"rename_replacement": "restored_index_$1"

}

恢复操作可以在正常运行的集群上执行。但是,现有的索引如果是关闭的并且该索引在快照中有相同的分片数才能被恢复。在集群中如果索引被关闭了恢复操作会自动打开索引,如果索引不存在,将会创建新的索引。

部分恢复:

默认情况下,如果一个或多个索引在快照中没有可用的分片,整个恢复操作将失败。可以通过设置部分恢复为true,以恢复这些索引。注意:在这种情况下,只有成功的分片快照被恢复,丢失的分片将被重建为空的。

在恢复过程中更改索引设置:

在恢复过程中,大部分索引设置可以被覆盖。如下面的例子恢复index_1索引,不创建任何副本,且刷新间隔设置为默认。

POST /_snapshot/backup/snapshot_1/_restore

{

"indices": "index_1",

"index_settings": {

     "index.number_of_replicas": 0

},

"ignore_index_settings": [

     "index.refresh_interval"

     ]

}

注意:一些设置如index.number_of_shards在恢复过程中是不能被改变的。

恢复到另一个集群

快照存储的信息不依赖于特定的集群或集群名称。因此,可以恢复到另一个集群。这需要在新的集群上注册快照包含的存储介质,并启动恢复过程。新集群不必具有相同的大小或者拓扑,但是,新集群的版本要与所创建的快照的版本一样或者更高。

可以减少索引副本以恢复成更小的集群。

如果原始集群的索引使用分片分配过滤被分配到特定节点,同样的规则将在新集群中强制执行。因此,如果新的集群不包含与该索引恢复的分配属性的适当节点,该索引将不会恢复成功的,除非这些索引在恢复操作过程中分配设置被更改。

恢复操作也支持wait_for_completion参数,会阻止客户端一直到操作完成。这是获知关于操作完成的最简单方法。

同一时刻,只允许执行一个快照或者一个恢复操作。

恢复操作使用标准的分片恢复机制。因此,当前运行的任何恢复操作可通过删除正在恢复的索引来中止。该操作的结果将会把删除索引的数据从集群中清除。

耗费一下午的时间研究快照和恢复相关的知识,是为了把线上的elasticsearch 1.7版本升级到2.0.0做准备的。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:3   其中:访客  3   博主  0

  1. Aceslup 4

    感觉这章很乱啊

  2. 5

    一会儿是/mount/back,一会儿是/mount/bak。不晕也得晕。

  3. Aceslup 4

    感觉复杂啊。继续。