ElasticSearch 数据备份与恢复

这篇具有很好参考价值的文章主要介绍了ElasticSearch 数据备份与恢复。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

以下为背景

Elasticsearch 7.6.2单点,8.3.3单点

Docker 部署

当前使用场景:部分index,数据量较大,需要在跨版本的ES之间进行迁移

  • 一、前提说明
    • 1. Elasticsearch备份
    • 2. 备份恢复方案
  • 二、Elasticsearch 环境准备
    • 1.查看Elasticsearch所有版本
    • 2.部署2个Elasticsearch单点服务
  • 三、数据备份
    • 1. 增加仓库配置项
    • 2. API指令在原始ES集群创建仓库
    • 3. API查看原始ES集群里创建的仓库
    • 4. API验证原始ES集群备份仓库是否创建成功
    • 5. API创建快照备份
    • 6. API删除备份
  • 四、数据恢复
    • 1. 必做步骤
    • 2. API 恢复备份
    • 3. API 确认数据

一、前提说明

1. Elasticsearch备份

通常Elasticsearch备份有几种情况:

  • 大量/全量数据的迁移
  • 增量数据的双写或异步准实时/定时同步
  • 临时部分数据的导出导入

2. 备份恢复方案

那么与之对应的解决方案有哪些呢?

什么样的方法适合什么样的场景呢?

  • Elasticsearch 原生自带的备份Snapshot与恢复Restore的功能,能够同步部分index、数据量级可允许GB\TB\PB的场景,原生自带的相对稳定性有保障,离线操作
  • Logstash的管道同步方案,elk这套中我们也有使用到logstash作为一个重要的中间解析环节,我们这边作为数据同步的场景,需要中间对源数据(可来自ES或其他渠道)字段进行转换、处理、新增、删除的场景,还有异步增量同步场景
  • Elasticsearch-dump 它是一款一款开源的 ES 数据迁移工具,node.js 开发的,需要自行从github下载下来部署后使用,可指定index\mapping等,类似于mysqldump,最终是将数据导出为类似insert的语句后写入,适合数据量小的场景
  • 其他开源工具:Kettle(是关系型到关系型/非关系型的数据同步,ES仅写入),DataX(比较完备完整的关系型到关系型/非关系型的数据同步组件,ES仅写入),Flinkx(ES可读取和写入),这种通常涉及关系型到非关系型,或者流程复杂需要二次包装的场景再考虑

基于以上说明,本地实验主要采取原生自带的备份snapshot与恢复restore的功能进行数据的迁移测试

二、Elasticsearch 环境准备

1.查看Elasticsearch所有版本

curl https://registry.hub.docker.com/v1/repositories/elasticsearch/tags | tr -d '[\[\]" ]' | tr '}' '\n' | awk -F: -v image='elasticsearch' '{if(NR!=NF && $3 != ""){printf("%s:%s\n",image,$3)}}'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  8250    0  8250    0     0   8620      0 --:--:-- --:--:-- --:--:--  8611
elasticsearch:1
elasticsearch:1-alpine
elasticsearch:1.3.7
elasticsearch:1.3.8
elasticsearch:1.3.9
elasticsearch:1.4
elasticsearch:1.4.2
........
elasticsearch:8.1.2
elasticsearch:8.1.3
elasticsearch:8.2.0
elasticsearch:8.2.1
elasticsearch:8.2.2
elasticsearch:8.2.3
elasticsearch:8.3.1
elasticsearch:8.3.2

2.部署2个Elasticsearch单点服务

获取镜像

docker pull elasticsearch:7.6.2
docker pull elasticsearch:8.3.3

8.3.3: Pulling from library/elasticsearch
d7bfe07ed847: Pull complete 
46789798a785: Pull complete 
17d53e557d11: Pull complete 
1044b0d3c7dc: Pull complete 
6d3e6541b7e9: Pull complete 
e56c78671a82: Pull complete 
b3b71c18a4f1: Pull complete 
5208b7309c64: Pull complete 
067f1fbe449c: Pull complete 
Digest: sha256:966.....2e1
Status: Downloaded newer image for elasticsearch:8.3.3

启动服务

docker run --name elasticsearch1 -p 9200:9201 -p 9300:9301 \
> -e  "discovery.type=single-node" \
> -e ES_JAVA_OPTS="-Xms64m -Xmx256m" \
> -v ~/docker/elasticsearch1/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
> -v ~/docker/elasticsearch1/data:/usr/share/elasticsearch/data \
> -v  ~/docker/elasticsearch1/plugins:/usr/share/elasticsearch/plugins \
> -v  ~/docker/elasticsearch/backup:/usr/share/elasticsearch/backup \
> -d elasticsearch:7.6.2


docker run --name elasticsearch2 -p 9200:9201 -p 9300:9301 \
> -e  "discovery.type=single-node" \
> -e ES_JAVA_OPTS="-Xms64m -Xmx256m" \
> -v ~/docker/elasticsearch2/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
> -v ~/docker/elasticsearch2/data:/usr/share/elasticsearch/data \
> -v  ~/docker/elasticsearch2/plugins:/usr/share/elasticsearch/plugins \
> -v  ~/docker/elasticsearch/backup:/usr/share/elasticsearch/backup \
> -d elasticsearch:8.3.3

确认服务

a@~:~$ docker ps -a
CONTAINER ID        IMAGE                             COMMAND                  CREATED             STATUS                      PORTS                                             NAMES
9....b1        elasticsearch:8.3.3              "/usr/local/bin/dock…"   9 seconds ago       Up 7 seconds                0.0.0.0:9201->9200/tcp, 0.0.0.0:9301->9300/tcp    elasticsearch2
75....83        elasticsearch:7.6.2             "/usr/local/bin/dock…"   25 minutes ago      Up 25 minutes               0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp    elasticsearch1

三、数据备份

备份与恢复的版本说明

备份恢复时的版本兼容性:当前版本支持当前版本及升高一个的版本进行恢复不支持跨版本直接恢复。当然如果你想跨版本恢复,可以尝试版本递增滚动升级来达到目的。

反之则不可行,不能递减版本来恢复备份的数据。

1. 增加仓库配置项

在每个Elastcisearch节点的elasticsearch.yml的配置文件内加入:

path:
  repo:
    - /usr/share/elasticsearch/backup

2. API指令在原始ES集群创建仓库

a@~:~$ curl -H "Content-Type:application/json" -XPUT 'http://127.0.0.1:9200/_snapshot/{mybackup:这是备份的名称}' -d '{
>   "type": "fs",
>   "settings": {
>     "location": "backupdata", #是对于elasticsearc.yml中地址的相对地址,也可以填完整地址
>     "compress": "true"  #压缩
>   }
> }'

此外还可以选择的参数有:

  • location: 仓库地址
  • compress: 是否启用压缩,默认为true
  • chunk_size: 是否将文件切块,并指定文件块大小,默认:null(不切分)
  • max_restore_bytes_per_sec: Snapshot从仓库恢复时的限速,默认:无限制
  • max_snapshot_bytes_per_sec: 节点创建Snapshot进入仓库时的限速,默认:40mb/s
  • readonly: Snapshot是否只读,默认:false
  • 更多参数可以参考:官方 Repository API

出现以下内容则说明创建成功

{"acknowledged":true}

3. API查看原始ES集群里创建的仓库

查看刚才建立的名为mybackup的仓库是否成功了

a@~:~$ curl -XGET 'http://127.0.0.1:9200/_snapshot'
{
    "mybackup": { 
    "type":"fs",
    "settings":{
        "compress":"true","location":"backupdata"
        }
        }
}

以上查询到了就是成功了, 此外可以在es创建的时候外挂的数据目录内看到新建的“backupdata”目录

4. API验证原始ES集群备份仓库是否创建成功

通过verify验证节点仓库是否在所有节点已生效

a@~:~$ curl -XPOST 'http://127.0.0.1:9200/_snapshot/mybackup/_verify'
{
    "nodes":{
        "VsZZX8i9Qk-o2YLwQbNPQQ":{
            "name":"75707f972883"
            }
    }
}

5. API创建快照备份

a@~:~$ curl -H "Content-Type:application/json" -XPUT 'http://127.0.0.1:9200/_snapshot/{mybackup:备份仓库的名字}/{snapshot_1:备份的名字}?wait_for_completion=true' -d '{
>   "indices": "sms_send_history_202208,users", #需要备份的index 
>   "ignore_unavailable": true,
>   "include_global_state": false,
>   "metadata": {
>     "taken_by": "testuser",
>     "taken_because": "test for backup."
>   }
> }'

我们API选择参数等到其完成,因而API的结果最终会返回

{"snapshot":{
    "snapshot":"snapshot_1",
    "uuid":"8wrJ_ODOTQeiXN9uNamQRw",
    "version_id":7060299,
    "version":"7.6.2",
    "indices":["sms_send_history_202208","users"],"include_global_state":false,
    "metadata":{
        "taken_by":"testuser",
        "taken_because":"test for backup."
        },
        "state":"SUCCESS",
        "start_time":"2022-08-08T09:43:24.082Z","start_time_in_millis":1659951804082,"end_time":"2022-08-08T09:43:24.484Z","end_time_in_millis":1659951804484,
        "duration_in_millis":402,"failures":[],
        "shards":{
            "total":6,
            "failed":0,
            "successful":6
            }
        }
}

6. API删除备份

如果导出配置错误\使用完毕,可以将备份删除

DELETE /_snapshot/my_fs_backup/snapshot_1
DELETE /_snapshot/my_fs_backup/snapshot_*

能够指定一个、多个备份名称,或者通配符的方式将匹配的全部删除

四、数据恢复

前面配置两个Elasticsearch节点的时候我们将数据备份的目录挂载在了同一个

所以,我们只需要在Elasticsearch2的节点上也新建一下同名的仓库,路径名称与上面Elasticsearch1的一致,恢复的时候即可直接一键恢复,如果无法实现同一目录挂载,可能就要涉及数据的转移

1. 必做步骤

a@~:~$ curl -H "Content-Type:application/json" -XPUT 'http://127.0.01:9201/_snapshot/{mybackup:与原仓库一致}' -d '{
>   "type": "fs",
>   "settings": {
>     "location": "backupdata-与原仓库一致",
>     "compress": "true"
>   }
> }'
{"acknowledged":true}

否则会有报错:

{"error":{"root_cause":[{"type":"repository_missing_exception","reason":"[mybackup] missing"}],"type":"repository_missing_exception","reason":"[mybackup] missing"},"status":404}

2. API 恢复备份

直接全量恢复

curl -XPOST 'http://127.0.0.1:9201/_snapshot/mybackup/snapshot_1/_restore'

选择部分恢复:

curl -H "Content-Type:application/json" -XPOST 'http://127.0.0.1:9201/_snapshot/mybackup/snapshot_1/_restore' -d '

{
  "indices": "user",
  "ignore_unavailable": true,   
  "include_global_state": false, # include_global_state默认为true,是设置集群全局状态 
  "rename_pattern": "user_(.+)",  # 重命名索引匹配规则,如: user_1  
  "rename_replacement": "re_user_$1",# 重命名索引为新的规则,如: re_user_1
  "include_aliases": false
}'

正常返回值:

{
    "accepted":true
}

3. API 确认数据

通过原始指令查看index 和 索引数据

a@~:~$ curl http://127.0.0.1:9201/_cat/indices
yellow open users                   jSc-YVNhREu_at5b-Nm7vA 5 1 2 0 12.1kb 12.1kb
yellow open sms_send_history_202208 lefrl7cAQkmO69J2r-xO1g 1 1 9 0   63kb   63kb

a@~:~$ curl http://127.0.0.1:9201/sms_send_history_202208/_search?pretty
{
  "took" : 58,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 9,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "sms_send_history_202208",
        "_type" : "sms_send_history",
        "_id" : "efb44600dbbe446789371ae146df654d",
        "_score" : 1.0,
        "_source" : {
          "acctime" : 1659715200000,
          "channelid" : 3,
          "msgcount" : 1,
          "msgbody" : "友情提示:1111111222222222220",
          "sendcode" : "001",
          "@timestamp" : "2022-08-08T0"
          }
      }]
  }
}

后续可以再通过页面或其他渠道验证下数据文章来源地址https://www.toymoban.com/news/detail-496902.html

到了这里,关于ElasticSearch 数据备份与恢复的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL数据备份与恢复

    备份的主要目的: 备份的主要目的是:灾难恢复,备份还可以测试应用、回滚数据修改、查询历史数据、审计等。 日志: MySQL 的日志默认保存位置为: ##配置文件 ##通用查询日志,用来记录MySQL的所有连接和语句,默认是关闭的 ##二进制日志(binlog),用来记录所有更新了数据

    2024年02月11日
    浏览(47)
  • MySQL 数据备份与恢复

    本次使用的MySQL版本为8.0.20 目录 一、数据备份 1.使用 MySQLdump 命令备份 (1)使用MySQLdump备份单个数据库中的所有表 案例:完成数据插入后,输入备份命令如下: (2)使用MySQLdump备份数据库中的某个表 案例:备份booksDB数据库中的books表,输入语句如下: (3)使用MySQLdump备

    2024年02月11日
    浏览(43)
  • ES数据备份与恢复

    场景:ES线上的数据和服务迁移到另外的机器上去 老ES机器ip:172.16.0.1 新ES机器ip:172.16.0.2 一. 首先, 在备份之前要在es/config/elasticsearch.yml添加仓库配置: path.repo: [\\\"/mnt/backup/es_backup\\\"] 1. 2.重启ES 二. 在老机器上 3.创建备份仓库 在/mnt/backup下新建名为es_backup的仓库 POST /_snapsho

    2024年02月16日
    浏览(40)
  • Vault数据备份恢复-MySQL

    Vault提供了可靠的功能来保护数据库和其他关键数据。 对于MySQL数据库,Vault提供了一个易于使用的解决方案,可以自动创建和管理定期备份,并支持从备份中快速恢复数据。本文将介绍Vault后端存储MySQL的备份恢复,包括如何设置Vault、如何进行数据备份和还原、如何保护备份

    2024年02月14日
    浏览(39)
  • 06.Oracle数据备份与恢复

    01.CentOS7静默安装oracle11g 02.Oracle的启动过程 03.从简单的sql开始 04.Oracle的体系架构 05.Oracle数据库对象 06.Oracle数据备份与恢复 07.用户和权限管理 08.Oracle的表 09.Oracle表的分区 10.Oracle的同义词与序列 11.Oracle的视图 12.Oracle的索引 13.Oracle通过JDBC连接Java 14.Oracle中的事务 15.Oracle11g的

    2024年02月05日
    浏览(45)
  • 如何备份与恢复MySQL数据库数据

    目录 一、MySQL备份 备份方式 完全备份 差异备份 增量备份 二、常见的备份方法 物理冷备 专用备份工具 mysqldump 或 mysqlhotcopy 启用二进制日志进行增量备份 第三方工具备份 三、MySQL完全备份 四、数据库完全备份分类 物理冷备份与恢复 mysqldump备份与恢复 五、物理冷备份与恢复

    2024年02月16日
    浏览(73)
  • 数据库运维——备份恢复

    数据库备份,数据库为school,素材如下 1.创建student和score表 CREATE  TABLE  student ( id  INT(10)  NOT NULL  UNIQUE  PRIMARY KEY  , name  VARCHAR(20)  NOT NULL , sex  VARCHAR(4)  , birth  YEAR, department  VARCHAR(20) , address  VARCHAR(50)  ); 创建score表。SQL代码如下: CREATE  TABLE  score ( id  INT(10)  NOT NU

    2024年02月16日
    浏览(66)
  • mysql 数据备份与恢复使用详解

    对一个运行中的线上系统来说,定期对数据库进行备份是非常重要的,备份不仅可以确保数据的局部完整性,一定程度上也为数据安全性提供了保障,设想如果某种极端的场景下,比如磁盘损坏导致某个时间段数据丢失,或者误操作导致数据表数据被删等... 这种情况在现实中

    2024年02月08日
    浏览(52)
  • 9-MySQL数据库 数据的备份与恢复

    1.date文件的备份 2.mysqldump 备份 说明: mysqldump是MySQL数据库中的一个实用程序,它主要用于转储(备份)数据库。mysqldump通过生成一个SQL脚本文件,包含从头开始重新创建数据库所必需的(如 CREATE TABLE和INSERT等),来实现数据库的备份和转储。这样,你可以在任何时候通过运

    2024年02月08日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包