一、背景
因为一套环境要迁移到aws redis上,原本打算采用rdb上传到s3中,然后在创建新集群的时候使用s3种子的方式将rdb文件加载到新的集群中,这样比较方便快捷,但是遇到了两个问题,
问题一是在大的rdb文件应用时会出现创建失败,
这是因为我从单点迁移到集群的时候,单点中不只db0有数据,而其他库也有数据,但集群只有db0,所以出现了问题
问题二是这种方法没有办法实时同步,无法达到想要的平滑切换的效果
二、使用工具
工具名:redis-shake
1.下载
下载地址:https://github.com/alibaba/RedisShake/tags
wget https://github.com/alibaba/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz
2.解压
tar xzf redis-shake-v2.0.3.tar.gz
3.编辑配置文件
cd redis-shake-v2.0.3
vim redis-shake.conf
4.配置文件详解
| 参数名 | 解释 |
|---|---|
| source.type | 根据源库(自建数据库)的架构选择,取值:standalone:主从架构。cluster:集群架构。 |
| source.address | 源库的连接地址和端口号,连接地址和端口号之间使用英文冒号(:)分隔。 |
| source.password_raw | 源库的密码,如果源库未设置密码,无需填写 |
| target.type | 同source.type |
| target.address | 同source.address |
| target.password_raw | 同source.password_raw |
| target.db | 将源库中所有库的数据都迁移至目标库的指定库中,取值范围为0~15。说明 默认值为-1,表示不启用该功能。 |
| key_exists | 当源库中的Key与目标库中的Key相同时,采取的数据写入策略,取值:rewrite:覆盖写入至目标库。none:默认值,停止运行Redis-shake程序并提示冲突的Key。ignore:直接跳过当前迁移的Key,保留目标库的数据,继续执行数据迁移 |
| filter.db.whitelist | 需要迁移的库名,多个库名间用英文分号(;)分隔,默认为空,即迁移所有库。例:0;1 |
| filter.db.blacklist | 不需要迁移的库名(即黑名单),多个库名间用英文分号(;)分隔。默认为空,即不设置黑名单。例:0;1 |
| parallel | Redis-shake执行迁移的并发线程数,适当调大该值可提高同步性能 |
5.配置文件示例
# 单点
source.type = standalone
source.address = redis_ip:redis_port
# password of db/proxy. even if type is sentinel.
source.password_raw = password
# 集群
target.type = cluster
target.address = redis_ip:redis_port;redis_ip:redis_port;redis_ip:redis_port
# 如果没有密码则可以不用填
target.password_raw =
key_exists = rewrite
5.1.启动
5.1.1 普通启动方式
nohup ./

本文详细介绍了如何使用RedisShake工具解决从自建数据库到AWS Redis集群迁移过程中的问题,包括大文件同步失败、实时同步需求、配置详解和常见错误及其解决方案。
最低0.47元/天 解锁文章
584

被折叠的 条评论
为什么被折叠?



