找回密码
 立即注册
首页 业界区 业界 Redis数据迁移神器RedisShake实操指南:覆盖单实例/集群 ...

Redis数据迁移神器RedisShake实操指南:覆盖单实例/集群全场景

闻人莹华 4 天前
在日常Redis运维中,你是否遇到过这些需求?
• 自建Redis迁移到云平台,担心数据丢失、迁移中断;
• 需搭建异地灾备,实现主从同步或双向同步;
• Redis版本升级,想平滑迁移数据不影响业务;
• 备份RDB文件、解析RDB内容,快速排查数据问题。
今天给大家推荐一款阿里云开源的Redis工具——RedisShake,一款集数据迁移、同步、备份、解析于一体的“全能工具”,支持单机、主从、哨兵、集群等多种部署模式,轻松搞定不同环境下的Redis数据处理需求。
一、RedisShake 核心介绍

RedisShake 是阿里云 Tair 开源团队推出的轻量级Redis数据处理工具,无需复杂依赖,部署简单、操作便捷,能适配自建Redis、云Redis等多种环境,解决Redis全生命周期的数据管理难题。
1.1 四大核心功能

RedisShake 的核心能力集中在4个模块,覆盖数据从备份、迁移到解析的全流程:

  • 同步(sync):支持全量数据迁移+增量数据实时同步,确保源Redis和目标Redis数据完全一致,适用于迁移、灾备等场景;
  • 恢复(restore):将本地RDB文件快速恢复到目标Redis实例,无需手动执行复杂命令;
  • 备份(dump):将源Redis的全量数据备份为RDB文件,便于离线存储、数据回溯;
  • 解析(decode):解析RDB文件内容,并以JSON格式输出,方便查看数据结构、排查数据异常。
1.2 典型应用场景

结合实际运维场景,RedisShake 主要用于以下5种场景,几乎覆盖Redis运维的核心需求:

  • 数据迁移:自建Redis迁移到云Redis、不同云服务商之间的Redis数据迁移;
  • 灾备同步:搭建异地容灾架构,实现主从同步、双向同步,保障数据高可用;
  • 缓存更新:结合数据库订阅机制,实现数据库变更后自动刷新Redis缓存,避免缓存不一致;
  • 版本升级:Redis版本迭代时,平滑迁移数据,不中断业务访问;
  • 数据备份与恢复:定期备份Redis数据为RDB文件,数据异常时快速恢复,降低数据丢失风险。
二、RedisShake 快速安装

RedisShake 无需编译,直接下载压缩包解压即可使用,以下是Linux(amd64)环境的安装步骤(其他系统可前往GitHub下载对应版本):
  1. # 1. 创建安装目录(统一管理,便于后续操作)
  2. mkdir -p /data/redisshake
  3. cd /data/redisshake
  4. # 2. 下载对应版本压缩包(此处以v4.3.2为例,可替换为最新版本)
  5. wget https://github.com/tair-opensource/RedisShake/releases/download/v4.3.2/redis-shake-v4.3.2-linux-amd64.tar.gz
  6. # 3. 解压压缩包
  7. tar zxvf redis-shake-v4.3.2-linux-amd64.tar.gz
复制代码
解压完成后,进入解压目录,可看到默认配置文件 shake.toml 和可执行文件 redis-shake,安装完成。
三、核心实操场景(附详细步骤)

以下是日常运维中最常用的4种场景,每一步都附详细命令和注意事项,新手也能轻松上手。所有场景均基于Redis 6.2.14版本测试,其他版本可参考操作(注意版本兼容性)。
场景1:单实例 → 单实例 数据同步

适用场景:将一台单机Redis的数据,迁移到另一台单机Redis(如测试环境迁移到生产环境、单机扩容迁移)。
1. 准备环境

提前准备两台单机Redis,具体信息如下(可根据自身环境修改IP、端口、密码):
主机IP端口组件角色版本说明192.168.220.107001单机Redis6.2.14源节点(制造测试数据)192.168.220.107002单机Redis6.2.14目标节点(接收迁移数据)2. 准备测试数据 & 清空目标端

先在源节点制造测试数据,同时清空目标端数据,避免旧数据干扰迁移结果:
  1. # 1. 源节点(7001)制造测试数据
  2. redis-cli -p 7001 -a 123456 flushall  # 清空源节点原有数据(可选,根据实际需求)
  3. redis-cli -p 7001 -a 123456 set port.7001.01 1
  4. redis-cli -p 7001 -a 123456 set port.7001.02 1
  5. # 2. 清空目标节点(7002)数据
  6. redis-cli -p 7002 -a 123456 flushall
复制代码
3. 修改RedisShake配置文件

基于默认配置文件复制一份新的配置,专门用于本次单实例同步,避免修改默认配置影响其他操作:
  1. # 进入RedisShake安装目录
  2. cd /data/redisshake
  3. # 备份并复制配置文件(命名规范:源端口_to_目标端口.toml,便于区分)
  4. cp shake.toml 7001to7002.toml
  5. # 编辑配置文件(vim或nano均可)
  6. vim 7001to7002.toml
复制代码
修改以下核心配置(其他配置保持默认即可):
  1. [sync_reader]
  2. cluster = false           # 源节点是否为集群,单机设为false
  3. address = "127.0.0.1:7001"  # 源节点地址(本机可写127.0.0.1,跨机写实际IP)
  4. username = ""              # Redis用户名(无则留空)
  5. password = "123456"        # 源节点密码(无则留空)
  6. [redis_writer]
  7. cluster = false           # 目标节点是否为集群,单机设为false
  8. address = "127.0.0.1:7002"  # 目标节点地址
  9. username = ""              # 目标节点用户名(无则留空)
  10. password = "123456"        # 目标节点密码(无则留空)
复制代码
4. 执行迁移操作

配置完成后,执行以下命令启动迁移,RedisShake会先同步全量数据,再实时同步增量数据:
  1. cd /data/redisshake/
  2. ./redis-shake 7001to7002.toml
复制代码
注意:当终端持续打印相同的日志(如“sync rdb done”),说明全量数据已同步完成,此时正在同步增量数据;若只需全量迁移,按 ctrl+c 退出即可。
5. 验证迁移结果

登录目标节点,查看数据是否迁移成功:
  1. # 登录目标节点(7002)
  2. redis-cli -p 7002 -a 123456
  3. # 查看所有key,确认测试数据已迁移
  4. keys *
复制代码
若输出 port.7001.01 和 port.7001.02,说明迁移成功。
场景2:单实例 → Redis集群 数据同步

适用场景:将单机Redis的数据,迁移到Redis集群(如单机扩容为集群、测试数据导入集群)。
1. 准备环境

主机IP端口组件角色版本说明192.168.220.106001单机Redis6.2.14源节点(制造测试数据)192.168.220.107001/7002Redis节点6.2.14集群节点(7001为主,7002为从)192.168.220.117001/7002Redis节点6.2.14集群节点(7001为主,7002为从)192.168.220.127001/7002Redis节点6.2.14集群节点(7001为主,7002为从)2. 准备测试数据 & 清空目标集群
  1. # 1. 源节点(6001)制造测试数据
  2. redis-cli -p 6001 -a 123456 flushall
  3. redis-cli -p 6001 -a 123456 set port.6001.01 1
  4. redis-cli -p 6001 -a 123456 set port.6001.02 1
  5. # 2. 检查集群状态(确认集群正常运行)
  6. redis-cli --cluster check 192.168.220.10:7001 -a 123456
  7. # 3. 清空目标集群所有节点数据(集群模式需加 -c 参数)
  8. redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c flushall
  9. redis-cli -h 192.168.220.11 -p 7001 -a 123456 -c flushall
  10. redis-cli -h 192.168.220.12 -p 7001 -a 123456 -c flushall
复制代码
3. 修改配置文件
  1. cd /data/redisshake
  2. # 复制配置文件,命名区分场景
  3. cp shake.toml 6001_to_cluster.toml
  4. # 编辑配置文件
  5. vim 6001_to_cluster.toml
复制代码
核心配置修改(重点修改目标端为集群模式):
  1. [sync_reader]
  2. cluster = false           # 源节点是单机,设为false
  3. address = "192.168.220.10:6001"  # 源节点实际IP+端口
  4. username = ""
  5. password = "123456"
  6. [redis_writer]
  7. cluster = true            # 目标节点是集群,设为true
  8. address = "192.168.220.10:7001,192.168.220.11:7001,192.168.220.12:7001"  # 集群所有主节点地址,用逗号分隔
  9. username = ""
  10. password = "123456"
复制代码
4. 执行迁移 & 验证结果
  1. # 执行迁移
  2. cd /data/redisshake
  3. ./redis-shake 6001_to_cluster.toml
  4. # 全量同步完成后,ctrl+c退出(增量同步可选)
  5. # 验证数据(登录任意集群主节点)
  6. redis-cli -h 192.168.220.12 -p 7001 -a 123456
  7. keys *
复制代码
场景3:Redis集群 → 单实例 数据同步

适用场景:将Redis集群的数据,迁移到单机Redis(如集群缩容、数据备份到单机、问题排查时导出集群数据)。
1. 准备环境

源节点为Redis集群(制造测试数据),目标节点为单机Redis,环境信息参考场景2(仅角色互换)。
2. 准备测试数据 & 清空目标端
  1. # 1. 集群节点制造测试数据(登录任意主节点)
  2. redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c flushall
  3. redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c set c1 1
  4. redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c set c2 2
  5. redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c set c3 3
  6. # 2. 清空目标单机(6001)数据
  7. redis-cli -h 192.168.220.10 -p 6001 -a 123456 flushall
复制代码
3. 修改配置文件
  1. cd /data/redisshake
  2. cp shake.toml cluster_to_6001.toml
  3. vim cluster_to_6001.toml
复制代码
核心配置修改(源节点为集群,目标为单机):
  1. [sync_reader]
  2. cluster = true            # 源节点是集群,设为true
  3. address = "192.168.220.10:7001,192.168.220.11:7001,192.168.220.12:7001"  # 集群所有主节点地址
  4. username = ""
  5. password = "123456"
  6. [redis_writer]
  7. cluster = false           # 目标节点是单机,设为false
  8. address = "192.168.220.10:6001"  # 目标单机地址
  9. username = ""
  10. password = "123456"
复制代码
4. 执行迁移 & 验证结果
  1. cd /data/redisshake
  2. ./redis-shake cluster_to_6001.toml
  3. # 全量同步完成后ctrl+c退出
  4. # 验证数据
  5. redis-cli -h 192.168.220.10 -p 6001 -a 123456
  6. keys *
复制代码
场景4:单实例RDB文件 → Redis集群 导入

适用场景:源Redis与目标集群网络不通,无法直接同步,可先将源Redis数据备份为RDB文件,再将RDB文件导入集群。
1. 准备环境

同场景2(源为单机Redis,目标为Redis集群)。
2. 生成RDB文件 & 清空目标集群
  1. # 1. 源单机(6001)制造测试数据并生成RDB文件
  2. redis-cli -p 6001 -a 123456 flushall
  3. redis-cli -p 6001 -a 123456 set port.6001.01 1
  4. redis-cli -p 6001 -a 123456 set port.6001.02 1
  5. redis-cli -p 6001 -a 123456 bgsave  # 后台生成RDB文件(不阻塞业务)
  6. # 2. 查看RDB文件路径(Redis配置文件中dir参数指定,默认路径如下)
  7. # 此处假设RDB文件路径为 /usr/local/redis6/data/6001/dump_6001.rdb
  8. # 3. 清空目标集群数据(同场景2)
  9. redis-cli --cluster check 192.168.220.10:7001 -a 123456
  10. redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c flushall
  11. redis-cli -h 192.168.220.11 -p 7001 -a 123456 -c flushall
  12. redis-cli -h 192.168.220.12 -p 7001 -a 123456 -c flushall
复制代码
3. 拷贝RDB文件到RedisShake目录
  1. # 将RDB文件拷贝到RedisShake安装目录(便于配置文件引用)
  2. cp /usr/local/redis6/data/6001/dump_6001.rdb /data/redisshake/
复制代码
4. 修改配置文件(重点配置RDB读取)
  1. cd /data/redisshake
  2. cp shake.toml rdb_to_cluster.toml
  3. vim rdb_to_cluster.toml
复制代码
核心配置修改(使用RDB文件作为数据源):
  1. # 注释sync_reader相关配置,启用rdb_reader
  2. # [sync_reader]
  3. # cluster = false
  4. # address = "xxx"
  5. # ...
  6. [rdb_reader]
  7. rdb_file = "/data/redisshake/dump_6001.rdb"  # RDB文件路径(绝对路径)
  8. [redis_writer]
  9. cluster = true            # 目标是集群
  10. address = "192.168.220.10:7001,192.168.220.11:7001,192.168.220.12:7001"
  11. username = ""
  12. password = "123456"
复制代码
5. 执行导入 & 验证结果
  1. cd /data/redisshake
  2. ./redis-shake rdb_to_cluster.toml
  3. # 导入完成后ctrl+c退出
  4. # 验证数据
  5. redis-cli -h 192.168.220.12 -p 7001 -a 123456
  6. keys *
复制代码
四、常见问题注意事项


  • 版本兼容性:RedisShake v4.x 支持Redis 4.0+,建议源和目标Redis版本一致,避免数据结构不兼容;
  • 密码与权限:若Redis开启密码认证,配置文件中必须填写正确密码;若Redis有用户名认证(Redis 6.0+),需填写username参数;
  • 集群配置:集群同步时,address参数需填写所有主节点地址(用逗号分隔),无需填写从节点;
  • 增量同步:若需长期增量同步(如灾备),无需ctrl+c退出,RedisShake会持续同步增量数据;
  • RDB文件路径:导入RDB文件时,需填写绝对路径,避免路径错误导致无法读取文件。
五、总结

RedisShake 作为一款开源的Redis数据处理工具,凭借其轻量、高效、多功能的特点,完美解决了Redis数据迁移、同步、备份、解析的核心需求。本文覆盖了最常用的4种实操场景,从安装到验证,每一步都详细可落地,无论是新手还是资深运维,都能快速上手。
如果你的日常工作中需要处理Redis数据相关操作,不妨试试RedisShake,能极大提升运维效率,避免手动操作带来的风险。
最后,附上RedisShake GitHub地址:https://github.com/tair-opensource/RedisShake,可获取最新版本和更多详细文档。

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册