在日常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下载对应版本):
bash
# 1. 创建安装目录(统一管理,便于后续操作)
mkdir -p /data/redisshake
cd /data/redisshake
# 2. 下载对应版本压缩包(此处以v4.3.2为例,可替换为最新版本)
wget https://github.com/tair-opensource/RedisShake/releases/download/v4.3.2/redis-shake-v4.3.2-linux-amd64.tar.gz
# 3. 解压压缩包
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.10 | 7001 | 单机Redis | 6.2.14 | 源节点(制造测试数据) |
| 192.168.220.10 | 7002 | 单机Redis | 6.2.14 | 目标节点(接收迁移数据) |
2. 准备测试数据 & 清空目标端
先在源节点制造测试数据,同时清空目标端数据,避免旧数据干扰迁移结果:
bash
# 1. 源节点(7001)制造测试数据
redis-cli -p 7001 -a 123456 flushall # 清空源节点原有数据(可选,根据实际需求)
redis-cli -p 7001 -a 123456 set port.7001.01 1
redis-cli -p 7001 -a 123456 set port.7001.02 1
# 2. 清空目标节点(7002)数据
redis-cli -p 7002 -a 123456 flushall
3. 修改RedisShake配置文件
基于默认配置文件复制一份新的配置,专门用于本次单实例同步,避免修改默认配置影响其他操作:
bash
# 进入RedisShake安装目录
cd /data/redisshake
# 备份并复制配置文件(命名规范:源端口_to_目标端口.toml,便于区分)
cp shake.toml 7001to7002.toml
# 编辑配置文件(vim或nano均可)
vim 7001to7002.toml
修改以下核心配置(其他配置保持默认即可):
toml
[sync_reader]
cluster = false # 源节点是否为集群,单机设为false
address = "127.0.0.1:7001" # 源节点地址(本机可写127.0.0.1,跨机写实际IP)
username = "" # Redis用户名(无则留空)
password = "123456" # 源节点密码(无则留空)
[redis_writer]
cluster = false # 目标节点是否为集群,单机设为false
address = "127.0.0.1:7002" # 目标节点地址
username = "" # 目标节点用户名(无则留空)
password = "123456" # 目标节点密码(无则留空)
4. 执行迁移操作
配置完成后,执行以下命令启动迁移,RedisShake会先同步全量数据,再实时同步增量数据:
bash
cd /data/redisshake/
./redis-shake 7001to7002.toml
注意 :当终端持续打印相同的日志(如"sync rdb done"),说明全量数据已同步完成,此时正在同步增量数据;若只需全量迁移,按 ctrl+c 退出即可。
5. 验证迁移结果
登录目标节点,查看数据是否迁移成功:
bash
# 登录目标节点(7002)
redis-cli -p 7002 -a 123456
# 查看所有key,确认测试数据已迁移
keys *
若输出 port.7001.01 和 port.7001.02,说明迁移成功。
场景2:单实例 → Redis集群 数据同步
适用场景:将单机Redis的数据,迁移到Redis集群(如单机扩容为集群、测试数据导入集群)。
1. 准备环境
| 主机IP | 端口 | 组件角色 | 版本 | 说明 |
|---|---|---|---|---|
| 192.168.220.10 | 6001 | 单机Redis | 6.2.14 | 源节点(制造测试数据) |
| 192.168.220.10 | 7001/7002 | Redis节点 | 6.2.14 | 集群节点(7001为主,7002为从) |
| 192.168.220.11 | 7001/7002 | Redis节点 | 6.2.14 | 集群节点(7001为主,7002为从) |
| 192.168.220.12 | 7001/7002 | Redis节点 | 6.2.14 | 集群节点(7001为主,7002为从) |
2. 准备测试数据 & 清空目标集群
bash
# 1. 源节点(6001)制造测试数据
redis-cli -p 6001 -a 123456 flushall
redis-cli -p 6001 -a 123456 set port.6001.01 1
redis-cli -p 6001 -a 123456 set port.6001.02 1
# 2. 检查集群状态(确认集群正常运行)
redis-cli --cluster check 192.168.220.10:7001 -a 123456
# 3. 清空目标集群所有节点数据(集群模式需加 -c 参数)
redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c flushall
redis-cli -h 192.168.220.11 -p 7001 -a 123456 -c flushall
redis-cli -h 192.168.220.12 -p 7001 -a 123456 -c flushall
3. 修改配置文件
bash
cd /data/redisshake
# 复制配置文件,命名区分场景
cp shake.toml 6001_to_cluster.toml
# 编辑配置文件
vim 6001_to_cluster.toml
核心配置修改(重点修改目标端为集群模式):
toml
[sync_reader]
cluster = false # 源节点是单机,设为false
address = "192.168.220.10:6001" # 源节点实际IP+端口
username = ""
password = "123456"
[redis_writer]
cluster = true # 目标节点是集群,设为true
address = "192.168.220.10:7001,192.168.220.11:7001,192.168.220.12:7001" # 集群所有主节点地址,用逗号分隔
username = ""
password = "123456"
4. 执行迁移 & 验证结果
bash
# 执行迁移
cd /data/redisshake
./redis-shake 6001_to_cluster.toml
# 全量同步完成后,ctrl+c退出(增量同步可选)
# 验证数据(登录任意集群主节点)
redis-cli -h 192.168.220.12 -p 7001 -a 123456
keys *
场景3:Redis集群 → 单实例 数据同步
适用场景:将Redis集群的数据,迁移到单机Redis(如集群缩容、数据备份到单机、问题排查时导出集群数据)。
1. 准备环境
源节点为Redis集群(制造测试数据),目标节点为单机Redis,环境信息参考场景2(仅角色互换)。
2. 准备测试数据 & 清空目标端
bash
# 1. 集群节点制造测试数据(登录任意主节点)
redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c flushall
redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c set c1 1
redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c set c2 2
redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c set c3 3
# 2. 清空目标单机(6001)数据
redis-cli -h 192.168.220.10 -p 6001 -a 123456 flushall
3. 修改配置文件
bash
cd /data/redisshake
cp shake.toml cluster_to_6001.toml
vim cluster_to_6001.toml
核心配置修改(源节点为集群,目标为单机):
toml
[sync_reader]
cluster = true # 源节点是集群,设为true
address = "192.168.220.10:7001,192.168.220.11:7001,192.168.220.12:7001" # 集群所有主节点地址
username = ""
password = "123456"
[redis_writer]
cluster = false # 目标节点是单机,设为false
address = "192.168.220.10:6001" # 目标单机地址
username = ""
password = "123456"
4. 执行迁移 & 验证结果
bash
cd /data/redisshake
./redis-shake cluster_to_6001.toml
# 全量同步完成后ctrl+c退出
# 验证数据
redis-cli -h 192.168.220.10 -p 6001 -a 123456
keys *
场景4:单实例RDB文件 → Redis集群 导入
适用场景:源Redis与目标集群网络不通,无法直接同步,可先将源Redis数据备份为RDB文件,再将RDB文件导入集群。
1. 准备环境
同场景2(源为单机Redis,目标为Redis集群)。
2. 生成RDB文件 & 清空目标集群
bash
# 1. 源单机(6001)制造测试数据并生成RDB文件
redis-cli -p 6001 -a 123456 flushall
redis-cli -p 6001 -a 123456 set port.6001.01 1
redis-cli -p 6001 -a 123456 set port.6001.02 1
redis-cli -p 6001 -a 123456 bgsave # 后台生成RDB文件(不阻塞业务)
# 2. 查看RDB文件路径(Redis配置文件中dir参数指定,默认路径如下)
# 此处假设RDB文件路径为 /usr/local/redis6/data/6001/dump_6001.rdb
# 3. 清空目标集群数据(同场景2)
redis-cli --cluster check 192.168.220.10:7001 -a 123456
redis-cli -h 192.168.220.10 -p 7001 -a 123456 -c flushall
redis-cli -h 192.168.220.11 -p 7001 -a 123456 -c flushall
redis-cli -h 192.168.220.12 -p 7001 -a 123456 -c flushall
3. 拷贝RDB文件到RedisShake目录
bash
# 将RDB文件拷贝到RedisShake安装目录(便于配置文件引用)
cp /usr/local/redis6/data/6001/dump_6001.rdb /data/redisshake/
4. 修改配置文件(重点配置RDB读取)
bash
cd /data/redisshake
cp shake.toml rdb_to_cluster.toml
vim rdb_to_cluster.toml
核心配置修改(使用RDB文件作为数据源):
toml
# 注释sync_reader相关配置,启用rdb_reader
# [sync_reader]
# cluster = false
# address = "xxx"
# ...
[rdb_reader]
rdb_file = "/data/redisshake/dump_6001.rdb" # RDB文件路径(绝对路径)
[redis_writer]
cluster = true # 目标是集群
address = "192.168.220.10:7001,192.168.220.11:7001,192.168.220.12:7001"
username = ""
password = "123456"
5. 执行导入 & 验证结果
bash
cd /data/redisshake
./redis-shake rdb_to_cluster.toml
# 导入完成后ctrl+c退出
# 验证数据
redis-cli -h 192.168.220.12 -p 7001 -a 123456
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,可获取最新版本和更多详细文档。