redis 数据迁移
常见redis迁移工具
- redis-dump: redis-dump 是一个将redis数据导入/导出为json格式数据的小工具。
- redis-port : 最初是 codis 项目相关工具,支持实时同步redis 数据到 codis/redis等中。
- redis-migrate-tool: 是唯品会开源的redis数据迁移工具,可用于异构redis集群间的数据在线迁移。
- redis-shake : 是阿里云的redis数据同步的工具。支持redis主从->redis-cluster,cluster-cluster等多种redis架构的数据同步。
https://github.com/delano/redis-dump
https://github.com/CodisLabs/redis-port
https://github.com/vipshop/redis-migrate-tool
https://github.com/alibaba/RedisShake
本次迁移主要是用到了redis-shake
,本文以redis-shake
来重点介绍迁移redis
哨兵模式
Redis-shake
redis-shake是阿里云自研的开源工具,支持对Redis数据进行解析(decode)、恢复(restore)、备份(dump)、同步(sync/rump)。在sync模式下,redis-shake使用SYNC或PSYNC命令将数据从源端Redis同步到目的端Redis,支持全量数据同步和增量数据同步,增量同步在全量同步完成后自动开始。
功能介绍:
- 备份dump:将源redis的全量数据通过RDB文件备份起来。
- 解析decode:对RDB文件进行读取,并以json格式解析存储。
- 恢复restore:将RDB文件恢复到目的redis数据库。
- 同步sync: 支持源redis和目的redis的数据同步,支持全量和增量数据的迁移。支持单节点、主从版、集群版之间的互相同步。需要注意的是,如果源端是集群版,可以启动一个RedisShake,从不同的db结点进行拉取,同时源端不能开启move slot功能;对于目的端,如果是集群版,写入可以是1个或者多个db结点。
- 同步rump:支持源redis和目的redis的数据同步,仅支持全量的迁移。采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。
redis-shark安装
软件下载地址 。软件解压缩后就可使用。
1 | #安装redis-shake |
redis-shake模式介绍
- dump模式 : 将云数据库Redis版实例中的数据备份到RDB文件中。
- decode模式: decode实现对RDB文件进行读取,并以json格式解析存储。
- restore模式: restore模式可将RDB文件恢复到目的redis数据库。
- sync模式: sync模式将某Redis数据迁移至其它Redis集群。
- rump模式: rump模式采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。
redis-shake –conf={配置文件地址} –type={模式:sync/dump等} 模式需要与配置文件中的source target对应。模式为sync, restore, dump, decode, rump其中之一,全量+增量同步请选择sync。mac下请使用redis-shake.darwin,windows请用redis-shake.windows
redis-shake配置
如何进行配置 https://github.com/alibaba/RedisShake/wiki/
redis-shake迁移 https://help.aliyun.com/document_detail/111066.html
sync模式参数
在sync模式下,redis-shake使用SYNC或PSYNC命令将数据从源端Redis同步到目的端Redis,支持全量数据同步和增量数据同步,增量同步在全量同步完成后自动开始。
sync模式参数说明
参数 | 说明 | 示例 |
---|---|---|
source.type | 支持standalone,sentinel,cluster和proxy | cluster |
source.address | 源Redis的连接地址与服务端口。 | xxx.xxx.1.10:6379 |
source.password_raw | 源Redis的连接密码。 | SourcePass233 |
target.address | 目的Redis的连接地址与服务端口。 | xx.redis.rds.aliyuncs.com:6379 |
target.password_raw | 目的Redis的连接密码。 | TargetPass233 |
rewrite | 如果目的Redis有相同的key,是否覆盖,可选值:true(覆盖);false(不覆盖)。 | 默认为true,为false且存在数据冲突则会出现异常提示。 |
target.db | 待迁移的数据在目的Redis中的逻辑数据库名。当该值设置为-1时,源Redis和目的Redis中的名称相同 | -1 |
parallel | RDB文件同步中使用的并发线程数,用于提高同步性能。 | 最小值为1,推荐值为64。 |
执行迁移
本次使用redis-shake迁移RDB文件内的数据,redis是哨兵模式。使用redis-shake的restore模式将自建Redis的备份文件内的数据迁移到一个自建Redis上。在新的环境搭建一套一样的redis哨兵模式。
创建配置文件
1 | cat > redis-shake.conf<<EOF |
redis-shake restore模式参数说明
参数 | 说明 | 示例 |
---|---|---|
source.rdb.input | 备份文件(RDB文件)的路径。 | /opt/redis/data/6379.rdb |
target.address | 目的Redis的连接地址与端口号。 | 172.33.66.17:6379 |
target.password_raw | 目的Redis的连接密码。 | 123456 |
target.db | 设置待迁移的数据在目的Redis中的逻辑数据库名,默认值为-1。 | |
例如,要将所有数据迁移到目的Redis中的DB10,则需将此参数的值设置为10。当该值设置为-1时,逻辑数据库名在源Redis和目的Redis中的名称相同,即源Redis中的DB0将被迁移至目的Redis中的DB0,DB1将被迁移至DB1,以此类推。 | -1 | |
rewrite | 如果目的Redis有与RDB文件中相同的key,是否覆盖,可选值:true(覆盖),false(不覆盖) | true |
parallel | RDB文件同步中使用的并发线程数,用于提高同步性能。 | 64 |
使用如下命令进行迁移
1 | redis-shake.linux -type=restore -conf=redis-shake.conf |
说明: 日志中出现restore: rdb done表示数据恢复完成,此时按Ctrl+C退出执行即可。
参考:
https://help.aliyun.com/document_detail/116378.html?
https://mp.weixin.qq.com/s/ae7Lmi-h4AzwO18I-PcfWg
验证
登录新的redis 服务器,查看keys 是否一致。在登录redis从查看数据是否同步