(一)、简述
不一样集群的ES环境搭建在不一样的环境中,能够在公有云和私有云进行搭建,用户也能够根据本身的业务须要选择合适的迁移方案,若是业务能够停服务的话或者暂停写操做,能够采用离线迁移,离线迁移有四种方式可供选择:node
1.一、elasticdump安装 ####下载nodes wget https://nodejs.org/dist/v10.13.0/node-v10.13.0-linux-x64.tar.xz ####解压 xz -d node-v10.13.0-linux-x64.tar.xz tar xvf node-v10.13.0-linux-x64.tar -C /opt ####配置和生效环境变量 vim /etc/profile export NODE_HOME=/opt/node-v10.13.0-linux-x64 export PATH=$PATH:$NODE_HOME/bin export NODE_PATH=$NODE_HOME/lib/node_modules source /etc/profile npm -v 1.二、 ####安装elasticdump工具 npm install elasticdump -g elasticdump --help 1.三、迁移单个索引 ####迁移setting、mapping、data elasticdump --input=http://10.16.0.8:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=settings elasticdump --input=http://10.16.0.8:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=mapping elasticdump --input=http://10.16.0.8:9200/companydatabase --output=http://172.16.0.20:9200/companydatabase --type=data ###备注 --input: 源地址,可为ES集群URL、文件或stdin,可指定索引,格式为:{protocol}://{host}:{port}/{index} --input-index: 源ES集群中的索引 --output: 目标地址,可为ES集群地址URL、文件或stdout,可指定索引,格式为:{protocol}://{host}:{port}/{index} --output-index: 目标ES集群的索引 --type: 迁移类型,默认为data,代表只迁移数据,可选settings, analyzer, data, mapping, alias
二、snapshotmysql
适用于数据量大的场景
snapshot api是Elasticsearch用于对数据进行备份和恢复的一组api接口,能够经过snapshot api进行跨集群的数据迁移,原理就是从源ES集群建立数据快照,而后在目标ES集群中进行恢复。须要注意ES的版本问题:
目标ES集群的主版本号(如5.6.4中的5为主版本号)要大于等于源ES集群的主版本号;
1.x版本的集群建立的快照不能在5.x版本中恢复;
具体步骤以下:linux
一、源ES集群中建立repository 建立快照前必须先建立repository仓库,一个repository仓库能够包含多份快照文件,二、二、二、repository主要有一下几种类型 fs: 共享文件系统,将快照文件存放于文件系统中 url: 指定文件系统的URL路径,支持协议:http,https,ftp,file,jar s3: AWS S3对象存储,快照存放于S3中,以插件形式支持 hdfs: 快照存放于hdfs中,以插件形式支持 cos: 快照存放于腾讯云COS对象存储中,以插件形式支持 若是须要从自建ES集群迁移至腾讯云的ES集群,能够直接使用fs类型仓库,注意须要在Elasticsearch配置文件elasticsearch.yml设置仓库路径: path.repo: ["/data/es/backup"] 一、配置文件 vim elasticsearch.yml path.repo: ["/data/es/backup"] 二、注册快照仓库repository到ES中 PUT /_snapshot/es_backup { "type": "fs", "settings": { "location": "/data/es/backup/" } } 三、建立索引并添加文档 DELETE test PUT test/_doc/1 { "key": "value1", "name": "lqbyz", "age":30 } 四、建立快照 #建立全部索引的快照 PUT _snapshot/es_backup/snapshot4?wait_for_completion=true #建立指定索引建立快照 PUT /_snapshot/es_backup/snapshot_3?wait_for_completion=true { "indices": "test", "ignore_unavailable": true, "include_global_state": false, "metadata": { "taken_by": "lqbyz", "taken_because": "backup before delete" } } 五、查看相关的快照 GET _snapshot/es_backup/_all GET _snapshot/es_backup/ GET _cat/indices 六、删除相关的快照 DELETE _snapshot/my_backup GET test/_search 七、恢复快照 POST _snapshot/es_backup/snapshot_3/_restore {} #指定索引进行restore POST /_snapshot/es_backup/snapshot1/_restore { "indices": "elk-info-test-2020-06-26", "index_settings": { "index.number_of_replicas": 1 }, "ignore_index_settings": [ "index.refresh_interval" ] } 八、删除索引和快照 DELETE test DELETE _snapshot/my_fs_backup #####相关操做的查询 #####删除es_backup仓库 DELETE _snapshot/es_backup ###查看仓库信息 GET _snapshot/_all ####查看快照的 GET _snapshot/snapshot4/_status ###建立一个snapshot快照(包含全部的索引) PUT _snapshot/es_backup/snapshot4?wait_for_completion=true ###建立一个快照只包含test2的索引 PUT _snapshot/es_backup/snapshot2 { "indices": "test2" } ###查看刚才建立的快照信息 GET /_snapshot/es_backup/snapshot2 ###查看全部的快照信息 GET _snapshot/es_backup/_all ###删除一个快照 DELETE /_snapshot/es_backup/snapshot2 ###删除一个仓库 DELETE /_snapshot/es_backup 若是要中止一个正在运行的snapshot任务(备份和恢复),将其删除便可。
三、reindexgolang
reindex是Elasticsearch提供的一个api接口,能够把数据从源ES集群导入到当前的ES集群,一样实现了数据的迁移,限于腾讯云ES的实现方式,当前版本不支持reindex操做。简单介绍一下reindex接口的使用方式。sql
一、配置reindex.remote.whitelist参数 须要在目标ES集群中配置该参数,指明可以reindex的远程集群的白名单 二、调用reindex api 如下操做表示从源ES集群中查询名为test1的索引,查询条件为title字段为elasticsearch,将结果写入当前集群的test2索引 POST _reindex { "source": { "remote": { "host": "http://10.16.0.8:9200" }, "index": "test1", "query": { "match": { "title": "elasticsearch" } } }, "dest": { "index": "test2" } }
四、logstash(filebeat、golang)
logstash支持从一个ES集群中读取数据而后写入到另外一个ES集群,所以可使用logstash进行数据迁移,具体的配置文件以下:数据库
input { elasticsearch { hosts => ["http://10.16.0.8:9200"] index => "*" docinfo => true } } output { elasticsearch { hosts => ["http://10.16.0.9:9200"] index => "%{[@metadata][_index]}" } }
总结:
一、elasticsearch-dump和logstash作跨集群数据迁移时,都要求用于执行迁移任务的机器能够同时访问到两个集群,否则网络没法连通的状况下就没法实现迁移。而使用snapshot的方式没有这个限制,由于snapshot方式是彻底离线的。所以elasticsearch-dump和logstash迁移方式更适合于源ES集群和目标ES集群处于同一网络的状况下进行迁移,而须要跨云厂商的迁移,好比从阿里云ES集群迁移至腾讯云ES集群,能够选择使用snapshot的方式进行迁移,固然也能够经过打通网络实现集群互通,可是成本较高。
二、elasticsearchdump工具和mysql数据库用于作数据备份的工具mysqldump工具相似,都是逻辑备份,须要将数据一条一条导出后再执行导入,因此适合数据量小的场景下进行迁移;
三、snapshot的方式适合数据量大的场景下进行迁移,推荐使用npm