更新时间:2024-07-16 GMT+08:00
分享

数据迁移

社区版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)。

数据导出

  1. 导出准备。

    运行迁移工具,将准备好的tsm以及wal文件解析,并转化为lineProtocol文件以供导入。

    由于GeminiDB Influx压缩率较高,请按照实际GeminiDB Influx tsm文件目录以及 wal文件目录磁盘空间总和30倍的大小在导出ECS上预留磁盘空间。

  2. 修改导出配置文件。

    请创建导出目录,解压压缩包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"。

  3. 运行导出脚本。

    修改完毕后,执行如下命令运行导出脚本:

    nohup python cvtAllData.py &

    可执行如下命令查看任务是否结束:

    ps -ef|grep cvtAllData.py|grep -v grep

    脚本运行结束后,导出文件会存放于cvtLocDataTool/rstData/Output/目录下。

数据导入

  1. 在导入任务结束后,修改导入配置文件。

    解压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选项,表明导入前所要删除的数据库列表,多个数据库使用"|"分隔,如果不需要,请配置为""。

  2. 运行导入脚本。

    修改导入配置文件完毕后,请进入到解压目录/importInflux/import/目录下:

    cd ./importInflux/import/

    运行如下命令执行导入任务:

    nohup ./import -host $host -username &username -password &password - deleteDb[Option] &
    • $host 、$username 、$password分别对应实例IP地址、数据库账号以及对应账号的密码。如果密码存在特殊字符,如“!@” ,请插入转义字符\ 至特殊字符前。
    • deleteDb为可选项,若在导入前不删除DB,请不要输入此选项。

  3. 导入任务执行日志。

    导入日志会记录在解压目录./importInflux/import下,如果存在导出异常,请收集该目录下导出日志。

  4. 导入任务重试。

    若需要重新执行任务,请将解压目录./importInflux/import/data目录删除。若不删除,则会从上一次失败/未完成的任务继续导入。

    rm -rf ./importInflux/import/data

  5. 验证。

    导入完成后,进行数据完整性验证,可抽样对比源端数据以及目标端数据,查看是否一致。

迁移性能参考

  • 迁移环境:
    • 源端:华为云4U16GB的弹性云服务器部署开源InfluxDB以及迁移工具。
    • 目标端:4U16GB,3节点GeminiDB Influx实例。
  • 迁移性能:
    • 源端单一进程数据导出速率为1GB/min。
    • 目标端单线程导入速率为1GB/min。

相关文档