elasticsearch 学习笔记之四 快照

一、背景

     快照方案是官方提供的标准方案。指定一个快照仓库路径,通过接口调用触发快照,每次快照均是基于上次快照的增量;通过快照还原时,是还原到该快照那刻的数据,之前的变更全部取消。

二、基本用法

1、快照仓库配置

  • 进入es 的安装目录下找到 elasticsearch.yml 文件,进行仓库配置,如果要配置多个仓库地址使用逗号隔开:
path.repo: /opt/xx/web/xx/elasticsearch.1/data/backup,/opt/es/backup/iotrm
  • 每个仓库地址必须和elasticsearch 启动用户是同一个,如 es 启动账号是 es ,分组也是 es,则 这里 /opt/es/backup/iotrm 需要属于es,可以通过命令 chown -R es:es /opt/es/backup  设置
  • 重启es服务

2、注册快照仓库

   使用 es 的API:PUT _snapshot 进行仓库注册

请求参数

{
  "type": "fs",
  "settings": {
    "location": "/opt/es/backup/iotrm"
  }
}

遇到的问题

1)如果注册时,注册的 location 地址没有配置在es的 elasticsearch.yml 文件中,会报如下错误

2)如果注册时,注册的location指定的地址与es程序运行的用户和组不一致,会报如下错误

3、指定仓库进行快照备份

使用 es 的API:PUT _snapshot/仓库名/快照名称?wait_for_completion=true  进行快照备份

http://10.19.223.119:9200/_snapshot/iotrm/%3Ciotrm-%7Bnow%7ByyyyMMddHHmmss%7D%7D%3E?wait_for_completion=true    快照名称可以配置时间格式,%3Ciotrm-%7Bnow%7ByyyyMMddHHmmss%7D%7D%3E 实际是:<iotrm-{now{yyyyMMddHHmmss}}>

请求body

{
  "include_global_state": false,    #表示全局信息如集群不备份
  "indices":["iotrm*"],     #备份 iotrm 开头的所有索引数据
  "metadata": {
    "taken_by": "xiaohua",
    "taken_because": "iotrm,backup test"
  }
}

表示将  iotrm 开头的所有索引进行备份

返回内容

    "snapshot": {
        "snapshot": "iotrm-20241203072538",
        "uuid": "idfOxhbCR961R6o3IiKpKQ",
        "version_id": 7100299,
        "version": "7.10.2",
        "indices": [
            "iotrm_xx_2024-09-12",
            "iotrm_xx",
            "iotrm_yy",
            "iotrm_xx$0x00070101_2024-11-30",
            "iotrm_yy_2024-09-12"
        ],
        "data_streams": [],
        "include_global_state": false,
        "metadata": {
            "taken_by": "xiaohua",
            "taken_because": "iotrm,backup test"
        },
        "state": "SUCCESS",
        "start_time": "2024-12-03T07:25:38.909Z",
        "start_time_in_millis": 1733210738909,
        "end_time": "2024-12-03T07:29:24.148Z",
        "end_time_in_millis": 1733210964148,
        "duration_in_millis": 225239,
        "failures": [],
        "shards": {
            "total": 5,
            "failed": 0,
            "successful": 5
        }
    }
}

4、指定某个仓库的某个快照进行还原

使用 es 的API:PUT _snapshot/仓库名/快照名称/_restore ?wait_for_completion=true  进行快照还原

5、查看某个仓库下的所有快照

使用 es 的API:GET_snapshot/仓库名/* 

6、快照与恢复

6.1 单个索引快照备份

  • 使用 es 的API:PUT _snapshot/仓库名/快照名称?wait_for_completion=true 进行快照备份

     请求body

{
  "include_global_state": false,
  "indices":["索引名称"],
  "metadata": {
    "taken_by": "wangfang5",
    "taken_because": "iotrm,backup test"
  }
}
  • 接口路径参数:快照名称 支持DATE MATH,这里值可以设置为:%3Ciotrm-%7Bnow%7ByyyyMMddHHmmss%7D%7D%3E,表示 <iotrm-{now{yyyyMMddHHmmss}}> ,其中yyyyMMddHHmmss符合Java的DateFormat格式要求。备份出来的快照名称为:iotrm-20241203072538

6.2 单个索引快照备份还原

  •  使用es的API先将索引关闭:POST  /索引名称/_close
  • 使用es的API指定某个快照进行还原:PUT /_snapshot/仓库名/快照名称/_restore?wait_for_completion=true  ,如:这里的快照名称可以为:otrm-20241203072538

6.3 指定多个索引快照备份

  • 使用 es 的API:PUT _snapshot/仓库名/快照名称?wait_for_completion=true 进行快照备份

请求 参数

{
  "include_global_state": false,
  "indices":["iotrm*","xres_smartscreen"],   #表示还原iotrm开头的索引以及xres_smartscreen
  "metadata": {
    "taken_by": "wangfang5",
    "taken_because": "iotrm,backup test"
  }
}
  • 接口路径参数:快照名称 支持DATE MATH,这里值可以设置为:%3Ciotrm-%7Bnow%7ByyyyMMddHHmmss%7D%7D%3E,表示 <iotrm-{now{yyyyMMddHHmmss}}> ,其中yyyyMMddHHmmss符合Java的DateFormat格式要求。备份出来的快照名称为:iotrm-20241203072538

6.4 指定多个索引备份还原

  • 使用es的API先将索引关闭:POST  /索引名称/_close,如:/iotrm*,xres_smartscreen/_close 表示将iotrm开头的索引以及xres_smartscreen关闭
  • 使用es的API指定某个快照进行还原:PUT /_snapshot/仓库名/快照名称/_restore?wait_for_completion=true  ,如:这里的快照名称可以为:otrm-20241203072538

6.5 所有索引快照备份

  • 使用 es 的API:PUT _snapshot/仓库名/快照名称?wait_for_completion=true 进行快照备份

请求参数

{
  "include_global_state": false,
   "metadata": {
    "taken_by": "wangfang5",
    "taken_because": "iotrm,backup test"
  }
}
  • 接口路径参数:快照名称 支持DATE MATH,这里值可以设置为:%3Ciotrm-%7Bnow%7ByyyyMMddHHmmss%7D%7D%3E,表示 <iotrm-{now{yyyyMMddHHmmss}}> ,其中yyyyMMddHHmmss符合Java的DateFormat格式要求。备份出来的快照名称为:iotrm-20241203072538

6.6 所有索引恢复

  •  使用es的API先将索引关闭:POST  /*/_close
  • 使用es的API指定某个快照进行还原:PUT /_snapshot/仓库名/快照名称/_restore?wait_for_completion=true  ,如:这里的快照名称可以为:otrm-20241203072538

三、示例

1、备份 以特定字符串开头的所有索引的数据(包括索引数据 settings/mapping/template 以及 文档数据)   ---- 快照备份

第一次触发快照全量备份

 

示例中 备份出来的快照名为:iotrm-20241203072538

2830345的文档数据第一份全量备份耗时3分钟左右

第二次触发快照备份

示例中 备份出来的快照名为:iotrm-20241203085518

总共文档数据 2832160 ,但是第二次快照备份仅需36秒(因此是增量快照备份

第三次触发快照备份

示例中 备份出来的快照名为:iotrm-20241203091239

总共文档数据 2834155,但是第三次快照备份仅需36秒(因此是增量快照备份

2、还原 以特定字符串开头的所有索引的数据备份的数据(包括索引数据 settings/mapping/template 以及 文档数据)   ---- 快照还原

快照有三个:iotrm-20241203072538、iotrm-20241203085518、iotrm-20241203091239

1)删除 iotrm 开头的所有索引下的所有文档数据 场景下进行还原

  第一次还原  iotrm-20241203072538

http://10.19.214.13:9200/_snapshot/iotrm/iotrm-20241203072538/_restore?wait_for_completion=true

 

总共 2821980 条文档数据,还原需要 4 分钟左右

第二次还原 iotrm-20241203085518

先通过 es API 接口:http://10.19.214.13:9200/iotrm*/_close  关闭所有开头的索引

再通过 es API 接口:http://10.19.214.13:9200/_snapshot/iotrm/iotrm-20241203085518/_restore?wait_for_completion=true  还原数据到 快照版本 iotrm-2024120308551

总共 2832422条文档数据,变更了1万多的数据,还原需要 2 分钟左右

第三次还原 iotrm-20241203091239

先通过 es API 接口:http://10.19.214.13:9200/iotrm*/_close  关闭所有开头的索引

再通过 es API 接口:http://10.19.214.13:9200/_snapshot/iotrm/iotrm-20241203091239/_restore?wait_for_completion=true  还原数据到 快照版本 iotrm-2024120308551

总共 2834510条文档数据,还原需要 2 分钟左右

2)数据变更场景下进行还原

  • 删除部分索引及其数据   --- 将iotrm_event_event_acs 开头的所有索引     
  • 修改某个文档数据内容  --- 修改 iotrm_event_event_face$0x0002021e$face_2024-12-01 索引下 文档ID为 7jhDf5MBXFMQjG9sKGtY 数据。将其中的 basic.eventType 更改为xxx    POST http://10.19.214.13:9200/iotrm_event_event_face%240x0002021e%24face_2024-12-01/_doc/7jhDf5MBXFMQjG9sKGtY/_update
  • 新增某个索引下的2个文档数据  ---  iotrm_event_event_face$0x0002021e$face_2024-12-01 索引下 新增文档ID为1和2的数据    POST  http://10.19.214.13:9200/iotrm_event_event_face%240x0002021e%24face_2024-12-01/_doc/2/
  • 删除某个索引下的一条文档数据   --- 删除iotrm_event_event_face$0x0002021e$face_2024-12-01 索引下 文档ID为  -zhDf5MBXFMQjG9sP2un 数据     DELETE http://10.19.214.13:9200/iotrm_event_event_face%240x0002021e%24face_2024-12-01/_doc/-zhDf5MBXFMQjG9sP2un

 还原到快照  iotrm-20241203072538

总共 2821980 条文档数据,还原需要 2 分钟左右

3、备份 所有索引的所有数据(包括索引数据 settings/mapping/template 以及 文档数据)   ---- 快照备份

第一次触发快照全量备份

 

示例中 备份出来的快照名为:all-20241203092245

总共文档数据 2835861 2.0G,第一次全量备份耗时4分钟左右

 第二次触发快照全量备份(实际为增量备份)

 

示例中 备份出来的快照名为:all-20241203111133

总共文档数据 2867875 2.2G,第二次全量备份耗时1分钟左右

 第三次触发快照全量备份(实际为增量备份)

 

示例中 备份出来的快照名为:all-20241203121320

总共文档数据 2875409 2.1G,第三次全量备份耗时1分钟左右

4、还原 所有索引的所有数据备份的数据(包括索引数据 settings/mapping/template 以及 文档数据)   ---- 快照还原 

 有三份全量快照:all-20241203092245、all-20241203111133、all-20241203121320

将数据还原到 all-20241203092245 快照版本

  • 通过es API 接口关闭所有索引:http://10.19.214.13:9200/*/_close
  • 通过es API 接口还原快照数据:http://10.19.214.13:9200/_snapshot/all/all-20241203092245/_restore?wait_for_completion=true

 

2854993 条数据,还原耗时4分钟左右

5、还原 所有索引的所有数据备份的数据的部分索引(包括索引数据 settings/mapping/template 以及 文档数据)   ---- 快照还原 

有1份全量快照  all-20241203124406,还原该快照中的 iotrm_event_illuminancetelemeter 索引数据,该索引在目标es中不存在

  • 通过es API 接口关闭索引:http://10.19.214.13:9200/ iotrm_event_illuminancetelemeter/_close
  • 通过es API 接口还原快照数据:http://10.19.214.13:9200/_snapshot/total/all-20241203124406/_restore?wait_for_completion=true

 

2230000 条数据还原需要11.39秒

  • 通过es API 接口打开索引:http://10.19.214.13:9200/ iotrm_event_illuminancetelemeter/_open

 

posted @ 2025-07-01 16:01  夏之夜  阅读(127)  评论(0)    收藏  举报