理论基础:ElasticSearch 通过快照实现数据的备份处理,建立快照之前需要创建好仓库;然后将快照存储在仓库中。可以针对部分索引创建快照,也可以对所有的索引创建快照。( 快照迁移数据的方式 相当于整体复制索引和Mapping,如果考虑迁移数据时,重建Mapping,应该采用reindex接口。)
整体思路:基于两台虚拟机Linux环境,搭建两个Elasticsearch测试集群,通过快照方式将集群1的数据索引test_index_db,整体迁移至集群2。
集群环境:jdk1.8,es6.4.1,kibana6.4.1
一、创建仓库
1、首先需要在数据源ES节点服务器上创建仓库,并且要设置这个目录是共享的目录,所有的节点都能对这个目录进行读写。
Linux的NFS配置,将服务器B的目录共享到服务器A,这样服务器A上面的程序就可以直接在共享目录中上传合并文件,就像访问自己本地的文件一样。
Linux服务器之间如何设置共享目录:https://jingyan.baidu.com/article/48206aea3495f3616ad6b3b0.html
mount.nfs: access denied by server while mounting解决办法:
修改配置文件/etc/exports
/mnt/my_repo_folder *(insecure,rw,async,no_root_squash)
保存退出,然后重启nfs服务:service nfs restart
2、在所有 ElasticSearch 节点中elasticsearch.yml文件中定义好仓库的路径,并重启服务
如: path.repo: /mnt/my_repo_folder
3、数据源ES集群和目标源ES集群都要注册仓库:在kibana执行如下命令注册仓库
# _snapshot es提供api接口
# my_repo 仓库名称
# compress为true,表明我们希望压缩。
# max_restore_bytes_per_sec和max_snapshot_bytes_per_sec 限制数据的snapshot及恢复的数据速度
PUT _snapshot/my_repo
{
"type": "fs",
"settings": {
"location": "/mnt/my_repo_folder",
"compress": true,
"max_restore_bytes_per_sec": "50mb",
"max_snapshot_bytes_per_sec": "50mb"
}
}
二、快照操作接口
1、数据源ES集群:在kibana执行如下的命令来对我们的test_index_db索引进行snapshot:
PUT _snapshot/my_repo/test_snapshot_1
{
"indices": "test_index_db",
"ignore_unavailable": true,
"include_global_state": true
}
2、数据源ES集群:我们可以通过如下的命令来进行监测正在进行的snapshot的进度
GET _snapshot/my_repo/test_snapshot_1/_status
3、目标源ES集群:在源ES创建快照完成后,在目标ES即可执行如下命令,将仓库中的快照恢复至目标集群。
#索引test_index_db不能提前创建,由快照中直接恢复
POST _snapshot/my_repo/test_snapshot_1/_restore
{
"indices": "test_index_db",
"ignore_unavailable": true,
"include_global_state": false
}
参考:
https://cn-blogs.cn/archives/259.html
https://www.cnblogs.com/sanduzxcvbnm/p/12090809.html