redis 版本升级数据迁移使用Redis-Shake

RedisShake是一款开源的Redis迁移工具,支持Cluster集群的在线迁移与离线迁移(备份文件导入)。DCS Cluster集群与Redis Cluster集群设计一致,数据可平滑迁移。
本文以Linux系统环境为例,介绍如何使用Redis-Shake工具进行Cluster集群数据迁移


在线迁移
在线迁移主要适用于自建Redis Cluster集群迁移到DCS Cluster集群的场景,且两端集群实例能够网络连通,或者有一台中转服务器能够连通两端集群实例。
部署在其他云厂商Redis服务上的Cluster集群数据,由于SYNC、PSYNC命令被云厂商禁用,暂不支持在线迁移。

1,创建redis-cluster集群实例.详情见上一章。
注意集群的内存规格不能小于源端Cluster集群


2,准备迁移包
wget https://github.com/alibaba/RedisShake/releases/download/release-v2.0.3-20200724/redis-shake-v2.0.3.tar.gz
tar xf redis-shake-v2.0.3.tar.gz
cd redis-shake-v2.0.3

 

 

 

3,修改配置
在线迁移需要将各个节点数据分别迁移。使用如下命令查询源和目标Cluster集群的所有节点的IP地址与端口:
redis-cli -h {redis_address} -p {redis_port} -a {redis_password} cluster nodes

 

 
vim redis-shake.conf
# log file,日志文件,不配置将打印到stdout (e.g. /var/log/redis-shake.log )
log.file = /home/ap/cloudapp/redis/dump/redis-shake-v2.0.3/log/redis-shake.log

# pid path,进程文件存储地址(e.g. /var/run/),不配置将默认输出到执行下面,
# 注意这个是目录,真正的pid是`{pid_path}/{id}.pid`
pid_path = /home/ap/cloudapp/redis/dump/redis-shake-v2.0.3/log

# 源端redis的类型,支持standalone,sentinel,cluster和proxy四种模式,注意:目前proxy只用于rump模式。
source.type = cluster

# 架构,比如codis, twemproxy, aliyun proxy等需要配置所有master或者slave的db地址。
source.address = 10.10.202.190:7005;10.10.202.190:7006;10.10.202.190:7004
# password of db/proxy. even if type is sentinel.
source.password_raw = Lining123

# 目的redis的类型,支持standalone,sentinel,cluster和proxy四种模式。
target.type = cluster

target.address = 10.10.202.151:7001;10.10.202.151:7002;10.10.202.151:7003
# password of db/proxy. even if type is sentinel.
target.password_raw =

# rewrite表示源端覆盖目的端。
# none表示一旦发生进程直接退出。
# ignore表示保留目的端key,忽略源端的同步key。该值在rump模式下没有用。
key_exists = rewrite


4,执行同步 ,建议同步时停止业务
 ./redis-shake.linux -conf=redis-shake.conf -type=sync
 
 在打开一个窗口执行
 tailf -100 /home/ap/cloudapp/redis/dump/redis-shake-v2.0.3/log/redis-shake.log

DbSyncer[1] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0    # 代表同步完成

DbSyncer[2] total = 7.68MB -       7.68MB [100%]  entry=133  #代表有数据写入

 

5, redis 替换线上redis
1,A 服务器修改nodes把新的集群地址IP改为旧的集群IP 注意集群master和slave
find /home/ap/cloudapp/redis/conf -name "nodes.conf"|xargs sed  -i '/7001@/s#10.10.202.151#10.10.206.144#g'
find /home/ap/cloudapp/redis/conf -name "nodes.conf"|xargs sed  -i '/7002@/s#10.10.202.151#10.10.206.144#g'
find /home/ap/cloudapp/redis/conf -name "nodes.conf"|xargs sed  -i '/7003@/s#10.10.202.151#10.10.206.144#g'

2,A服务器修改bind
find /home/ap/cloudapp/redis/conf/7001 -name "redis_*.conf"|xargs sed -i 's#10.10.202.151#10.10.206.144#g'
find /home/ap/cloudapp/redis/conf/7002 -name "redis_*.conf"|xargs sed -i 's#10.10.202.151#10.10.206.144#g'
find /home/ap/cloudapp/redis/conf/7003 -name "redis_*.conf"|xargs sed -i 's#10.10.202.151#10.10.206.144#g'

3,B服务器修改nodes把新的集群地址IP改为旧的集群IP 注意集群master和slave
find /home/ap/cloudapp/redis/conf -name "nodes.conf"|xargs sed  -i '/7004@/s#10.10.202.151#10.10.202.190#g'
find /home/ap/cloudapp/redis/conf -name "nodes.conf"|xargs sed  -i '/7005@/s#10.10.202.151#10.10.202.190#g'
find /home/ap/cloudapp/redis/conf -name "nodes.conf"|xargs sed  -i '/7006@/s#10.10.202.151#10.10.202.190#g'

4,B服务器修改nodes把新的集群地址IP改为旧的集群IP 注意集群master和slave
find /home/ap/cloudapp/redis/conf/7004 -name "redis_*.conf"|xargs sed -i 's#10.10.202.151#10.10.202.190#g'
find /home/ap/cloudapp/redis/conf/7005 -name "redis_*.conf"|xargs sed -i 's#10.10.202.151#10.10.202.190#g'
find /home/ap/cloudapp/redis/conf/7006 -name "redis_*.conf"|xargs sed -i 's#10.10.202.151#10.10.202.190#g'

离线迁移

接到在前同步第四步开始
离线同步dump 把kye 下载到本地
./redis-shake.linux -conf=redis-shake.conf -type=dump

 

 





修改配置文件添加恢复db文件名
# 如果是decode或者restore,这个参数表示读取的rdb文件。支持输入列表,例如:rdb.0;rdb.1;rdb.2
# redis-shake将会挨个进行恢复。
source.rdb.input = local_dump.0;local_dump.1;local_dump.2

./redis-shake.linux -type restore -conf redis-shake.conf

在打开一个窗口查看日志 redis-shake.log
检查同步完成 dump:rdb node 代表下载结束

 

 


在第一个窗口结束进程ctrl +c

在次查看日志  redis-shake-2021-06-11T07-58-39.712.log

Enabled http stats, set status (incr), and wait forever #代表完成导入

 

 

 

 

新旧redis 替换流程

第一步把新的redis 部署上启动
   1,注意端口和本地的不要相同 nodes.conf 和redis_700x,conf
   2,把旧的Redis 添加密码,防止业务在写入
第二步使用redis-shake 同步数据
   1,redis-shake.conf 注意添加reids 的密码
第三步停止新旧redis
   1,注意数据同步完成
第四步把新redis 端口改为旧redis端口
   1,注意master和slave对应
第五步 启动redis, 重启业务验证服务

posted @ 2021-06-10 11:53  苦读二十年  阅读(741)  评论(0编辑  收藏  举报