O、简介

介绍两种比较好的ES集群迁移数据的方法。下面是对两种方法的具体描述,已经过实践验证通过。

方法1、利用开源工具elasticdump进行迁移。优点是操作及其简单,且不需要重启集群;缺点是传输较慢,不适用大数据量的传输,过程中集群间使用http端口,占用集群带宽。主要还是慢。
方法2、利用ES自带快照备份到文件存储进行迁移。优点是速度快,因为是写磁盘,拷贝到新集群服务器,从快照恢复,速度快。适用于大数据量的场景

一、使用elasticdump工具迁移

0.安装nodejs(如果已安装请忽略)

执行

yum install -y nodejs
1.升级nodejs

执行

npm install -g n
n latest
2.安装elasticdump工具

执行

npm install elasticdump -g
3.迁移指定索引的settings,mapping,data

执行

elasticdump --input=http://fromhost:9200/indexname --output=http://tohost:9200/indexname --type=settings
elasticdump --input=http://fromhost:9200/indexname --output=http://tohost:9200/indexname --type=mapping
elasticdump --input=http://fromhost:9200/indexname --output=http://tohost:9200/indexname --type=data

二、利用ES自带快照备份到文件存储进行迁移

0.源ES集群指定共享文件夹

保证/data/backups目录存在,且属于elastic启动用户

mkdir /data/backups
chown -R elastic:elastic /data/backups

vim master节点 elasticsearch.yml添加行

path.repo: ["/data/backups"]

重启master节点生效

1.源ES集群中创建repository

执行指令

curl -XPUT http://fromhost:9200/_snapshot/my_repository  -d '{
    "type": "fs", 
    "settings": {
        "location": "/data/backups" 
    }
}'
2.创建快照(快照备份数据)
curl -XPUT http://fromhost:9200/_snapshot/my_repository/snapshot_20191114?wait_for_completion=true  -d '{
    "indices": "indexname"
}'

备份完成后文件夹/data/backups目录下有备份文件

3.移动源ES集群snapshot至目标ES集群的仓库

拷贝/data/backups/my_backup到新es集群机器

4.目标ES集群创建repository
curl -XPUT http://tohost:9200/_snapshot/my_repository  -d '{
    "type": "fs", 
    "settings": {
        "location": "/data/backups" 
    }
}'
5.新的集群查看快照信息
curl -XGET http://tohost:9200/_snapshot/my_repository/_all
6.从快照恢复
curl -XPOST http://tohost:9200/_snapshot/my_repository/snapshot_20191114/_restore

更多推荐