数据迁移
社区版InfluxDB是非常受欢迎的时序数据库,着力于高性能地查询与存储时序型数据。
GeminiDB Influx是基于华为自研的计算存储分离架构,兼容InfluxDB的生态的时序数据库。在云计算平台高性能、高可用、高可靠、高安全、可弹性伸缩的基础上,提供了一键部署、快速备份恢复、计算存储独立扩容、监控告警等服务能力。GeminiDB Influx相较于社区版本InfluxDB,有更强的查询、写入以及数据压缩的性能。
本章节主要介绍社区版InfluxDB到GeminiDB Influx的迁移方案。
迁移原理
通过迁移工具解析社区版InfluxDB的tsm以及wal文件写入到行协议(Line Protocal)文件中,最终将行协议文件数据解析并迁移至目标端。
整个迁移过程分为导出和导入阶段两个阶段。
- 导出阶段会并发解析社区版InfluxDB的tsm以及wal文件,并将解析数据写入到行协议文件中。
- 导入阶段会并发读取行协议文件,将读取数据发送至GeminiDB Influx集群各节点上。
迁移工具支持全量迁移和增量迁移,具体可在配置文件中配置。
使用须知
- 迁移工具,与社区版InfluxDB部署在相同机器上,准备好配置文件。
- 迁移工具需要从tsm以及wal提取数据到本地行协议文件,并从行协议文件中获取数据发送到目标端GeminiDB Influx ,该过程中可能影响源端性能,建议在业务低峰期运行迁移工具。
- 由于需要将tsm/wal文件数据提取至行协议文件,请预留足够大的磁盘空间。
- 迁移工具仅支持社区版InfluxDB 1.x版本迁移。
前提条件
- 确保源端、目标端之间网络互通。
- 目标端GeminiDB Influx已创建好对应的数据库和RP(Retention Policy)。
数据导出
GeminiDB Influx迁移工具cvtLocDataTool_all.tar的获取,您可以在管理控制台右上角,选择“工单 > 新建工单”。
- 导出准备。
运行迁移工具,将准备好的tsm以及wal文件解析,并转化为lineProtocol文件以供导入。
由于GeminiDB Influx压缩率较高,请按照实际GeminiDB Influx tsm文件目录以及 wal文件目录磁盘空间总和30倍的大小在导出ECS上预留磁盘空间。
- 修改导出配置文件。
请创建导出目录,解压压缩包cvtLocDataTool_all.tar至导出目录下,并修改导出目录./cvtLocDataTool/config/toolcfg.json文件,文件模板内容如下:
{ "orgData" : "./sample_data", "expBeginTime" : "2021-03-27T08:00:00+08:00", "expEndTime" : "2021-03-27T20:00:00+08:00", "mutilProc" : true, "Concurrent Number" : 12, "openDebugLog" : false, "ignoreDBs" : "_internal|myfirstdb" }
- orgData:表示GeminiDB Influx wal以及tsm文件存放目录。请整理tsm以及wal文件目录,并确保tsm文件目录如下:xxx/data/[Database name]/[RP name] /[shard Id]/xxxx.tsm,wal文件目录如下:xxx/wal/[Database name]/[RP name] /[shard Id]/xxxx.wal。
- expBeginTime: 表示迁移导出数据的起始时间(GMT+08:00),"" 空表示不需要指定开始时间。
- expEndTime:表示迁移导出数据的结束时间(GMT+08:00),"" 空表示不需要指定结束时间。
- mutilProc:表示是否开启多进程,请保证该参数为true。
- Concurrent Number:表示并发数,并发数与运行的ECS性能有关,建议:16U64GB建议配置为8,32U128GB建议配置为12。
- openDebugLog: 打印debug日志开关,用于测试,请保证该参数为false。
- ignoreDBs:表示不需要导出的DB列表,多个DB使用"|"分隔,默认请填写"_internal"。
- 运行导出脚本。
修改完毕后,执行如下命令运行导出脚本:
nohup python cvtAllData.py &
可执行如下命令查看任务是否结束:
ps -ef|grep cvtAllData.py|grep -v grep
脚本运行结束后,导出文件会存放于cvtLocDataTool/rstData/Output/目录下。
数据导入
- 在导入任务结束后,修改导入配置文件。
解压importInflux.zip,解压完毕后进入到解压目录./importInflux/import /目录下,修改config.json配置文件,文件内容如下所示:
{ "ImportDir":"/root/stefan/stefan-AKC/data/", "ProcessorsNum":6, "ConnectDbPool":"xxx.xxx.xxx.xxx", "Ssl":false, "dropDatabases":"stefaninflux|stefaninflux1|prism" }
- ImportDir:导入数据的目录,即导出步骤中的导出目录,此处的目录必须为导出目录的绝对路径。
- ProcessorsNum:总并发任务数。总并发任务数建议配置值区间范围[2,3x节点个数],即最小配置2个并发,最高配置为3x节点个数(节点个数是指GeminiDB Influx 实例的节点个数)。如参数ConnectDbPool 填写了三个节点IP,则并发最小值为2,最大值为3x3=9。
- ConnectDbPool:为连接池IP,请填写GeminiDB Influx实例节点的IP,多个IP请用"|"分隔。
- Ssl:请确认GeminiDB Influx实例SSL的开启状态,开启SSL则填写true,关闭填写false。
- dropDatabases:配合导入任务deleteDb选项,表明导入前所要删除的数据库列表,多个数据库使用"|"分隔,如果不需要,请配置为""。
- 运行导入脚本。
修改导入配置文件完毕后,请进入到解压目录/importInflux/import/目录下:
cd ./importInflux/import/
运行如下命令执行导入任务:
nohup ./import -host $host -username &username -password &password - deleteDb[Option] &
- $host 、$username 、$password分别对应实例IP地址、数据库账号以及对应账号的密码。如果密码存在特殊字符,如“!@” ,请插入转义字符\ 至特殊字符前。
- deleteDb为可选项,若在导入前不删除DB,请不要输入此选项。
- 导入任务执行日志。
导入日志会记录在解压目录./importInflux/import下,如果存在导出异常,请收集该目录下导出日志。
- 导入任务重试。
若需要重新执行任务,请将解压目录./importInflux/import/data目录删除。若不删除,则会从上一次失败/未完成的任务继续导入。
rm -rf ./importInflux/import/data
- 验证。
导入完成后,进行数据完整性验证,可抽样对比源端数据以及目标端数据,查看是否一致。
迁移性能参考
- 迁移环境:
- 源端:华为云4U16GB的弹性云服务器部署开源InfluxDB以及迁移工具。
- 目标端:4U16GB,3节点GeminiDB Influx实例。
- 迁移性能:
- 源端单一进程数据导出速率为1GB/min。
- 目标端单线程导入速率为1GB/min。