Tendis-SSD是现网环境运行的KV存储.在Tendis存储版上线后,需要将现网数据迁移至Tendis存储版.本篇提供进行数据迁移的方案设计.

背景介绍

Tendis存储版Tendis-SSD的全面升级版本,在命令支持, 性能提升, 运维监控, 集群管理, 节点数据搬迁等方面具有明显的改进和优势.在对现网数据进行搬迁之前,需要了解这两版KV存储之间的区别与共性, 相较于Tendis-SSD, Tendis存储版提供了更加丰富的功能和可观的性能.主要体现在以下方面:

  • Redis兼容性: 完全兼容redis协议,支持绝大多数redis的指令
  • 持久化存: 使用rocksdb作为存储引擎,所有数据以特定格式存储在rocksdb中,最大支持PB级存储
  • 去中心化架构: 类似于redis cluster的分布式实现, 使用和运维成本很低。
  • 水平扩展: 集群支持增删节点,并且数据可以按照slot在任意两节点之间迁移.
  • 故障高可用: 自动检测故障节点,当故障发生,slave会提升为master继续对外服务。
  • redis冷热混合存储关键组件

​ 数据迁移目标是将Tendis-SSD中的数据完整迁移到Tendis存储版中,其中包括了, Tendis-SSD支持的所有数据结构:String, Hash, List, Set, ZSet. 另外还需要考虑相关的命令支持: CAS, HMCAS, HMCASV2等在Tendis-SSD上实现的CAS-family命令.必要情况下需要Tendis存储版提供相关的命令支持.

数据迁移方案

​ 考虑到Tendis-SSD的特殊情况是: 正在现网环境下运行中的机器, 即迁移的是动态数据. 并非一成不变的静态数据.需要进行迁移方案的预研选型:

  1. 暂时Block业务写请求, 将所有Tendis-SSD数据全量迁移至Tendis存储版

    属于较为朴实的设计, 在节点数据有限的情况下, 此方案效率较高, 直接进行落盘文件的搬移, 完成数据迁移工作.但同样存在问题:

    • 需要Tendis存储版支持直接load来自Tendis-SSD的db文件能力, 需要开发测试支持
    • 在QPS较低的情况下,此方案勉强可行. 但如果业务QPS较高, 且全量数据容量较大的情况下,服务不可用时间较长

    此方案属于将动态数据暂时转化为静态数据的方案, 有诸多的限制, 在业务量众多,且场景不同的情况下,不具有普适性, 不适合作为当前的迁移方案

  2. 通过备份产生Tendis-SSD全量快照的binlog, 导入Tendis存储版后, 使用Redis-Sync进行增量数据同步

    ​ 此方案主要分为三个步骤: Export(导出)->import(导入)->Append(增量)三个阶段. 其中不会将业务请求阻塞, 不会造成业务使用瓶颈, 同时也能获得不错的迁移效率, 具体的迁移步骤操作如下:

    • Export(导出): 对Tendis-SSD使用tredisdump工具将备份好的数据进行dump, 会将全量数据转换为AOF形式, 此工具支持多线程
    • Import(导入): 使用多开Redis-cli进行批量并发导入, 凭借Tendis存储版支持多线程操作的特性完成高效导入
    • Append(增量): 在完成数据导入之后, 使用同步组件Redis-Sync进行增量数据的同步追加.

    此方案更为完善和普适, 一方面并不会阻塞也请求访问, 可以做到业务无感知搬迁. 另一方面通过机器资源的扩展提升数据迁移效率.选定此方案进行数据迁移.

数据搬迁操作

​ 在确定数据迁移方案后,下面介绍具体的数据迁移操作:

  1. 导出阶段:

    使用tredisdump进行数据导出. 命令如下:

    tredisdump --db_path $DBPATH --sst_path $SST_PATH --threads $THREADS

  2. 导入阶段: 使用Redis-cli多开进行并行导入, 操作不再赘述.

  3. 增量阶段:

    增量同步类似于Redis-PSYNC操作, 不同的是, 需要处理Tendis-SSD主备复制的binlog. 在Redis-Sync支持Tendis-SSD的binlog同步后可以进行相关的增量数据同步.

    1. redis-sync> cnys $syncState $lastSeq $lastKey $runId # 进行相关参数设置
    2. redis-sync> syncadmin start # 开始进行增量同步
    3. redis-sync> info [Tendis-SSD/Server/Queue] # 查看相关运行时监控数据

    按照上述操作即可完成数据搬迁工作

Redis-Sync可以后期常驻,在数据增量同步完成后, 可以阻塞对源DB的业务请求, 将其重定向到新的DB节点,以此来完成数据搬迁工作.

Redis-Sync相关配置

Redis-Sync作为同步组件,需要进行一定程度上的配置, 推荐配置如下:

  1. [server]
  2. threads=4
  3. port=21213
  4. sync-tick=10
  5. skip-start=yes
  6. loglevel=notice
  7. [source]
  8. 127.0.0.1:21212|
  9. [remote]
  10. 127.0.0.1:20121|
  11. 127.0.0.1:20122|
  12. 127.0.0.1:20123|
  13. 127.0.0.1:20121|