摘要: 在Elasticsearch中的能够建立快照,它建立单个索引或整个群集到一个远程的存储库中。在之前的版本中,系统只支持共享存储的快照建立,最新的版本能够经过插件支持更多的方式。在执行快照操做前,须要在Elasticsearch中进行注册快照仓库。node
在Elasticsearch中的能够建立快照,它建立单个索引或整个群集到一个远程的存储库中。在之前的版本中,系统只支持共享存储的快照建立,最新的版本能够经过插件支持更多的方式。在执行快照操做前,须要在Elasticsearch中进行注册快照仓库。注册仓库的设置须要执行仓库类型,例如:正则表达式
请求:PUT /_snapshot/my_backup算法
参数:json
{
"type": "fs", "settings": { ... repository specific settings ... } }
当注册后,能够经过查询来获得以前注册的信息。固然系统也支持用逗号分开来查询多个注册,支持通配符查询多个注册,甚至可使用_all查询全部注册。api
请求:GET /_snapshot/my_backup服务器
返回值:dom
{
"my_backup": { "type": "fs", "settings": { "compress": "true", "location": "/mount/backups/my_backup" } } }
共享文件系统存储("type": "fs")使用共享文件系统来存储快照。为了注册共享的文件系统存储库,必须将同一个共享文件系统安装到全部主节点和数据节点上相同的位置上。这个位置(或它的父目录)必须在全部主节点数据节点上设置path.repo参数。假设共享文件系统安装在/mount/backups/my_backup目录下,在elasticsearch.yml文件中的设置应增长:elasticsearch
path.repo: ["/mount/backups", "/mount/longterm_backups"]oop
备注:path.repo设置支持微软Windows UNC路径,只要服务器名和共享名称进行正确的设置,例如:url
path.repo: ["\\\\MY_SERVER\\Snapshots"]
只有当全部的节点都从新启动后,使用如下面的命令能够为名称为my_backup的共享文件系统库进行快照和恢复,例如:
请求:PUT http://localhost:9200/_snapshot/my_backup
参数:
{
"type": "fs", "settings": { "location": "/mount/backups/my_backup", "compress": true } }
系统支持相对路径的,若是存储位置指定为相对路径,则不须要写具体的全路径,例如:
请求:PUT http://localhost:9200/_snapshot/my_backup
参数:
{
"type": "fs", "settings": { "location": "my_backup", "compress": true } }
系统支持一下参数:
location:快照位置,必需要有。
compress:打开快照文件的压缩。压缩仅适用于元数据文件,数据文件不进行压缩。默认为true。
chunk_size:若是须要能够把大的文件分解成不一样的快照。块的大小能够指定字节例如1G,10m,5K。默认值为null表示无限的块大小。
max_restore_bytes_per_sec:使每一个节点的恢复的速度。默认为40MB每秒。
max_snapshot_bytes_per_sec:每一个节点生成的快照的速度。默认为40MB每秒。
readonly:使存储库只读。默认为false。
只读仓库
URL仓库("type": "url")被用在共享文件系统库中建立只读方式数据仓库。在url参数中指定指向共享的文件系统存储库的根节点,支持如下设置:
url:强制性的快照位置。
url参数支持如下协议:"http", "https", "ftp", "file" , "jar",在http:, https:, and ftp: 这些协议中,能够支持白名单,白名单的设置在 repositories.url.allowed_urls 参数中,例如:
repositories.url.allowed_urls: ["http://www.example.org/root/*", "https://*.mydomain.com/*?*#*"]
存储库能够经过插件支持更多的方式,好比:
AWS云插件的S3存储库,Hadoop的HDFS插件环境,Azure云存储库插件。
当一个存储库被注册时,它当即被验证在全部主节点和数据节点上,以确保它在群集中的全部节点上均可以使用。验证参数可用于在注册或更新存储库时显式禁用,例如:
请求:PUT /_snapshot/s3_repository?verify=false
参数:
{
"type": "s3", "settings": { "bucket": "my_s3_bucket", "region": "eu-west-1" } }
验证过程也能够经过运行如下命令来手动执行:
POST /_snapshot/s3_repository/_verify
它返回一个节点列表,若是验证过程失败,则会成功验证或错误消息。
本文由赛克 蓝德(secisland)原创,转载请标明做者和出处。
一个存储库能够包含同一个群集的多个快照。快照在集群内的名称是惟一的。在一个库中建立名称为snapshot_1快照能够执行下面的命令:
PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true
wait_for_completion参数指定快照初始化后当即返回(默认)仍是等待快照完成后返回。在快照初始化时,全部之前的快照信息加载到内存,这意味着建立一个大的库快照可能须要几秒钟(甚至几分钟)。因此有时候wait_for_completion参数设置为false也是须要等待一会的。
默认状况下全部打开的快照和在集群中开始索引时建立,此行为能够经过指定快照请求中的索引列表来改变,例如:
请求:PUT /_snapshot/my_backup/snapshot_1
参数:
{
"indices": "index_1,index_2", "ignore_unavailable": "true", "include_global_state": false }
可使用支持多索引语法的索引参数来指定快照的索引列表。快照请求也支持ignore_unavailable选项,将它设置为true时能够在快照建立过程当中把不存在的索引忽略掉。默认状况下,当ignore_unavailable选项不设置或者设置为false的时候,若是不存在索引,索引的快照请求将失败。经过设置include_global_state为false能够防止集群全局状态被被存储为快照的一部分。默认状况下,若是有一个或多个索引没有可用的主分片整个快照会失败,这种行为能够经过设置部分来改变。
索引快照处理是渐进的。在索引快照的过程当中Elasticsearch会分析索引文件的列表是否已存储在存储库中,同时复制上次建立的快照或更改的文件。这容许在一个紧凑形式的存储库中保存多个快照,快照的过程是非阻塞的方式执行。当对索引正在执行快照时全部的索引和搜索操做能够继续执行。然而,快照执行的数据是在快照建立时的时间点肯定的,因此在快照过程开始后添加到索引中的记录将不会再快照中出现。在1.2.0以前版本以前,若是群集有迁移或者在索引中初始化分片时会失败,在1.2.0以后,快照的操做会等待这些完成后再操做。一个快照除了建立集群的副本外,还能够存储全局群集元数据,其中包括持久性群集设置和模板。临时设置和注册的快照库不会存储为快照的一部分。
在任什么时候间只有一个快照过程在集群中被执行。而一个特定的快照被建立分片时,这分片不能移动到另外一个节点,它可能干扰再平衡过程和过滤操做。一次快照完成Elasticsearch只能移动一块到另外一个节点(根据当前配置过滤设置和调整算法)。一旦一个快照完成,关于这个快照的信息,可使用如下命令来得到:
GET /_snapshot/my_backup/snapshot_1
相似的仓库,对多个快照信息能够经过一次进行查询,以及支持通配符,或者用_all查询全部:
GET /_snapshot/my_backup/snapshot_*,some_other_snapshot
若是一些快照不可用,该命令将失败。布尔参数ignore_unvailable可用于返回全部目前可用的快照。可使用如下命令查询当前正在运行的快照:
GET localhost:9200/_snapshot/my_backup/_current
快照能够从使用下列命令的存储库中删除:
DELETE /_snapshot/my_backup/snapshot_1
当快照是从库中删除时,Elasticsearch将删除与快照关联的和其余快照也不使用的全部文件,若是执行快照建立的过程当中同时删除快照,则快照建立的过程会中止,同时删除相关的文件。所以,删除快照操做能够用来取消被错误启动的长时间运行快照操做。使用下面的命令能够删除存储库:
DELETE /_snapshot/my_backup
当一个库被删除,Elasticsearch仅删除存储库的位置的引用,快照自己并无被删除。
使用如下命令可恢复快照:
POST /_snapshot/my_backup/snapshot_1/_restore
默认状况下,快照中的全部索引以及群集状态将被恢复,在恢复include_global_state选项时,能够指定具体的索引和集群状态被恢复。索引的列表支持多索引语法。rename_pattern和rename_replacement选项也可用于重命名索引,可使用正则表达式,该表达式支持引用原始文本。设置include_aliases为假能够防止相关索引的别名被一块儿恢复,例如:
请求:POST /_snapshot/my_backup/snapshot_1/_restore
参数:
{
"indices": "index_1,index_2", "ignore_unavailable": "true", "include_global_state": false, "rename_pattern": "index_(.+)", "rename_replacement": "restored_index_$1" }
恢复操做能够在一个功能集群上执行。在快照索中有相同数量分片的索引若是是关闭的,则只能恢复。若是索引是关闭的则恢复操做会自动打开索引,若是索引在集群中不存在,恢复操做将会建立新的索引,若是恢复群集状态,则在该群集中不存在的模板将被添加,已恢复的模板会替换为具备相同名称的现有模板。恢复中的设置被添加到现有的设置中。
部分恢复,默认状况下,若是一个或更多的索引若是没有可用的快照碎片,整个恢复操做将失败。若是一些碎片没有快照,经过设置partial为true,仍能够恢复部分索引。请注意,在这种状况下只有有分片的索引会被正确恢复,没有的索引会创建空的索引。
在恢复过程当中改变索引设置,在恢复过程当中大多数索引的设置能够被覆盖。例如,下面的命令将不建立任何副本而切换回默认刷新间隔的恢复索引index_1:
请求:POST /_snapshot/my_backup/snapshot_1/_restore
参数:
{
"indices": "index_1", "index_settings": { "index.number_of_replicas": 0 }, "ignore_index_settings": [ "index.refresh_interval" ]}
请注意,一些设置,如index.number_of_shards在恢复操做期间是没法更改的。
恢复到不一样的集群,快照中存储的信息不依赖于特定的群集或群集名称。所以,它有可能恢复从一个群集到另外一个群集的快照。仅要求注册存储库中包含快照,并启动恢复过程,新的群集不具备相同的大小或拓扑结构。若是一个集群有的空间比较小,须要考虑的事情有:首先,要确保新的集群有足够的容量来存储快照中的全部索引。在还原的过程当中,能够改变索引设置,以减小复制的次数,这能够帮助将快照恢复到较小的群集,也能够选择使用索引参数。在版本1.5.0以前,Elasticsearch没有检查恢复持续的设置使得有可能恢复出错,参数discovery.zen.minimum_master_nodes 禁用一个小集群直到添加所需的主节点数。从版本1.5.0此的设置将被忽略。若是在原始集群的索引被分配到特定的节点,使用过滤分片配置,一样的规则将在新的集群执行。所以,若是新的群集不包含具备已有属性的节点,则该恢复的索引能够被分配,除非这些索引分配设置在恢复操做期间改变,不然不会恢复成功。
快照statusedit
使用如下命令可得到当前运行快照的详细状态信息列表:
GET /_snapshot/_status
下面的命令将返回有关当前正在运行的快照的信息。经过指定一个存储库的名称,能够将结果限制为特定的存储库:
GET /_snapshot/my_backup/_status
若是指定了存储库名称和快照标识,该命令将返回给定快照的详细状态信息:
GET /_snapshot/my_backup/snapshot_1/_status
一样支持多个id的查询,例如:
GET /_snapshot/my_backup/snapshot_1,snapshot_2/_status
监控快照恢复过程
当快照的进度和恢复正在运行有几种方法来监视它们过程。wait_for_completion参数会阻止客户端直到操做完成。这是最简单的方法,能够用来得到有关操做完成的通知。
快照操做还能够按期对快照信息进行监视,例如:
GET /_snapshot/my_backup/snapshot_1
请注意,快照信息的操做使用相同的资源和线程池做为快照操做。因此,当大的分片被快照会致使快照操做,在返回结果以前在等待可用资源,因此这种会占用不少的时间。为了得到更直接的快照状态的完整信息,可使用快照状态命令来查询,例如:
GET /_snapshot/my_backup/snapshot_1/_status
快照信息方法在处理过程当中返回快照的基本信息,快照状态返回在快照中每一个分片的当前状态。
在恢复操做时,Elasticsearch的集群一般会进入红色状态。这是由于还原操做开始恢复的索引主要碎片。在这个操做时,主分片变得不可用,这体如今红色状态。一旦碎片恢复完成Elasticsearch是转换为标准的复制过程,建立所需数量的副本这时集群切换到黄色状态。一旦全部所需的复制品被建立,群集切换到绿色状态。群集健康操做仅为恢复过程的高层次状态。经过使用索引恢复和精简api能够得到更详细的恢复过程当中的状态。
中止当前正在运行的快照和恢复操做
快照和恢复操做容许一次只运行一个快照或一次恢复。若是一个当前运行的快照被错误地执行,或者须要很长的时间,可使用快照删除操做来终止它。快照删除时是会进行检查,若是删除快照正在运行,则中止这次删除。
还原操做使用标准的分片恢复机制。所以,能够经过删除索引来取消恢复的操做。请注意,在这种状况下全部已删除索引的数据将被从集群中移除。
快照和恢复操做对集群块的影响,快照和恢复操做都受集群和索引块的影响。例如,注册和注销库须要经过编写全局元数据来进行访问。快照操做须要全部的索引和元数据以及全局元数据都是可读的。恢复操做须要全局元数据是可写的,可是索引水平块将被忽略,由于在恢复的过程当中索引是重建的。请注意,存储库内容不是群集的一部分,所以群集块不影响内部存储库操做,例如已注册的存储库中的列表或删除快照。
赛克蓝德(secisland)后续会逐步对Elasticsearch的最新版本的各项功能进行分析,近请期待。也欢迎加入secisland公众号进行关注。