通过快照备份与恢复命令,您可以实现手动备份与恢复阿里云Elasticsearch实例的索引数据,并将备份的数据保存到一个共享仓库里。本文介绍如何手动备份与恢复数据。

注意事项

  • 手动备份与恢复数据前,请确保集群的状态正常,否则会影响备份任务。
  • 快照仅保存索引数据,不保存Elasticsearch实例自身的监控数据(例如以.monitoring.security_audit为前缀的索引)、元数据、Translog、实例配置数据、Elasticsearch的软件包、自带和自定义的插件、Elasticsearch的日志等。
  • 本文中的代码均可以在阿里云Elasticsearch实例的Kibana控制台上执行。具体操作,请参见登录Kibana控制台

前提条件

开通对象存储服务OSS(Object Storage Service),并新建一个Bucket。
注意 请创建标准存储类型的Bucket(不支持归档存储类型),且Bucket的地域与Elasticsearch实例的地域保持一致。

具体操作,请参见开通OSS服务创建存储空间

创建仓库

创建一个名称为my_backup的仓库。
注意 创建仓库时,请使用PUT的请求方式;更新仓库设置时,请使用POST而不是PUT方式,否则会更新已有仓库的设置。
PUT _snapshot/my_backup/
{
    "type": "oss",
    "settings": {
        "endpoint": "http://oss-cn-hangzhou-internal.aliyuncs.com",
        "access_key_id": "xxxx",
        "secret_access_key": "xxxxxx",
        "bucket": "xxxxxx",
        "compress": true,
        "chunk_size": "500mb",
        "base_path": "snapshot/"
    }
}
参数 说明
endpoint OSS Bucket的内网访问域名。获取方式,请参见访问域名和数据中心
access_key_id 用于标识用户。获取方式,请参见获取AccessKey
secret_access_key 用于验证用户的密钥。获取方式,请参见获取AccessKey
bucket OSS Bucket的名称,需要一个已经存在的Bucket。获取方式,请参见创建存储空间
compress 打开快照文件的压缩功能。
  • true:打开压缩功能,仅应用于元数据文件(索引映射和设置)。
  • false(默认值):不打开压缩功能,数据文件未压缩。
chunk_size 当您上传的数据非常大时,配置此参数可以限制快照过程中分块的大小。超过这个大小,数据将会被分块上传到OSS中。
base_path 仓库的起始位置,默认为根目录。

获取仓库信息

  • 获取所有仓库的信息
    GET _snapshot
  • 获取指定仓库的信息
    GET _snapshot/my_backup

创建快照

  • 为全部索引创建快照
    PUT _snapshot/my_backup/snapshot_1
    以上命令会为所有打开的索引创建名称为snapshot_1的快照,并保存到my_backup仓库中。该命令会立刻返回,并在后台执行备份任务。如果您希望任务执行完成后再返回,可通过添加wait_for_completion实现。该参数会阻塞调用直到备份完成,如果是大型快照,需要很长时间才能返回。
    PUT _snapshot/my_backup/snapshot_1?wait_for_completion=true
    说明
    • 一个仓库可以包含多个快照,每个快照中可以包含所有、部分或单个索引的备份数据。
    • 第一次创建快照时,系统会备份所有的数据,后续所有的快照仅备份已存快照和新快照之间的增量数据。随着快照的不断进行,备份也在增量的添加和删除。这意味着后续备份会相当快速,因为它们只传输很小的数据量。
  • 为指定索引创建快照
    系统默认会备份所有打开的索引。如果您在使用Kibana,并且考虑到磁盘空间大小因素,不需要把所有诊断相关的.kibana索引都备份起来,那么可以在创建快照时,指定需要备份的索引。
    PUT _snapshot/my_backup/snapshot_2
    {
        "indices": "index_1,index_2"
    }

    以上命令只会备份名称为index1index2的索引。

查看快照信息

  • 查看所有快照信息
    GET _snapshot/my_backup/_all
    执行成功后,返回结果如下。
    {
      "snapshots": [
        {
          "snapshot": "snapshot_1",
          "uuid": "vIdSCkthTeGa0nSj4D****",
          "version_id": 5050399,
          "version": "5.5.3",
          "indices": [
            ".kibana"
          ],
          "state": "SUCCESS",
          "start_time": "2018-06-28T01:22:39.609Z",
          "start_time_in_millis": 1530148959609,
          "end_time": "2018-06-28T01:22:39.923Z",
          "end_time_in_millis": 1530148959923,
          "duration_in_millis": 314,
          "failures": [],
          "shards": {
            "total": 1,
            "failed": 0,
            "successful": 1
          }
        },
        {
          "snapshot": "snapshot_3",
          "uuid": "XKO_Uwz_Qu6mZrU3Am****",
          "version_id": 5050399,
          "version": "5.5.3",
          "indices": [
            ".kibana"
          ],
          "state": "SUCCESS",
          "start_time": "2018-06-28T01:25:00.764Z",
          "start_time_in_millis": 1530149100764,
          "end_time": "2018-06-28T01:25:01.482Z",
          "end_time_in_millis": 1530149101482,
          "duration_in_millis": 718,
          "failures": [],
          "shards": {
            "total": 1,
            "failed": 0,
            "successful": 1
          }
        }
      ]
    }
  • 根据快照名查看指定快照的信息
    GET _snapshot/my_backup/snapshot_3
    执行成功后,返回结果如下。
    {
      "snapshots": [
        {
          "snapshot": "snapshot_3",
          "uuid": "vIdSCkthTeGa0nSj4D****",
          "version_id": 5050399,
          "version": "5.5.3",
          "indices": [
            ".kibana"
          ],
          "state": "SUCCESS",
          "start_time": "2018-06-28T01:22:39.609Z",
          "start_time_in_millis": 1530148959609,
          "end_time": "2018-06-28T01:22:39.923Z",
          "end_time_in_millis": 1530148959923,
          "duration_in_millis": 314,
          "failures": [],
          "shards": {
            "total": 1,
            "failed": 0,
            "successful": 1
          }
        }
      ]
    }
  • 使用_status API查看指定快照的信息
    GET _snapshot/my_backup/snapshot_3/_status
    _status API可以查看快照的详细信息。不仅包括快照的总体状况,也包括每个索引和每个分片的统计值。执行成功后,返回结果如下。
    {
    "snapshots": [
       {
          "snapshot": "snapshot_3",
          "repository": "my_backup",
          "state": "IN_PROGRESS", 
          "shards_stats": {
             "initializing": 0,
             "started": 1, 
             "finalizing": 0,
             "done": 4,
             "failed": 0,
             "total": 5
          },
          "stats": {
             "number_of_files": 5,
             "processed_files": 5,
             "total_size_in_bytes": 1792,
             "processed_size_in_bytes": 1792,
             "start_time_in_millis": 1409663054859,
             "time_in_millis": 64
          },
          "indices": {
             "index_3": {
                "shards_stats": {
                   "initializing": 0,
                   "started": 0,
                   "finalizing": 0,
                   "done": 5,
                   "failed": 0,
                   "total": 5
                },
                "stats": {
                   "number_of_files": 5,
                   "processed_files": 5,
                   "total_size_in_bytes": 1792,
                   "processed_size_in_bytes": 1792,
                   "start_time_in_millis": 1409663054859,
                   "time_in_millis": 64
                },
                "shards": {
                   "0": {
                      "stage": "DONE",
                      "stats": {
                         "number_of_files": 1,
                         "processed_files": 1,
                         "total_size_in_bytes": 514,
                         "processed_size_in_bytes": 514,
                         "start_time_in_millis": 1409663054862,
                         "time_in_millis": 22
                    }
                 }
              }
            }
          }
        }
      ]
    }

删除快照

删除指定的快照。如果该快照正在进行,执行以下命令,系统会中断快照进程并删除仓库中创建到一半的快照。

DELETE _snapshot/my_backup/snapshot_3
注意
  • 请使用DELETE API来删除快照,而不能使用其他机制(例如手动删除)。因为快照是增量的,很多快照可能依赖于之前的备份数据。DELETE API能够过滤出还在被其他快照使用的数据,只删除不再被使用的备份数据。
  • 人工删除文件,可能会造成备份严重损坏的后果,因为您删除的文件可能还在使用中。

从快照恢复

注意 恢复.开头的系统索引可能会导致Kibana访问失败,建议不要恢复系统索引数据。
  • 将指定快照中备份的所有索引恢复到Elasticsearch集群中。
    POST _snapshot/my_backup/snapshot_1/_restore
    • 假设snapshot_1中包含5个索引,那么这5个索引都会被恢复到集群中。
    • _restore API会立刻返回,恢复进程会在后台进行。如果您希望调用阻塞直到恢复完成,可以添加wait_for_completion参数。
      POST _snapshot/my_backup/snapshot_1/_restore?wait_for_completion=true
  • 恢复所有索引(除.开头的系统索引)
    POST _snapshot/my_backup/snapshot_1/_restore 
    {"indices":"*,-.monitoring*,-.security*,-.kibana*","ignore_unavailable":"true"}
  • 将指定快照中备份的指定索引恢复到Elasticsearch集群中,并重命名。

    如果您需要在不替换现有数据的前提下,恢复旧版本的数据来验证内容,或者进行其他处理,可恢复指定的索引,并重命名该索引。

    POST /_snapshot/my_backup/snapshot_1/_restore
    {
     "indices": "index_1", 
     "rename_pattern": "index_(.+)", 
     "rename_replacement": "restored_index_$1" 
    }
    参数 说明
    indices 只恢复index_1索引,忽略快照中的其他索引。
    rename_pattern 查找正在恢复的索引,该索引名称需要与提供的模板匹配。
    rename_replacement 重命名查找到的索引。

查看快照恢复信息

您可以通过_recovery API来监控快照恢复的状态、进度等信息:
  • 查看快照中,指定索引的恢复状态。
    GET restored_index_3/_recovery
  • 查看集群中的所有索引的恢复信息(可能包含跟您的恢复进程无关的其他分片的恢复信息)。
    GET /_recovery/
    输出结果如下。
    {
       "restored_index_3" : {
         "shards" : [ {
           "id" : 0,
           "type" : "snapshot",
           "stage" : "index",
           "primary" : true,
           "start_time" : "2014-02-24T12:15:59.716",
           "stop_time" : 0,
           "total_time_in_millis" : 175576,
           "source" : {
             "repository" : "my_backup",
             "snapshot" : "snapshot_3",
             "index" : "restored_index_3"
           },
           "target" : {
             "id" : "ryqJ5lO5S4-lSFbGnt****",
             "hostname" : "my.fqdn",
             "ip" : "10.0.**.**",
             "name" : "my_es_node"
           },
           "index" : {
             "files" : {
               "total" : 73,
               "reused" : 0,
               "recovered" : 69,
               "percent" : "94.5%"
             },
             "bytes" : {
               "total" : 79063092,
               "reused" : 0,
               "recovered" : 68891939,
               "percent" : "87.1%"
             },
             "total_time_in_millis" : 0
           },
           "translog" : {
             "recovered" : 0,
             "total_time_in_millis" : 0
           },
           "start" : {
             "check_index_time" : 0,
             "total_time_in_millis" : 0
           }
         } ]
       }
    }
    输出结果会展示所有恢复中的索引,并列出这些索引中的所有分片。同时每个分片中会展示启动和停止时间、持续时间、恢复百分比、传输字节数等统计值。部分参数说明如下。
    参数 说明
    type 恢复的类型。snapshot表示这个分片是在从一个快照恢复。
    source 待恢复的快照和仓库。
    percent 恢复的进度。94.5%表示对应分片已经恢复了94.5%的数据。

取消快照恢复

通过DELETE命令删除正在恢复的索引,取消恢复操作。
DELETE /restored_index_3

如果restored_index_3正在恢复中,以上删除命令会停止恢复,同时删除所有已经恢复到集群中的数据。

相关文档