文档首页> 云数据库 GeminiDB> GeminiDB Redis接口> 数据迁移> 自建Redis到GeminiDB Redis的迁移
更新时间:2023-11-21 GMT+08:00

自建Redis到GeminiDB Redis的迁移

本章节主要介绍自建Redis到GeminiDB Redis的迁移方案。

迁移原理

使用Redis-Shake迁移工具进行源端Redis到目标端GeminiDB Redis的迁移。迁移过程支持全量+增量迁移,支持单机/主从/Cluster集群/RDB文件等多种Redis数据源。

  • 全量迁移原理:工具模拟源端Redis的从节点,通过全量同步获取RDB文件,解析后将数据以命令形式发送给目标端GeminiDB Redis。此外,也可将RDB文件作为数据源,方便地导入某时刻的数据快照。
  • 增量迁移原理:全量迁移完成后,工具继续将增量数据以命令形式发送给目标端GeminiDB Redis,直到手动停止工具。

使用须知

  • 如遇到源端Redis同步脱节,此时需要停止迁移工具,清空目标端数据并重新迁移。为避免此场景,建议在写入流量低峰时段迁移,并可适当调大源端client-output-buffer-limit参数,以增大增量同步的环形缓冲区大小。
  • 迁移工具理论上不会对源端数据造成影响,但可能会暂时影响性能。
  • 多DB迁移场景,需注意源端与目标端的DB映射关系,避免造成非预期的数据覆盖。
  • 暂时不支持stream类型数据的迁移。
  • 保证迁移工具Redis-Shake、源端Redis和目标端GeminiDB Redis网络互通。
  • 如需进行自建Redis到GeminiDB Redis的迁移支持,您可以在管理控制台右上角,选择“工单 > 新建工单”,联系技术支持进行处理。

开源Redis单机/主从版在线移到GeminiDB Redis

开源Redis单机/主从版除了可以采用上述文件导入方式外,还可以在线迁移到GeminiDB Redis

  1. 部署迁移工具。

    1. 获取开源工具Redis-Shake

      Redis-Shake工具可下载release版本,解压缩后即可使用。

    2. 修改配置文件“Redis-Shake.conf”,修改时需要注意以下配置项。

      log.level = info # 默认日志级别,info级别可以打印出相应的迁移进度,可以用来判断迁移是否结束。

      source.address = <host>:<port> # 源端地址,开源redis所在主机及端口。

      source.password_raw = ***** # 源端口令。

      source.type = standalone # 根据源端类型选择。

      target.address = <host>:8635 # 目标端地址。

      target.password_raw = ***** # 目标端口令。

      target.version = 5.0 # 目标端redis版本。

      target.type = standalone # 目标端类型。

      target.db = -1 # 将所有数据迁移到目标端GeminiDB Redis的指定数据库上,若设置为-1,则迁移后的数据库和源实例的DB保持相同的映射关系。

    3. 按需选配是否覆盖目标端数据。

      key_exists = none

      当源端和目的端有重复key时需要选配是否覆盖目标端数据,可配置的值为:

      • rewrite:源端覆盖目的端。
      • none:一旦发生进程直接退出。
      • ignore:保留目的端key,忽略源端的同步key。该值在rump模式下不会生效。

      由于本次迁移源端是RDB文件,因此预期无重复数据,建议选择none。如迁移过程异常退出,请联系技术支持进行处理。

  2. 进行数据迁移。

    启动迁移命令:

    ./redis-shake.linux -conf=redis-shake.conf -type=sync

    • 执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段。
      sync rdb done
    • 执行日志出现如下信息时,代表增量同步无新增内容,可以停止程序以中断增量同步。
      sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0

  3. 数据校验。

    使开源Redis单机/主从版在线移到GeminiDB Redis用工具RedisFullCheck进行校验,下载并解压缩后即可使用。

    ./redis-full-check -s SOURCE_IP:SOURCE_PORT -p SOURCE_PWD -t TARGET_IP:8635 -a TARGET_PWD

    校验完毕出现如下信息表示迁移成功,源端与目的端数据相同。

    all finish successfully, totally 0 key(s) and 0 field(s) conflict

开源Redis集群版迁移到GeminiDB Redis

对于开源Redis集群版,需要注意配置文件中以下两项:

source.address = <host1>:<port1>,<host2>:<port2>,<host2>:<port2> # 源端各节点所在主机及端口

source.type = cluster # 源端为cluster集群

其他步骤与开源Redis单机/主从版在线移到GeminiDB Redis相同。

开源Codis集群版迁移到GeminiDB Redis

对于Codis集群版,需要获取各个分片所在的主机以及端口,注意配置文件以下两项:

source.address = <host1>:<port1>,<host2>:<port2>,<host2>:<port2> # 源端各节点所在主机及端口

source.type = cluster # 源端为cluster集群

其他步骤与开源Redis单机/主从版在线移到GeminiDB Redis相同。

开源Redis全量扫描迁移到GeminiDB Redis

如果以上场景都没法实现,可以采用Redis-Shake的全量扫描(rump)来逐个扫描来进行迁移。

  1. 部署迁移工具。

    1. 获取开源工具Redis-Shake

      Redis-Shake工具可下载release版本,解压缩后即可使用。

    2. 修改配置文件“Redis-Shake.conf”,修改时需要注意以下配置项。

      log.level = info # 默认日志级别,info级别可以打印出相应的迁移进度,可以用来判断迁移是否结束。

      source.address = <host>:<port> # 源端地址,开源redis所在主机及端口。

      source.password_raw = ***** # 源端口令。

      source.type = standalone # 根据源端类型选择。

      target.address = <host>:8635 # 目标端地址。

      target.password_raw = ***** # 目标端口令。

      target.version = 5.0 # 目标端redis版本。

      target.type = standalone # 目标端类型。

      target.db = -1 # 将所有数据迁移到目标端GeminiDB Redis的指定数据库上,若设置为-1,则迁移后的数据库和源实例的DB保持相同的映射关系。

    3. 按需选配是否覆盖目标端数据。

      key_exists = none

      当源端和目的端有重复key时需要选配是否覆盖目标端数据,可配置的值为:

      • rewrite:源端覆盖目的端。
      • none:一旦发生进程直接退出。
      • ignore:保留目的端key,忽略源端的同步key。该值在rump模式下不会生效。

      由于本次迁移源端是RDB文件,因此预期无重复数据,建议选择none。如迁移过程异常退出,请联系技术支持进行处理。

  2. 进行数据迁移。

    启动迁移命令:

    ./redis-shake.linux -conf=redis-shake.conf -type=rump

    • 执行日志中出现如下信息,代表全量数据同步完成。
      dbRumper[0] executor[0] finish

  3. 数据校验。

    使用工具RedisFullCheck进行校验,下载并解压缩后即可使用。

    ./redis-full-check -s SOURCE_IP:SOURCE_PORT -p SOURCE_PWD -t TARGET_IP:8635 -a TARGET_PWD

    校验完毕出现如下信息表示迁移成功,源端与目的端数据相同。

    all finish successfully, totally 0 key(s) and 0 field(s) conflict