惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
大猫的无限游戏
大猫的无限游戏
J
Java Code Geeks
MongoDB | Blog
MongoDB | Blog
Martin Fowler
Martin Fowler
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
Recent Announcements
Recent Announcements
F
Fortinet All Blogs
B
Blog
U
Unit 42
B
Blog RSS Feed
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
腾讯CDC
量子位
酷 壳 – CoolShell
酷 壳 – CoolShell
V
Visual Studio Blog
博客园 - 聂微东
MyScale Blog
MyScale Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 三生石上(FineUI控件)
Engineering at Meta
Engineering at Meta

博客园 - 夏之夜

Linux 学习笔记之(十四)二进制分析工具 GO 学习笔记之四 工具(1)远程调试工具 dlv Shell命令集锦(一) Postgres 数据库(三)常见DDL命令 elasticsearch 学习笔记之五 备份还原开源方案比较 GO 学习笔记之一 环境安装 GO 学习笔记之零 (四)字符串处理集锦 GO 学习笔记之零 (三)常见问题处理集锦 GO 学习笔记之三 基础语法(5) 切片 GO 学习笔记之三 基础语法(12)文件操作 GO 学习笔记之五 编程(三)单元测试 ( VSCODE工具运行 ) GO 学习笔记之三 基础语法(11) 数据类型转换 GO 学习笔记之零 (二)git 操作(VSCODE) GO 学习笔记之零 (一)GO推荐的工程目录结构 Git 学习笔记之(六)windows 上 git 工具 安装 GO 学习笔记之二 常用命令集锦 elasticsearch 学习笔记之一 elasticdump elasticsearch 学习笔记之二 常见接口 专题(二十) cut
elasticsearch 学习笔记之四 快照
夏之夜 · 2025-07-01 · via 博客园 - 夏之夜

一、背景

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

二、基本用法

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