百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

Es7.x数据迁移实战(Snapshot、S3)

liuian 2025-06-24 15:18 15 浏览

前言

前面文章写过ES的迁移方案,不同场景使用不同的迁移方案会事半功倍,今天咱们就来具体操作一下基于Snapshot方式来迁移数据,Snapshot更加适用于大数据量跨集群迁移数据。并且索引创建快照的过程是增量的。在给索引创建快照的过程中,Elasticsearch会分析存储在仓库中的索引文件并且只会复制那些自从上次快照 之后新建或有所更新的文件。这使得多个快照以一种紧凑的方式存储在同一个仓库里。创建快照的过程是以非阻塞方式执行的。一个索引在创 建快照的同时能够被检索和查询。尽管如此,快照保存的是在开始进行创建快照的那个时间点的索引的视图。所以,在开始创建快照之后的记录不会出现在这个快照里。在主分片启动之后创建快照的过程就会立即开始,并且之后不会改变位置。

操作

开门见山,直接上操作,咱们使用Kibana可视化桌面来操作,当然也可以直接使用CURL的方式。

安装S3插件

除了S3,也可以使用本地存储fs等,进入docker容器

docker exec -it c76785ab5a8b bash

# 安装插件
./bin/elasticsearch-plugin insyall repository-s3

exit

重启容器(不建议这样安装,万一容器挂了重新启动后就会没有,建议使用挂载的方式)

docker restart c76785ab5a8b

查看是否安装成功

GET _cat/plugins

c76785ab5a8b analysis-ik 7.8.1
c76785ab5a8b repository-s3 7.8.1

显示这样表明安装成功,一般情况下插件版本是和ES的版本对应的

创建仓库

创建仓库之前咱们先把minio的AK、SK在后台配置(安全),以同样的方式进入docker中

./bin/elasticsearch-keystore add s3.client.default.access_key
./bin/elasticsearch-keystore add s3.client.default.secret_key

添加后退出重启(不建议)

然后开始创建仓库

PUT _snapshot/stock_backup
{
  "type": "s3",
  "settings": {
    "bucket": "stock",
    "protocol": "http",
    "disable_chunked_encoding": "true",
    "endpoint": "172.0.0.1:9000"
  }
}

验证是否创建成功

GET _snapshot/_all?pretty

{
  "stock_backup" : {
    "type" : "s3",
    "settings" : {
      "bucket" : "stock",
      "disable_chunked_encoding" : "true",
      "endpoint" : "172.0.0.1:9000",
      "protocol" : "http"
    }
  }
}

此时,仓库已经创建好了,咱们直接备份数据

备份

全量备份

PUT _snapshot/stock_backup/snapshot_all

部分备份,例如:只备份其中的index

当然也可以添加参数:

indices: 要本分的index,逗号分割。

max_wait: 最大等待时间。

wait_interval: 等待间隔。

wait_for_completion: 参数指定创建snapshot的请求是否等待快照创建完成再返回。

ignore_unavailable: 把这个选项设置为 true 的时候在创建快照的过程中会忽略不存在的索引。默认情况下, 如果没有设置 ignore_unavailable 在索引不存在的情况下快照请求将会失败。

include_global_state: 为false 能够防止 集群的全局状态被作为快照的一部分存储起来。默认情况下,如果快照中的1个或多个索引不是全部主分片都可用会导致整个创建快照的过程失败。 通过设置 partial 为 true 可以改变这个行为。

PUT _snapshot/stock_backup/default_all
{
  "indices": "dec_default_news,dec_default_rate,dec_default_ha",
  "ignore_unavailable": true,
  "include_global_state": false
}

查看备份状态

GET _snapshot/stock_backup/default_all  # 查看单个

{
  "snapshots" : [
    {
      "snapshot" : "default_all",
      "uuid" : "4ZgKyuBWTE2vtowAczIDpQ",
      "version_id" : 7080199,
      "version" : "7.8.1",
      "indices" : [
        "dec_default_news",
        "dec_default_rate",
        "dec_default_ha"
      ],
      "include_global_state" : false,
      "state" : "SUCCESS",
      "start_time" : "2022-04-02T03:16:09.842Z",
      "start_time_in_millis" : 1648869369842,
      "end_time" : "2022-04-02T03:16:09.842Z",
      "end_time_in_millis" : 1648869369842,
      "duration_in_millis" : 0,
      "failures" : [ ],
      "shards" : {
        "total" : 3,
        "failed" : 0,
        "successful" : 3
      }
    }
  ]
}

GET _snapshot/stock_backup/_all?pretty  # 查看所有

{
  "snapshots" : [
    {
      "snapshot" : "default_all",
      "uuid" : "4ZgKyuBWTE2vtowAczIDpQ",
      "version_id" : 7080199,
      "version" : "7.8.1",
      "indices" : [
        "dec_default_news",
        "dec_default_rate",
        "dec_default_ha"
      ],
      "include_global_state" : false,
      "state" : "SUCCESS",
      "start_time" : "2022-04-02T03:16:09.842Z",
      "start_time_in_millis" : 1648869369842,
      "end_time" : "2022-04-02T03:16:09.842Z",
      "end_time_in_millis" : 1648869369842,
      "duration_in_millis" : 0,
      "failures" : [ ],
      "shards" : {
        "total" : 3,
        "failed" : 0,
        "successful" : 3
      }
    }
  ]
}

此时已经备份成功

恢复

咱们的操作是跨集群的数据迁移,同样的操作,在另一个集群里面创建相同的仓库

PUT _snapshot/stock_backup
{
  "type": "s3",
  "settings": {
    "bucket": "stock",
    "protocol": "http",
    "disable_chunked_encoding": "true",
    "endpoint": "172.0.0.1:9000"
  }
}

然后看下现在有备份数据

GET _snapshot/stock_backup/_all?pretty
{
  "snapshots" : [
    {
      "snapshot" : "default_all",
      "uuid" : "4ZgKyuBWTE2vtowAczIDpQ",
      "version_id" : 7080199,
      "version" : "7.8.1",
      "indices" : [
        "dec_default_news",
        "dec_default_rate",
        "dec_default_ha"
      ],
      "include_global_state" : false,
      "state" : "SUCCESS",
      "start_time" : "2022-04-02T03:16:09.842Z",
      "start_time_in_millis" : 1648869369842,
      "end_time" : "2022-04-02T03:16:09.842Z",
      "end_time_in_millis" : 1648869369842,
      "duration_in_millis" : 0,
      "failures" : [ ],
      "shards" : {
        "total" : 3,
        "failed" : 0,
        "successful" : 3
      }
    }
  ]
}

发现已经存在了备份的数据,此时只需要恢复就行

POST _snapshot/stock_backup/default_all/_restore

{
  "acknowledged" : true
}

等待执行结束就OK

GET _cat/indices

yellow open dec_default_news   HWykC-xpQVK0ZqK-3NjXVA 1 1     308    0   208kb   208kb
yellow open dec_default_rate   F3JFzHF-QK2AH_9IUmnacA 1 1  409471    0 221.5mb 221.5mb
yellow open dec_default_ha     c78OXNB1T3KafgVHj7TwiA 1 1     164    0 250.2kb 250.2kb

大功告成

相关推荐

总结下SpringData JPA 的常用语法

SpringDataJPA常用有两种写法,一个是用Jpa自带方法进行CRUD,适合简单查询场景、例如查询全部数据、根据某个字段查询,根据某字段排序等等。另一种是使用注解方式,@Query、@Modi...

解决JPA在多线程中事务无法生效的问题

在使用SpringBoot2.x和JPA的过程中,如果在多线程环境下发现查询方法(如@Query或findAll)以及事务(如@Transactional)无法生效,通常是由于S...

PostgreSQL系列(一):数据类型和基本类型转换

自从厂子里出来后,数据库的主力就从Oracle变成MySQL了。有一说一哈,贵确实是有贵的道理,不是开源能比的。后面的工作里面基本上就是主MySQL,辅MongoDB、ES等NoSQL。最近想写一点跟...

基于MCP实现text2sql

目的:基于MCP实现text2sql能力参考:https://blog.csdn.net/hacker_Lees/article/details/146426392服务端#选用开源的MySQLMCP...

ORACLE 错误代码及解决办法

ORA-00001:违反唯一约束条件(.)错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。ORA-00017:请求会话以设置跟踪事件ORA-00018:超出最大会话数ORA-00...

从 SQLite 到 DuckDB:查询快 5 倍,存储减少 80%

作者丨Trace译者丨明知山策划丨李冬梅Trace从一开始就使用SQLite将所有数据存储在用户设备上。这是一个非常不错的选择——SQLite高度可靠,并且多种编程语言都提供了广泛支持...

010:通过 MCP PostgreSQL 安全访问数据

项目简介提供对PostgreSQL数据库的只读访问功能。该服务器允许大型语言模型(LLMs)检查数据库的模式结构,并执行只读查询操作。核心功能提供对PostgreSQL数据库的只读访问允许L...

发现了一个好用且免费的SQL数据库工具(DBeaver)

缘起最近Ai不是大火么,想着自己也弄一些开源的框架来捣腾一下。手上用着Mac,但Mac都没有显卡的,对于学习Ai训练模型不方便,所以最近新购入了一台4090的拯救者,打算用来好好学习一下Ai(呸,以上...

微软发布.NET 10首个预览版:JIT编译器再进化、跨平台开发更流畅

IT之家2月26日消息,微软.NET团队昨日(2月25日)发布博文,宣布推出.NET10首个预览版更新,重点改进.NETRuntime、SDK、libraries、C#、AS...

数据库管理工具Navicat Premium最新版发布啦

管理多个数据库要么需要使用多个客户端应用程序,要么找到一个可以容纳你使用的所有数据库的应用程序。其中一个工具是NavicatPremium。它不仅支持大多数主要的数据库管理系统(DBMS),而且它...

50+AI新品齐发,微软Build放大招:拥抱Agent胜算几何?

北京时间5月20日凌晨,如果你打开微软Build2025开发者大会的直播,最先吸引你的可能不是一场原本属于AI和开发者的技术盛会,而是开场不久后的尴尬一幕:一边是几位微软员工在台下大...

揭秘:一条SQL语句的执行过程是怎么样的?

数据库系统能够接受SQL语句,并返回数据查询的结果,或者对数据库中的数据进行修改,可以说几乎每个程序员都使用过它。而MySQL又是目前使用最广泛的数据库。所以,解析一下MySQL编译并执行...

各家sql工具,都闹过哪些乐子?

相信这些sql工具,大家都不陌生吧,它们在业内绝对算得上第一梯队的产品了,但是你知道,他们都闹过什么乐子吗?首先登场的是Navicat,这款强大的数据库管理工具,曾经让一位程序员朋友“火”了一把。Na...

详解PG数据库管理工具--pgadmin工具、安装部署及相关功能

概述今天主要介绍一下PG数据库管理工具--pgadmin,一起来看看吧~一、介绍pgAdmin4是一款为PostgreSQL设计的可靠和全面的数据库设计和管理软件,它允许连接到特定的数据库,创建表和...

Enpass for Mac(跨平台密码管理软件)

还在寻找密码管理软件吗?密码管理软件有很多,但是综合素质相当优秀且完全免费的密码管理软件却并不常见,EnpassMac版是一款免费跨平台密码管理软件,可以通过这款软件高效安全的保护密码文件,而且可以...