基于elasticsearch的快照机制实现集群的数据迁移

一、背景

因为各种原因,我需要将环境A的ip分别为172.17.3.132,172.17.3.133,172.17.3.134组成的es集群的所有数据迁移至环境B的ip分别为172.16.129.184,172.16.129.185,172.16.129.186的es集群中,以下是我基于elasticsearch的快照机制完成数据迁移的整个过程。希望可以给有相同业务场景的朋友以参考。

二、源服务器(环境A)集群数据导出

1、创建快照存储库

(1)、集群中的每台es服务器修改elasticsearch.yml配置:

这行配置主要是指定es存储库可以创建的路径,当然你需要提前创建好对应的文件目录, 下面是我的配置:

less 复制代码
path.repo: ["/data/to/kibana/snapshot"]

然后重启每台es服务器

(2)、创建es的存储库

这边的方式有多种: 如果你有kibana的控制台:

输入存储库名字,按图操作

你也在开发工具中可以通过指令创建:

js 复制代码
PUT /_snapshot/kibana_backup
{
  "type": "fs",
  "settings": {
    "location": "/data/to/kibana/snapshot"
  }
}

如果你只有linux的界面: 可以在其中一台es服务器上curl创建; 可以参考一下指令,当然你需要自己替换ip和端口

js 复制代码
curl -X PUT "http://<elasticsearch_host>:<port>/_snapshot/kibana_backup" -H 'Content-Type: application/json' -d' { "type": "fs", "settings": { "location": "/data/to/kibana/snapshot" } }'

2、生成索引快照

(主要以kibana控制台操作为主) 生成所有索引的快照指令:

js 复制代码
POST /_snapshot/kibana_backup/snapshot_1

如果你只需要生成指定索引快照指令: 例如:索引名为(blockhead)

js 复制代码
PUT /_snapshot/kibana_backup/snapshot_1
{ "indices": "blockhead" }1.2.3.4.

然后等待快照生成(应该是异步生成的,需要等待),当然可以在kibana中看快照是否完成

3、迁移数据至目标服务器集群(环境B)

生成的快照会放在三台服务器的/data/to/kibana/snapshot下生成文件,如图

这里的snapshot2是我的第二个存储库,可以忽略不看

我这边是将源服务器(环境A)的三台的/data/to/kibana/snapshot打包再分别拷贝到目标服务器(环境B)的三台服务上的。 为了方便我这边建议快照也解压放在目标服务器(环境B)的/data/to/kibana/snapshot路径下

三、目标服务器集群(环境B)从快照中恢复数据

1、创建快照存储库

(1)、目标服务器(环境B)集群中的每台es服务器修改elasticsearch.yml配置:

这行配置主要是指定es存储库可以创建的路径,当然你需要提前创建好对应的文件目录, 下面是我的配置:

less 复制代码
path.repo: ["/data/to/kibana/snapshot"]

然后重启每台es服务器

(2)、搭建目标服务器(环境B)的NFS文件共享机制

具体的搭建方式和步骤我这边就不描述了(因为我自己尝试搭建,然后失败了。不得不找了个专业的运维同事来帮忙搭建了--我其实是个开发),最终需要确保:环境B的/data/to/kibana/snapshot目录为 172.16.129.184,172.16.129.185,172.16.129.186这三台服务器的共享目录,并且三台服务器的es用户对这个目录拥有读写的权限。

(3)、解压源服务器(环境A)的快照

(已经做了,可以忽略此步骤) 解压至目标服务器(环境B)的/data/to/kibana/snapshot路径下

(4)、生成目标服务器(环境B)存储库

此步骤需要在完成上述步骤后执行,不然此存储库可能没法识别到快照文件

js 复制代码
PUT /_snapshot/kibana_backup
{
  "type": "fs",
  "settings": {
    "location": "/data/to/kibana/snapshot"
  }
}

虽然我这边在检验存储库的时候,还是有权限的报错,但是我这边好像实际没有什么影响,可以忽略。不过你得确保目标服务器(环境B)的NFS文件共享机制没有问题,并且都赋予了对应的权限

2、从快照中恢复数据

如果一切正常,你的存储应该就能识别到有一个快照文件

(1)、删除目标服务器(环境B)中的索引

因为我接受环境A的所有数据,所以在还原前得把服务器(环境B)中的索引全部删除掉,当然你也可以使用快照把B的数据提前备份,但是建议不要放在一个存储库里,以免数据错乱了

(2)、指令恢复

然后你就可以通过指令来恢复数据:

恢复所有索引:

js 复制代码
POST /_snapshot/kibana_backup/snapshot_1/_restore

恢复指定索引: 以索引blockhead为例: 当然你也需提前删除掉目标服务器(环境B)的blockhead索引

js 复制代码
POST /_snapshot/kibana_backup/snapshot_1/_restore
{   
  "indices": "blockhead",  
  "rename_pattern": "index_(.+)",   
  "rename_replacement": "blockhead_$1"}1.2.3.4.5.6.
}

然后就是等待数据慢慢生成,因为是异步线程恢复的,需要等待

正在恢复的索引状态应该是yellow,恢复好的应该是green

相关推荐
hengzhepa7 小时前
ElasticSearch备考 -- Async search
大数据·学习·elasticsearch·搜索引擎·es
bubble小拾14 小时前
ElasticSearch高级功能详解与读写性能调优
大数据·elasticsearch·搜索引擎
不能放弃治疗15 小时前
重生之我们在ES顶端相遇第 18 章 - Script 使用(进阶)
elasticsearch
hengzhepa16 小时前
ElasticSearch备考 -- Search across cluster
学习·elasticsearch·搜索引擎·全文检索·es
Elastic 中国社区官方博客17 小时前
Elasticsearch:使用 LLM 实现传统搜索自动化
大数据·人工智能·elasticsearch·搜索引擎·ai·自动化·全文检索
慕雪华年18 小时前
【WSL】wsl中ubuntu无法通过useradd添加用户
linux·ubuntu·elasticsearch
Elastic 中国社区官方博客20 小时前
使用 Vertex AI Gemini 模型和 Elasticsearch Playground 快速创建 RAG 应用程序
大数据·人工智能·elasticsearch·搜索引擎·全文检索
alfiy21 小时前
Elasticsearch学习笔记(四) Elasticsearch集群安全配置一
笔记·学习·elasticsearch
alfiy1 天前
Elasticsearch学习笔记(五)Elastic stack安全配置二
笔记·学习·elasticsearch
丶21362 天前
【大数据】Elasticsearch 实战应用总结
大数据·elasticsearch·搜索引擎