openGemini:如何从InfluxDB迁移数据?

xiangyu | March 09, 2023 | 752

openGemini具备丰富的分布式集群能力,同时高度兼容InfluxDB 1.x APIs和数据格式。它的开源,对于InfluxDB用户来说,这无疑是一个好消息,不论是性能还是可扩展性,openGemini都是一个替代InfluxDB非常不错的选择。

openGemini具备丰富的分布式集群能力,同时高度兼容InfluxDB 1.x APIs和数据格式。它的开源,对于InfluxDB用户来说,这无疑是一个好消息,不论是性能还是可扩展性,openGemini都是一个替代InfluxDB非常不错的选择。

更为重要的是,从InfluxDB改为使用openGemini,无需修改代码,即可实现业务无缝对接,能极大缩小系统升级周期。

当选择openGemini后,摆在大家面前的第一个问题是如何迁移数据?本文接下来主要介绍三种解决方案,供大家参考

迁移方案(一)

该方案可以总结为两点:

1. 历史数据通过openGemini社区提供的dataMigrate数据迁移工具直接读取 TSM文件,同步写入openGemini

2. 增量数据通过数据订阅功能,完成数据同步

由于InfluxDB 2.x版本不在支持数据订阅功能,因此该方案仅对InfluxDB 1.x版本有效

细心的读者可能发现了一些问题

通过读取TSM文件,可能会导致最新数据被重复写入,如何解决?

这主要靠dataMigrate来解决,dataMigrate工具支持时间范围设置,可设定一个时间点 t,在时间 t 之前的数据将被写入openGemini,为了防止数据丢失,这个时间 t 应该设置为订阅数据写入openGemini的第一条数据的时间。

大并发写入场景下,InfluxDB订阅功能可能会出现乱序等现象,如果要保证数据有序,则会出现性能瓶颈,如何解决?

openGemini支持乱序写入,可确保数据查询结果的正确性。大并发写入场景下,建议设置 write-concurrency 订阅参数( >1 ),避免数据出现堆积,造成性能瓶颈。

迁移方案(二)

该方案可以总结为两点:

1. 历史数据通过openGemini社区提供的

dataMigrate数据迁移工具直接读取TSM文件,同步写入openGemini

2. 增量数据通过数据双写的方式实现同步

与方案(一)最大的不同在于增量数据同步不再由InfluxDB的订阅功能来完成,而是由业务双写数据来实现。

方案(二)的优点是:

不区分InfluxDB版本

业务独立写一份数据到openGemini,不依赖InfluxDB具体版本

迁移历史数据,对数据需要长期保存的应用来说,更友好

至于方案(一)中提及的重复数据写入问题,可参考dataMigrate对时间的设置。

迁移方案(三

使用该方案有一个前提条件,即InfluxDB设置了数据过期,并且是短期的,假设数据过期时间为1个月。

该方案总结如下:

1. 从某个时刻起,业务实现数据双写,1个月内,业务继续在InfluxDB中运行。1个月以后,业务可切到openGemini

2. 设置业务开关,随时可切换业务的主库,一段时间内,双库运行。

3. 历史数据不再同步,数据双写需要一直延续到旧库的数据全部被过期清理。

该方案的优点是:

不迁移历史数据

数据短期过期,数据迁移的意义并不大。可通过双库运行的方式,让数据自动过期被清理。

稳定性强

在一段时间内保持双库运行,可确保openGemini在接入业务之后,出现任何问题可随时切回旧库,适合对业务稳定性要求较高的场景

dataMigrate介绍

dataMigrate是社区提供的一款InfluxDB的数据迁移工具。其实现原理为:解析TSM文件数据格式,读取数据并生成openGemini数据格式写入。

社区地址:https://github.com/openGemini/data-migration-tools

dataMigrate使用方式如下:

> dataMigrate -from path-to-data -to openGemini-host -star star-time -stop stop-time -database dbname

path-to-data:InfluxDB的数据目录,例如“/var/lib/Influxdb/data",路径指定到data目录即可。工具会根据dbname自动检索对应目录下的tsm文件并处理

openGemini-host:openGemini服务的监听地址和端口,默认是"127.0.0.1:8086"

star:设置迁移数据的有效起始时间,时间格式要求为:RFC3339格式

stop:设置迁移数据的有效截止时间,时间格式要求为:RFC3339格式

database:设置迁移的数据库名,dataMigrate按照数据库粒度进行迁移

示例

> ./dataMigrate -from /var/lib/influxdb/data/ -to 127.0.0.1:8086 -database testdb

效果

总结

本文主要介绍了InfluxDB数据迁移到openGemini的三种解决方案,希望可以帮助到大家。

在这里还要特别感谢社区的@dxzxomy同学,在他的推动下,让社区在短时间内拥有了自己的数据迁移工具,同时也帮助了更多使用openGemini的用户。

在这里,我们也希望有更多喜欢开源的朋友加入到openGemini社区,为社区添砖加瓦

openGemini,共创新,赢未来!

Related posts

微信扫一扫:分享

Scan me!

微信里点“发现”,扫一下

二维码便可将本文分享至朋友圈。

Copy Link Moments Facebook Twitter