基于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

相关推荐
大志哥1232 天前
ES和Logstash日志链路系统上线后遭遇切片爆炸(解决)
大数据·elasticsearch
TableRow3 天前
参数化搜索的实现原理:从多维索引到查询优化
elasticsearch·全文检索
醉颜凉3 天前
Elasticsearch高性能优化:Bulk API大规模数据导入性能调优全攻略
elasticsearch·性能优化·jenkins
Ysouy3 天前
Spring Data Elasticsearch 全流程学习教程
java·spring·elasticsearch
沪飘大军3 天前
goldRush-专门分析黄金的投资理财agent
java·开发语言·elasticsearch
让学习成为一种生活方式3 天前
samblaster v.0.1.26安装与使用--生信工具096
大数据·elasticsearch·搜索引擎
小马爱打代码3 天前
Elasticsearch 容器化部署(单机版):从零搭建你的搜索和分析引擎
elasticsearch
西敏寺的乐章3 天前
排序三阶段:粗排→精排→重排,把业务信号灌进 ES 排序管道
elasticsearch·搜索引擎
小马爱打代码3 天前
Elasticsearch 集群容器化部署:构建 PB 级搜索与分析平台
大数据·elasticsearch·搜索引擎
二哈赛车手4 天前
新人笔记---idea索引失效问题解决方案
java·笔记·spring·elasticsearch·intellij-idea