ES8生产实践——ES跨集群数据迁移方案测评

   日期:2024-12-26    作者:szklm01 移动:http://oml01z.riyuangf.com/mobile/quote/33435.html

经常有小伙伴咨询如何将整个es集群数据如何迁移到另一个集群,其中往往会涉及到以下的问题
跨es版本:老版本es集群数据迁移到新版本es集群。
跨集群:源数据和目的数据分布在两个不同的集群。
跨网络:两套集群分布数据不同的局域网、一套在公有云、一套在自建机房。

ES8生产实践——ES跨集群数据迁移方案测评

目前主流的解决方案分为以下两类
批量读取旧集群的数据然后再批量写入新集群:elasticsearch-dump、esm、reindex、logstash都是采用这种方式。
底层文件备份恢复:snapshot直接把旧集群的底层的文件进行备份,在新的集群中恢复出来,相比较scroll query + bulk的方式,snapshot的方式迁移速度最快。

源数据集群:单节点rpm方式部署的es7.17.18集群,ip地址为192.168.10.70。
目的数据集群:3节点rpm方式部署的es8.12.2集群,ip地址为192.168.10.61/62/63。
数据中转操作节点:可同时连接两套es集群,用于中转数据。

我们先在目的集群设置索引模板,保证写入速率最大化。

 
 
 

ES支持快照功能,用于实现数据的备份与恢复。我们可以生成单个索引或整个集群的快照,并将其存储在共享文件系统上的存储库中,并且有一些插件支持 S3、HDFS、Azure、Google Cloud Storage 等上的远程存储库。
本实验以NFS为例演示es的快照备份与恢复。

源集群配置

目的集群配置

elasticsearch-dump是一个开源的使用JavaScript语言开发的Elasticsearch数据迁移工具,详细信息请参见文档:https://github.com/elasticsearch-dump/elasticsearch-dump

中转操作节点安装部署

安装elasticdump

 

Elasticdump标准指令是

 
  • input SOURCE表示读取数据源SOURCE
  • output DESTINATION表示将数据源传输到目的地DESTINATION。
  • SOURCE/DESTINATION两者都可以是Elasticsearch URL或文件,如果是Elasticsearch URL,例如http://127.0.0.1/index,就意味着是直接往地址为http://127.0.0.1ES库里导入或者从其导出索引相关数据。
  • [OPTIONS]是操作选项,比较常用有type和limit,其他操作这里就不展开介绍。

type是ES数据导出导入类型,Elasticdum工具支持以下数据类型的导入导出。

type类型说明mappingES的索引映射结构数据dataES的数据settingsES的索引库默认配置analyzerES的分词器templateES的模板结构数据aliasES的索引别名

整个迁移过程分为先设置索引参数参数,再迁移mapping结构,待数据迁移完成后再修改number_of_replicas和refresh_interval为合适的值。

迁移mapping

使用elasticdump工具,将es7单节点的geonames索引mapping迁移到三节点es8集群中。

 

mapping迁移完成后,查看索引信息,已经创建名为geonames的索引。

迁移data

与迁移mapping类似,我们只需要将type从mapping改为data即可,观察控制台输出,每迁移1万条数据耗时约95秒。

 

elasticdump执行完成后查看目的集群索引,已成功完成迁移,整个过程耗时约3个小时。

esm迁移过程原理与elasticsearch-dump类似,区别在于esm使用go语言开发,号称每分钟可以迁移一千万条数据,仓库地址:https://github.com/medcl/esm

中转操作节点安装部署

安装esm

 

esm标准指令是

 
  • -s表示读取数据源SOURCE
  • -d表示将数据源传输到目的地DESTINATION。
  • -x表示需要复制的index名称
  • -q表示指定条件的查询语句
  • -n表示base认证的用户名和密码
  • -w表示并发数,默认为1
  • -b表示buck大小,默认5MB
  • -f表示复制前删除已有重名索引
  • –refresh表示完成后再刷新索引

迁移数据

使用esm工具,将es7单节点的geonames索引模板与数据迁移到三节点es8集群中。

 

通过控制台可知,整个迁移过程需要时间约1个小时10分钟。

设置索引模板

在迁移数据前,我们先设置索引模板,保证写入速率最大化

 

配置集群白名单

需要修改目的集群每个节点配置,新增源数据集群es地址,然后重启elasticsearch服务。

 

执行reindex迁移

在目的集群使用dev tools工具执行如下指令。

  • 其中size表示每批次的数据量,默认值1000
  • slice表示切片数量,我们有3个数据节点,可将参数设置为3。
  • wait_for_completion=false表示异步执行,ES将会以task 来描述此类执行任务
 

查询异步任务。

 

实测2.6GB数据迁移用时15分钟。

安装logstash

 

配置logstash

 

启动logstash

 

实测2.6GB数据迁移用时8分钟。

ES除了用于存储业务类数据外,日志和指标数据存储也是其另一大使用场景,在这类业务场景下,数据迁移往往还需要考虑到采集日志客户端逐渐切换过程中日志数据增量迁移的问题。

CCR方案:ES官方推出了CCR跨集群复制方案,可以完美实现数据的实时增量迁移,具体可参考文档https://www.cuiliangblog.cn/detail/section/83558841,需要注意的是开源社区版不支持该功能。
定时任务+时间范围查询方案:然后通过定时任务工具每分钟执行一次迁移工具,查询最近3分钟数据(主要取决于源数据refresh_interval参数,查询时间范围应大于refresh_interval参数,在写入es集群时指定文档id为原始数据id,以保证写入新集群时数据唯一。需要注意的是此方案只能针对数据有增无减的场景使用。可以使用sdk开发程序,或者使用logstash来实现。在增量同步前先执行一次全量迁移任务,保证先前历史数据迁移至新集群,然后再启动增量迁移任务。

修改配置文件,我们只需要将pipeline放置在/etc/logstash/conf.d/目录下并以.conf结尾,logstash启动时会去扫描该目录下所有conf结尾的pipeline并加载。

 

启动logstash迁移服务

 
 
 
方案elasticsearch-dumpesmreindexlogstashsnapshot基本原理逻辑备份,类似mysqldump将数据一条一条导出后再执行导入ESM 是 medcl 开源的派生自:Elasticsearch Dumper 的工具,基于 go 语言开发。reindex 是 Elasticsearch 提供的一个 API 接口,可以把数据从一个集群迁移到另外一个集群从一个集群中读取数据然后写入到另一个集群从源集群通过Snapshot API 创建数据快照,然后在目标集群中进行恢复网络要求无网络互通要求无网络互通要求网络需要互通网络需要互通无网络互通要求迁移速度最慢很慢一般很快最快适合场景适用于数据量小的离线场景适用于数据量小的离线场景适用于数据量中等,在线迁移数据的场景适用于数据量很大,实时数据传输的场景适用于数据量特大,离线数据迁移的场景配置复杂度简单简单中等中等复杂缺点速度全宇宙最慢,没有之一跨大版本不能迁移mapping,需要手动迁移需要设置集群白名单,重启elasticsearch服务logstash对资源要求较高,建议单独的一台服务器运行。在快照还原过程中无法修改分片数,分片数取决于源集群索引设置。迁移时长(1100万条数据)3小时1小时10分钟15分钟8分钟2分钟

微信公众号同步更新,欢迎关注微信公众号《崔亮的博客》第一时间获取最近文章。


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号