ES跨集群数据迁移方案
文章介绍
提示:Snapshot方案一:磁盘作为快照仓库。
该方式的不足之处:
- es表使用快照迁移,单表的数据量如果过大,磁盘空间是瓶颈;
- 如果是5.x以上的集群,还需要考虑ES服务下用于快照repo的backup目录必须和物理机上的目录对应上,否则数据访问不到,这样能操作单表的数据大小进一步受限,受限于/var/log/search1/…的空间。(docker模式下的磁盘挂载大小影响)。
一、基础环境配置
安装fuse*
在各个节点(两个ES集群的所有节点)执行:
yum install –y fuse*
安装sshfs包
在各个节点(两个ES集群的所有节点)执行,安装sshfs包:
rpm -ivh fuse-sshfs-2.5-1.el7.rf.x86_64.rpm
创建共享目录
在单个节点上创建共享目录(建议选择磁盘空间大的磁盘),两个集群分别挑选一个节点创建这个数据快照目录即可。
mkdir /mnt/disk1/backup
创建ES服务的数据目录
此步骤为可选项,如果现场的ES部署方式为docker+k8s的部署方式,需要在镜像里面创建和宿主机互通的一个目录。
在所有节点上创建目录(5.x以上的需要建立能够对应docker内的目录):
mkdir /var/log/search1/backup
建立共享目录
每个节点执行,将各个节点的目录指向上述创建的共享目录。两个集群分别指向各自集群的单个节点的共享目录。
sshfs root@ct-45:/mnt/disk1/backup /var/log/search1/backup -o allow_other
添加额外参数
在es服务上添加参数各个节点上添加参数,并配置服务-重启服务。(dcoker模式下需要) 不然创建快照报错
path.repo: /var/log/search1/backup
文件:elasticsearch.yml
注意:页面添加参数(不能在各个节点elasticsearch.yml中修改,不然配置服务会被还原)
二、源端功能验证
创建快照的repository
创建快照的repository
curl -XPUT 'http://172.18.9.45:9200/_snapshot/my_backup?pretty' -d '{
"type": "fs",
"settings": {
"location": "/var/log/search1/backup",
"compress": true
}
}'
查看repository
curl -XGET 'http://localhost:9200/_snapshot/my_backup?pretty'
对单个表进行备份
curl -XPUT "localhost:9200/_snapshot/my_backup/snapshot_1?wait_for_completion=true&pretty" -d '{
"indices": "test.tb_es",
"ignore_unavailable": true,
"include_global_state": false
}'
对所有表进行备份
curl -XPUT http://localhost:9200/_snapshot/my_backup/snapshot_20200622
查看共享目录
备份创建好之后,在共享目录/mnt/disk1/backup里是这样的:
在迁移目标的集群上重复上面创建仓库的操作
目标端功能验证
目标端功能验证同源端一样
拷贝备份数据
将源集群的备份内容(/mnt/disk1/backup里的所有文件),复制到迁移目标的集群仓库目录里。
scp -r 172.18.9.45:/mnt/disk1/backup/* /mnt/disk1/backup/
目标集群数据恢复
在目标集群上执行以下命令恢复数据
恢复单张表test.tb_es,名字为restored_test.tb_es
curl -XPOST "localhost:9200/_snapshot/my_backup/snapshot_1/_restore?pretty" -d '{
"indices": "test.tb_es",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "test.tb_es",
"rename_replacement": "restored_test.tb_es"
}'
查看数据是否恢复成功:
curl -XGET http://localhost:9200/restored_test.tb_es/_recovery?pretty=true
查看index状态
curl -XGET 'localhost:9200/restored_test.tb_es/_settings?pretty'
数据校验
数据校验:
curl –XGET http://localhost:9200/restored_test.tb_es/_search?pretty=true
条数校验:
curl –XGET http://localhost:9200/restored_test.tb_es/_count?pretty=true
查看备份状态
curl -XGET 'localhost:9200/_snapshot/_status?pretty'
欢迎大家的点赞、收藏和支持,有疑问可以在评论区打出来