老师,我想请问一下,我们有个版本是2.4.x版本的es,想把他里面的数据(数据量比较大,十几T)导入到7.10.x版本,但是升级版本,需要的变更太多,只能选择数据迁移,不知道用什么方法去迁移,老师能给一些建议吗? 死磕 Elasticsearch 知识星球 https://t.zsxq.com/1250CqALT
从 Elasticsearch 2.4.x 到 7.10.x 的迁移确实是一个大跨步,直接升级的确存在很多不兼容的变更。数据迁移在这种场景下是一个相对稳妥的选择。以下是一些建议:
Elasticdump 是一个用于从一个集群导入和导出数据的工具。你可以先从2.4.x版本的ES导出数据,然后导入到7.10.x版本。
# 导出
elasticdump --input=http://source-es-cluster:9200/myindex --output=/path/to/data.json --type=data
# 导入
elasticdump --input=/path/to/data.json --output=http://destination-es-cluster:9200/myindex --type=data
特别提醒球友:考虑到你的数据量很大,这可能需要一些时间,并且你可能需要分批次执行,而不是一次导出/导入所有数据。
Elasticsearch 提供了一个Reindex API,允许你在远程的集群上重新索引。但由于版本之间的差异,你可能需要一个中间集群,例如一个6.x的Elasticsearch
先从2.4.x迁移到6.x,再从6.x迁移到7.10.x。
先试试直接 7.X 行不行吧。
使用 Logstash 也是一个可行的选择。你可以设置 2.4.x 版本的Elasticsearch作为输入源,7.10.x 版本的Elasticsearch作为输出目标。
在迁移数据之前,检查你的数据模型和索引映射。
图片来自:https://github.com/LisaHJung
一般先迁移 Mapping,再迁移数据。这样能有效避免索引 Mapping 不一致的情况。
7.x版本对于某些数据类型和设置有所不同,你可能需要对映射进行调整。
比如:早期版本支持多type,7.X 及之后版本已不支持。如果要迁移,多个 type 数据 可以迁移到多个不同索引。
在进行任何操作之前,确保你有2.4.x版本的完整备份。
虽然你不打算进行版本升级,但始终保持数据备份是一个好习惯。
在进行大规模迁移之前,建议你先测试一小部分数据的迁移,以确保过程是正确的,并对可能出现的问题有所了解。
如果小规模可行,再验证大规模集群数据。
由于数据量很大,导入新的 7.10.x 版本时,确保你的集群有足够的容量和性能来处理数据导入的负载。
详细新版本集群规划的时候已经考虑了这一点,如果当时没有考虑数据激增情况,现在就得考虑一下。
在迁移过程中,持续监控集群的性能和健康状况,确保所有事情都在预期之内进行。
迁移总是有其挑战性的,尤其是跨多个主版本。但通过结构化和步骤化的方法,你可以确保流程尽可能顺畅。
球友反馈:老师,经过部署测试,logstash2.4.1版本可以把 es2.4.1版本的数据迁移到 7.10.2上去。
但是需要升级插件版本(logstash-output-elasticsearch插件版本6.2.5及以上),我们的源es版本2.4.1版本太低,所以没敢升太高,最后选择了6.3.0版本的插件。
由于2.4.1版本太低,没法调优,只能使用默认的配置。
至此,验证完成,问题解决。
本文分享自 铭毅天下Elasticsearch 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!