自建Redis到GeminiDB Redis的迁移
自建Redis到GeminiDB Redis的迁移可以使用DRS服务和Redis-Shake两种迁移工具。使用DRS服务进行迁移,详情请参考将Redis迁移到GeminiDB Redis,将Redis集群迁移到GeminiDB Redis。本章节主要介绍使用Redis-Shake迁移工具进行自建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。
- 部署迁移工具。
- 获取开源工具Redis-Shake。
Redis-Shake工具可下载release版本,解压缩后即可使用。
- 修改配置文件“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保持相同的映射关系。
- 按需选配是否覆盖目标端数据。
当源端和目的端有重复key时需要选配是否覆盖目标端数据,可配置的值为:
- rewrite:源端覆盖目的端。
- none:一旦发生进程直接退出。
- ignore:保留目的端key,忽略源端的同步key。该值在rump模式下不会生效。
由于本次迁移源端是RDB文件,因此预期无重复数据,建议选择none。如迁移过程异常退出,请联系客服进行处理。
- 获取开源工具Redis-Shake。
- 进行数据迁移。
启动迁移命令:
./redis-shake.linux -conf=redis-shake.conf -type=sync
- 执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段。
sync rdb done
- 执行日志出现如下信息时,代表增量同步无新增内容,可以停止程序以中断增量同步。
sync: +forwardCommands=0 +filterCommands=0 +writeBytes=0
- 执行日志中出现如下信息,代表全量数据同步完成,进入增量同步阶段。
- 数据校验。
使开源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)来逐个扫描来进行迁移。
- 部署迁移工具。
- 获取开源工具Redis-Shake。
Redis-Shake工具可下载release版本,解压缩后即可使用。
- 修改配置文件“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保持相同的映射关系。
- 按需选配是否覆盖目标端数据。
当源端和目的端有重复key时需要选配是否覆盖目标端数据,可配置的值为:
- rewrite:源端覆盖目的端。
- none:一旦发生进程直接退出。
- ignore:保留目的端key,忽略源端的同步key。该值在rump模式下不会生效。
由于本次迁移源端是RDB文件,因此预期无重复数据,建议选择none。如迁移过程异常退出,请联系客服进行处理。
- 获取开源工具Redis-Shake。
- 进行数据迁移。
启动迁移命令:
./redis-shake.linux -conf=redis-shake.conf -type=rump
- 执行日志中出现如下信息,代表全量数据同步完成。
dbRumper[0] executor[0] finish
- 执行日志中出现如下信息,代表全量数据同步完成。
- 数据校验。
使用工具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-shake v2迁移过程中,常见问题及解决方法请参考redis‐shake 2.x 常见问题。