09.snapshot and restore操作

1. es 快照(snapshot)简介

快照(snapshot)是从正在运行的Elasticsearch集群中获取的备份。您可以获取单个索引或整个群集的快照(snapshot),并将其存储在共享文件系统上的存储库(repository)中,并且有些插件支持S3,HDFS,Azure,Google Cloud Storage等上的远程存储库(repository)。
快照(snapshot)是增量获取的。这意味着,当创建索引快照(snapshot)时,Elasticsearch避免复制同一个index在任何之前产生快照(snapshot)时已存储在存储库(repository)中的数据。因此,可以非常频繁地为群集创建快照(snapshot)。

您可以通过还原(restore)API将快照(snapshot)还原(restore)到正在运行的群集中。还原(restore)索引时,可以更改还原(restore)索引的名称及其某些设置。快照(snapshot)和还原(restore)功能的使用方式具有很大的灵活性。

不能仅通过获取其所有节点的数据目录副本来备份Elasticsearch集群。 Elasticsearch可能正在运行时对其数据目录的内容进行更改;复制其数据目录不能期望捕获其内容的一致图片。如果尝试从此类备份还原(restore)群集,则该群集可能会失败并报告损坏和/或丢失文件。另外,它似乎成功了,尽管它默默地丢失了一些数据。备份群集的唯一可靠方法是使用快照(snapshot)和还原(restore)功能。

2. 快照(snapshot)的版本兼容

快照(snapshot)包含组成索引的磁盘上数据结构的副本。这意味着快照(snapshot)只能还原(restore)到可以读取索引的Elasticsearch版本:

在6.x中创建的索引快照(snapshot)可以恢复到7.x。
在5.x中创建的索引快照(snapshot)可以恢复到6.x。
在2.x中创建的索引快照(snapshot)可以恢复到5.x。
可以将在1.x中创建的索引的快照(snapshot)还原(restore)到2.x。
相反,无法将在1.x中创建的索引快照(snapshot)还原(restore)到5.x或6.x,无法将在2.x中创建的索引快照(snapshot)还原(restore)到6.x或7.x,以及在5中创建的索引快照(snapshot)。 x无法还原(restore)到7.x。

每个快照(snapshot)可以包含在各种版本的Elasticsearch中创建的索引,并且在还原(restore)快照(snapshot)时,必须有可能将所有索引还原(restore)到目标集群中。如果快照(snapshot)中的任何索引是在不兼容的版本中创建的,则将无法还原(restore)快照(snapshot)。

在升级之前备份数据时,请记住,如果快照(snapshot)中包含与升级版本不兼容的版本中创建的索引,则将无法还原(restore)快照(snapshot)。

如果最终遇到需要还原(restore)与当前运行的群集版本不兼容的索引快照(snapshot)的情况,则可以将其还原(restore)到最新的兼容版本上,然后使用reindex-from-remote重建索引。当前版本的索引。仅当原始索引启用了源时,才可以从远程重新索引。与简单地还原(restore)快照(snapshot)相比,检索和重新索引数据所花费的时间可能要长得多。如果您有大量数据,建议您使用数据的一部分测试远程过程中的重新索引,以了解时间要求,然后再继续。

3. 快照(snapshot)仓库 repository

必须先注册快照(snapshot)存储库(repository),然后才能执行快照(snapshot)和还原(restore)操作。我们建议为每个主要版本创建一个新的快照(snapshot)存储库(repository)。有效的存储库(repository)设置取决于存储库(repository)类型。

如果您向多个群集注册同一快照(snapshot)存储库(repository),则只有一个群集应具有对该存储库(repository)的写访问权限。连接到该存储库(repository)的所有其他集群应将存储库(repository)设置为只读模式。

快照(snapshot)格式可能会在主要版本之间发生变化,因此,如果多个不同版本的集群尝试写入同一存储库(repository),则一个集群写的快照(snapshot)可能对另一集群不可见,并且存储库(repository)可能已损坏。

创建repository操作

PUT /_snapshot/my_backup
{
  "type": "fs",
  "settings": {
    "location": "my_backup_location"
  }
}

To retrieve information about a registered repository, use a GET request:

GET /_snapshot/my_backup
 

返回
{
  "my_backup": {
    "type": "fs",
    "settings": {
      "location": "my_backup_location"
    }
  }
}

也可获取多个repository的信息

GET /_snapshot/repo*,*backup*
GET /_snapshot
GET /_snapshot/_all

4.基于共享文件系统配置repository

共享文件系统存储库(repository)(“类型”:“ fs”)使用共享文件系统存储快照(snapshot)。为了注册共享文件系统存储库(repository),必须将相同的共享文件系统安装到所有主节点和数据节点上的相同位置。此位置(或其父目录之一)必须在所有主节点和数据节点上的path.repo设置中注册。

假设共享文件系统已安装到/ mount/backups/my_fs_backup_location,则应将以下设置添加到elasticsearch.yml文件中:

path.repo: ["/mount/backups", "/mount/longterm_backups"]

重新启动所有节点后,可以使用以下命令注册名称为my_fs_backup的共享文件系统存储库(repository):

PUT /_snapshot/my_fs_backup
{
    "type": "fs",
    "settings": {
        "location": "/mount/backups/my_fs_backup_location",
        "compress": true
    }
}

也可以使用相对路径
PUT /_snapshot/my_fs_backup
{
    "type": "fs",
    "settings": {
        "location": "my_fs_backup_location",
        "compress": true
    }
}

支持的参数有

  1. location: repository的地址路径,必须要有的参数
  2. compress: 对snapshot file进行压缩处理,默认是true.压缩只会对metadata进行压缩,data files不会进行压缩
  3. chunk_size: 在snapshot的时候大的file会被切分成chunk,可以设置为1GB, 10MB, 5KB, 500B.默认为null,不限制chunk size.
  4. max_restore_bytes_per_sec: 从snapshot中恢复的速度限制,默认40mb/second
  5. max_snapshot_bytes_per_sec: 每个node产生snapshot的速度限制,默认40mb/second
  6. readonly: 设置repository为read-only模式,默认为false

5. source only repository

使用源存储库(repository),您可以创建最少的仅source的快照(snapshot),占用的磁盘空间最多减少50%。源快照(snapshot)包含stored field和索引元数据。它们不包括索引或doc_value结构,并且在还原(restore)后不可搜索。还原(restore) source_only 快照(snapshot)后,必须将数据reindex到新的索引中。

源存储库代表了另一种repository

仅当启用_source字段并且未应用任何源筛选时,才支持 source_only 快照(snapshot)。还原(restore)source_only 快照(snapshot)时:

  1. 恢复的索引是只读的,并且只能服务match_all搜索或滚动请求以便于用于reindex。
  2. 不支持除match_all和_get请求以外的查询。
  3. 恢复的索引的mapping为空,但是可以从类型顶级元元素中使用原始mapping。

创建源存储库(repository)时,必须指定将存储快照(snapshot)的repository的类型和名称:

PUT _snapshot/my_src_only_repository
{
  "type": "source",
  "settings": {
    "delegate_type": "fs",
    "location": "my_backup_location"
  }
}

样例


PUT _snapshot/src_back
{
  "type": "source",
  "settings": {
    "delegate_type": "fs",
    "location": "my_backup_location"
  }
}

创建index,使用自动mapping识别的方式


PUT source_index/_doc/1
{
  "title":"this is a text doc"
}

GET source_index/
返回

{
  "source_index" : {
    "aliases" : { },
    "mappings" : {
      "properties" : {
        "title" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "creation_date" : "1605500191921",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "-GxxcRWNRRiT-Ot6cEJuLA",
        "version" : {
          "created" : "7020099"
        },
        "provided_name" : "source_index"
      }
    }
  }
}

创建snapshot


POST _snapshot/src_back/srcback02?wait_for_completion=true
{
  "indices": "source_index"
}

恢复


POST  _snapshot/src_back/srcback02/_restore
{
  "rename_pattern": "(source_index)",
  "rename_replacement": "restored_index_$1"
}

查看恢复后的index的mapping和setting
GET restored_index_source_index?flat_settings=true
返回
{
  "restored_index_source_index" : {
    "aliases" : { },
    "mappings" : {
      "enabled" : false,
      "_meta" : {
        "_doc" : {
          "properties" : {
            "title" : {
              "type" : "text",
              "fields" : {
                "keyword" : {
                  "type" : "keyword",
                  "ignore_above" : 256
                }
              }
            }
          }
        }
      }
    },
    "settings" : {
      "index.blocks.write" : "true",
      "index.creation_date" : "1605500191921",
      "index.number_of_replicas" : "1",
      "index.number_of_shards" : "1",
      "index.provided_name" : "source_index",
      "index.source_only" : "true",
      "index.uuid" : "dMDTfqUoRIGkBIm6VFb9DA",
      "index.version.created" : "7020099"
    }
  }


可以看到对应的mapping只有enable和_meta字段,没有properties字段
而且enable是false,所以这些字段都不会被index,不能被检索

setting中有

  "index.blocks.write" : "true",
  "index.source_only" : "true",

等设置

6. 其他存储类型的repository

这些都要使用plugin才行

repository-s3 for S3 repository support
repository-hdfs for HDFS repository support in Hadoop environments
repository-azure for Azure storage repositories
repository-gcs for Google Cloud Storage repositories

7. verify repository的状态

注册存储库(repository)后,系统会立即在所有主节点和数据节点上对存储库(repository)进行验证,以确保该存储库(repository)在集群中当前存在的所有节点上都可以正常运行。在注册或更新存储库(repository)时,可以使用verify参数来显式禁用存储库(repository)验证:

PUT /_snapshot/my_unverified_backup?verify=false
{
  "type": "fs",
  "settings": {
    "location": "my_unverified_backup_location"
  }
}
 

POST /_snapshot/my_unverified_backup/_verify

8. snapshot快照(snapshot)操作

一个存储库(repository)可以包含同一集群的多个快照(snapshot)。快照(snapshot)由群集中的唯一名称标识。可以通过执行以下命令来创建存储库(repository)my_backup中名称为snapshot_1的快照(snapshot):

PUT /_snapshot/my_backup/snapshot_1?wait_for_completion=true

wait_for_completion参数指定快照(snapshot)初始化(默认值)后应立即返回请求还是等待快照(snapshot)完成。在快照(snapshot)初始化期间,有关所有先前快照(snapshot)的信息将加载到内存中,这意味着在大型存储库(repository)中,即使将wait_for_completion参数设置为false,此命令也可能需要几秒钟(甚至几分钟)才能返回。

默认情况下,将创建集群中所有打开和启动的索引的快照(snapshot)。可以通过在快照(snapshot)请求的正文中指定索引列表来更改此行为。

PUT /_snapshot/my_backup/snapshot_2?wait_for_completion=true
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": false
}

可以使用支持多索引语法的indexs参数指定应包含在快照(snapshot)中的索引列表。快照(snapshot)请求还支持ignore_unavailable选项。将其设置为true将导致在快照(snapshot)创建期间不存在的索引被忽略。默认情况下,如果未设置ignore_unavailable选项并且缺少索引,则快照(snapshot)请求将失败。将include_global_state设置为false可以防止将群集全局状态存储为快照(snapshot)的一部分。默认情况下,如果参与快照(snapshot)的一个或多个索引没有所有可用的主分片,则整个快照(snapshot)将失败。通过将partial设置为true,可以更改此行为。

快照(snapshot)名称可以使用日期数学表达式自动导出,类似于创建新索引时。请注意,特殊字符需要进行URI编码。

例如,可以使用以下命令来实现以当前日期作为名称创建快照(snapshot),例如snapshot-2018.05.11。

# PUT /_snapshot/my_backup/<snapshot-{now/d}>
PUT /_snapshot/my_backup/%3Csnapshot-%7Bnow%2Fd%7D%3E

索引快照(snapshot)过程是增量的。在制作索引快照(snapshot)的过程中,Elasticsearch分析已存储在存储库(repository)中的索引文件的列表,并仅复制自上一个快照(snapshot)以来创建或更改的文件。这样可以将多个快照(snapshot)以紧凑的形式保存在存储库(repository)中。快照(snapshot)过程以非阻塞方式执行。可以继续对正在快照(snapshot)的索引执行所有索引和搜索操作。但是,快照(snapshot)代表创建快照(snapshot)时索引的时间点视图,因此在快照(snapshot)过程开始后不会添加任何add到索引的记录。对于已启动且当前未重定位的主要分片,快照(snapshot)过程将立即启动。在1.2.0版之前,如果群集具有参与快照(snapshot)的索引的任何重定位或初始化主键,则快照(snapshot)操作将失败。从1.2.0版开始,Elasticsearch在对快照(snapshot)进行快照(snapshot)之前,等待碎片的重新定位或初始化完成。

除了创建每个索引的副本之外,快照(snapshot)过程还可以存储全局群集元数据,其中包括持久性群集设置和模板。瞬态设置和注册的快照(snapshot)存储库(repository)不存储为快照(snapshot)的一部分。

群集中任何时间只能执行一个快照(snapshot)过程。在创建特定分片的快照(snapshot)时,该分片无法移动到另一个节点,这可能会干扰重新平衡过程和分配筛选。快照(snapshot)完成后,Elasticsearch将只能将分片移动到另一个节点(根据当前的分配过滤设置和重新平衡算法)。

创建快照(snapshot)后,可以使用以下命令获取有关该快照(snapshot)的信息:

GET /_snapshot/my_backup/snapshot_1


该命令返回有关快照(snapshot)的基本信息,包括开始和结束时间,创建快照(snapshot)的Elasticsearch版本,包含的索引列表,快照(snapshot)的当前状态以及快照(snapshot)过程中发生的故障列表。快照(snapshot)状态可以是

IN_PROGRESS: 快照(snapshot)当前正在运行。
SUCCESS: 快照(snapshot)完成,所有分片已成功存储。
FAILED: 快照(snapshot)以错误结束,无法存储任何数据。
PARTIAL: 全局群集状态已存储,但没有成功存储至少一个分片的数据。在这种情况下,失败部分应包含有关未正确处理的分片的更多详细信息。
INCOMPATIBLE: 快照(snapshot)是使用旧版本的Elasticsearch创建的,因此与集群的当前版本不兼容。

如果某些快照(snapshot)不可用,该命令将失败。布尔参数ignore_unavailable可用于返回当前可用的所有快照(snapshot)。

从成本和性能的角度来看,在基于云的存储库(repository)中获取存储库(repository)中的所有快照(snapshot)可能会付出高昂的代价。如果唯一需要的信息是存储库(repository)中的快照(snapshot)名称/ uuid以及每个快照(snapshot)中的索引,则可以将可选的布尔参数verbose设置为false,以对存储库(repository)中的快照(snapshot)执行更高效且更具成本效益的检索。请注意,将verbose设置为false将忽略有关快照(snapshot)的所有其他信息,例如状态信息,快照(snapshot)分片的数量等。verbose参数的默认值为true。

可以使用以下命令来检索当前正在运行的快照(snapshot):

GET /_snapshot/my_backup/_current

删除一个snapshot

DELETE /_snapshot/my_backup/snapshot_2

从存储库(repository)中删除快照(snapshot)后,Elasticsearch会删除与删除的快照(snapshot)关联且未被其他任何快照(snapshot)使用的所有文件。如果在创建快照(snapshot)时执行了删除的快照(snapshot)操作,则快照(snapshot)过程将中止,并且将清理作为快照(snapshot)过程一部分创建的所有文件。因此,删除快照(snapshot)操作可用于取消误启动的长时间运行的快照(snapshot)操作。

删除repository

DELETE /_snapshot/my_backup


这个只是删除了指向该地址的应用,并不会清除repository中的snapshot文件

9.resotre 恢复操作

POST /_snapshot/my_backup/snapshot_1/_restore

默认情况下,将还原(restore)快照(snapshot)中的所有索引,并且不还原(restore)群集状态。通过使用还原(restore)请求主体中的索引和include_global_state选项,可以选择应还原(restore)的索引以及允许还原(restore)全局群集状态。索引列表支持多索引语法。还可以使用rename_pattern和rename_replacement选项在还原(restore)时使用支持引用原始文本的正则表达式来重命名索引,如此处所述。将include_aliases设置为false可以防止别名与关联索引一起还原(restore)

POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "index_1,index_2",
  "ignore_unavailable": true,
  "include_global_state": true,
  "rename_pattern": "index_(.+)",
  "rename_replacement": "restored_index_$1"
}

可以在正常运行的群集上执行还原(restore)操作。但是,仅当现有索引closed且分片数量与快照(snapshot)中的索引数量相同时,才能还原(restore)该索引。如果关闭了已还原(restore)的索引,则还原(restore)操作会自动打开它们;如果集群中不存在已创建的索引,则会自动创建新索引。如果使用include_global_state还原(restore)了群集状态(默认为false),则会添加群集中当前不存在的已还原(restore)模板,并使用已还原(restore)的模板替换具有相同名称的现有模板。还原(restore)的持久性设置将添加到现有的持久性设置中。

1. partial restore 部分恢复

默认情况下,如果参与该操作的一个或多个索引没有所有可用分片的快照(snapshot),则整个还原(restore)操作将失败。例如,如果某些分片无法快照(snapshot),则会发生这种情况。通过将partial设置为true,仍然可以恢复此类索引。请注意,在这种情况下,只有成功快照(snapshot)的分片将被还原(restore),所有丢失的分片将被重新创建为空。

2. restore的时候change index settings

POST /_snapshot/my_backup/snapshot_1/_restore
{
  "indices": "index_1",
  "index_settings": {
    "index.number_of_replicas": 0
  },
  "ignore_index_settings": [
    "index.refresh_interval"
  ]
}

3. restore到different cluster当中去

快照(snapshot)中存储的信息不绑定到特定的群集或群集名称。因此,可以将一个群集中的快照(snapshot)还原(restore)到另一个群集中。所需要做的就是在新集群中注册包含快照(snapshot)的存储库(repository)并开始还原(restore)过程。新群集不必具有相同的大小或拓扑。但是,新群集的版本应该与用于创建快照(snapshot)的群集相同或更高(只有1个主要版本更新)。例如,您可以将1.x快照(snapshot)还原(restore)到2.x群集,但不能将1.x快照(snapshot)还原(restore)到5.x群集。

如果新群集的大小较小,则应考虑其他因素。首先,必须确保新群集具有足够的容量以将所有索引存储在快照(snapshot)中。可以在还原(restore)过程中更改索引设置,以减少副本数量,这有助于将快照(snapshot)还原(restore)到较小的群集中。也可以使用indexs参数选择索引的子集。

如果使用分片分配过滤将原始群集中的索引分配给特定节点,则将在新群集中强制执行相同的规则。因此,如果新集群不包含具有可分配还原(restore)索引的适当属性的节点,则除非在还原(restore)操作期间更改了这些索引分配设置,否则无法成功还原(restore)该索引。

还原(restore)操作还检查还原(restore)的持久性设置是否与当前群集兼容,以避免意外还原(restore)不兼容的设置。如果需要使用不兼容的持久性设置还原(restore)快照(snapshot),请尝试在不具有全局群集状态的情况下还原(restore)快照(snapshot)。

10. snapshot/resotre的状态监测

GET /_snapshot/my_backup/snapshot_1

GET /_snapshot/my_backup/snapshot_1/_status


参考
https://www.cnblogs.com/sanduzxcvbnm/p/12090809.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值