《Linux运维总结:使用旧版redis-shake2.x进行redis集群间的数据同步【方案二】》

一、redis-shake简介

redis-shake是阿里云开源的用于Redis数据迁移和过滤的工具。

Github参考:redis-shake简介


1.1、迁移工具对比

redis-migrate-tool
redis-migrate-tool是唯品会开源的一款Redis异构集群之间的数据实时迁移工具,不过已经有两年没有更新了,我个人觉得这是一款比较完善的工具,特别是数据校验。

redis-shake
RedisShake是阿里云基于豌豆荚开源的redis-port进行二次开发的一个支持Redis异构集群实时同步的工具,它和redis-migrate-tool相比较,我觉得它的优点在于支持前缀key的同步,支持多DB同步,而redis-migrate-tool 只能全量同步,并且如果源做了分库,同步到目标Redis的时候都同步到了db0一个库里面了,这对于做了分库场景的业务是不可行的。

redis-port
redis-port是豌豆荚当年为了让大家方便从redis迁移到Codis开源的一个Redis数据迁移工具,现在也已经很久没更新了。


1.2、redis-shake版本对比

迁移工具版本类型版本说明支持redis版本支持模式
redis-shakeredis-shake 3.x新版Redis 5.0, Redis 6.0 and Redis 7.0Supports Standalone, Cluster and some proxies type like Codis, twemproxy, Aliyun Cluster Proxy, Tencent Cloud Proxy
redis-shakeredis-shake 2.x旧版Redis version from 2.x to 6.xstandalone sentinel cluster proxy

二、单机redis数据迁移

《Linux运维总结:Centos7.6源码安装单实例redis6.2.8》

2.1、环境信息如下

迁移环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.191Centos7.66.2.8x86_647000源主机
192.168.1.192Centos7.66.2.8x86_647000目标主机

2.2、安装redis-shake

1、源端创建测试数据

[root@localhost ~]# for line in {1..10000};do /opt/redis6/bin/redis-cli -h 192.168.1.191 -p 7000 -c -a 1UEJjjGfYZU7dCWy set ops_${line} ${line}; done

2、下载解压redis-shake文件

[root@localhost ~]# mkdir redis-shake && cd redis-shake
[root@localhost redis-shake]# wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz
[root@localhost redis-shake]# tar axf release-v2.1.2-20220329.tar.gz

3、修改配置文件

[root@localhost redis-shake]# vim bin/redis-shake.conf 
source.type = standalone
source.address = 192.168.1.191:7000
source.password_raw = 1UEJjjGfYZU7dCWy
target.type = standalone
target.address = 192.168.1.192:7000
target.password_raw = 1UEJjjGfYZU7dCWy
key_exists = rewrite

2.3、redis-shake执行数据迁移

执行下述命令启动redis-shake,redis-shake将开始执行数据迁移

说明:支持sync, restore, dump, decode, rump等模式,全量+增量同步请选择sync,mac下请使用redis-shake.darwin,windows请用redis-shake.windows。

[root@localhost bin]# ./redis-shake.linux -conf=redis-shake.conf -type=sync

出现百分比,则为全量同步阶段,增量同步,出现字样sync rdb done后,当前dbSyncer进入增量同步

2023/01/04 17:08:38 [INFO] DbSyncer[0] total = 125.93KB -     125.93KB [100%]  entry=10000  (全量同步阶段)     
2023/01/04 17:08:38 [INFO] DbSyncer[0] sync rdb done (进入增量同步阶段)
2023/01/04 17:08:38 [INFO] DbSyncer[0] FlushEvent:IncrSyncStart	Id:redis-shake	
2023/01/04 17:08:39 [INFO] DbSyncer[0] sync:  +forwardCommands=1      +filterCommands=0      +writeBytes=4
2023/01/04 17:08:40 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2023/01/04 17:08:41 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0

2.4、校验迁移后的数据

参考官网:校验迁移后的数据

说明:redis-full-check is used to compare whether two redis have the same data. redis-full-check用于比较2个redis数据是否一致,支持单节点、主从、集群版、以及多种proxy,支持同构以及异构对比,redis的版本支持2.x-5.x。当前redis版本为6.x,也是可以使用,因为测试的不是很全面,也有可能会在某些场景下存在问题。

[root@localhost ~]# wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz
[root@localhost ~]# tar axf redis-full-check-1.4.8.tar.gz && cd redis-full-check-1.4.8
[root@localhost redis-full-check-1.4.8]# ./redis-full-check -s "192.168.1.191:7000" -p 1UEJjjGfYZU7dCWy -t 192.168.1.192:7000-a 1UEJjjGfYZU7dCWy --sourcedbtype=0 --targetdbtype=0

说明:执行完成后命令行输出校对结,如果此处为0,则两端数据一致

在这里插入图片描述


三、redis哨兵集群数据迁移

《Linux运维总结:Centos7.6部署redis6.2.8哨兵集群》

3.1、环境信息如下

源端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.191Centos7.66.2.8x86_647001master
192.168.1.191Centos7.66.2.8x86_647002slave
192.168.1.191Centos7.66.2.8x86_647003slave
192.168.1.191Centos7.66.2.8x86_647004sentinel
192.168.1.191Centos7.66.2.8x86_647005sentinel
192.168.1.191Centos7.66.2.8x86_647006sentinel

目标端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.192Centos7.66.2.8x86_647001master
192.168.1.192Centos7.66.2.8x86_647002slave
192.168.1.192Centos7.66.2.8x86_647003slave
192.168.1.192Centos7.66.2.8x86_647004sentinel
192.168.1.192Centos7.66.2.8x86_647005sentinel
192.168.1.192Centos7.66.2.8x86_647006sentinel

3.2、安装redis-shake

1、源端创建测试数据

[root@localhost ~]# for line in {1..10000};do /data/pkgs/redis/master/bin/redis-cli -h 192.168.1.191 -p 7001 -c -a 1UEJjjGfYZU7dCWy set ops_${line} ${line}; done

2、下载解压redis-shake文件

[root@localhost ~]# mkdir redis-shake && cd redis-shake
[root@localhost redis-shake]# wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz
[root@localhost redis-shake]# tar axf release-v2.1.2-20220329.tar.gz

3、修改配置文件

说明:源redis的地址,需要填写sentinel_master_name:master_or_slave@sentinel_cluster_address。其中master_or_slave表示从sentinel中选择的db是master还是slave,如果配置为master,redis集群架构为一主多从(星形)结构,为了降低主节点网络带宽消耗,以及对主节点的负载,保证服务的稳定性,我们需要将其配置为slave。

[root@localhost redis-shake]# vim bin/redis-shake.conf 
source.type = sentinel
source.address = mymaster:slave@192.168.1.191:7004;192.168.1.191:7005;192.168.1.191:7006
source.password_raw = 1UEJjjGfYZU7dCWy
target.type = sentinel
target.address = mymaster:master@192.168.1.192:7004;192.168.1.192:7005;192.168.1.192:7006
target.password_raw = 1UEJjjGfYZU7dCWy
key_exists = rewrite

3.3、redis-shake执行数据迁移

执行下述命令启动redis-shake,redis-shake将开始执行数据迁移

说明:支持sync, restore, dump, decode, rump等模式,全量+增量同步请选择sync,mac下请使用redis-shake.darwin,windows请用redis-shake.windows。

[root@localhost bin]# ./redis-shake.linux -conf=redis-shake.conf -type=sync

出现百分比,则为全量同步阶段,出现字样sync rdb done后,当前dbSyncer进入增量同步

2023/01/04 17:08:38 [INFO] DbSyncer[0] total = 125.93KB -     125.93KB [100%]  entry=10000  (全量同步阶段)     
2023/01/04 17:08:38 [INFO] DbSyncer[0] sync rdb done (进入增量同步阶段)
2023/01/04 17:08:38 [INFO] DbSyncer[0] FlushEvent:IncrSyncStart	Id:redis-shake	
2023/01/04 17:08:39 [INFO] DbSyncer[0] sync:  +forwardCommands=1      +filterCommands=0      +writeBytes=4
2023/01/04 17:08:40 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2023/01/04 17:08:41 [INFO] DbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0

3.4、校验迁移后的数据

参考官网:校验迁移后的数据

说明:redis-full-check is used to compare whether two redis have the same data. redis-full-check用于比较2个redis数据是否一致,支持单节点、主从、集群版、以及多种proxy,支持同构以及异构对比,redis的版本支持2.x-5.x。当前redis版本为6.x,也是可以使用,因为测试的不是很全面,也有可能会在某些场景下存在问题。

[root@localhost ~]# wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz
[root@localhost ~]# tar axf redis-full-check-1.4.8.tar.gz && cd redis-full-check-1.4.8
[root@localhost redis-full-check-1.4.8]# ./redis-full-check -s "192.168.1.191:7001" -p 1UEJjjGfYZU7dCWy -t "192.168.1.192:7001" -a 1UEJjjGfYZU7dCWy --sourcedbtype=0 --targetdbtype=0

说明:redis-full-check参数如下所示:

在这里插入图片描述

说明:执行完成后命令行输出校对结,如果此处为0,则两端数据一致

在这里插入图片描述


四、redis cluster集群数据迁移

《Linux运维总结:Centos7.6部署redis6.2.8 cluster集群》

4.1、环境信息如下

源端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.191Centos7.66.2.8x86_647001master
192.168.1.191Centos7.66.2.8x86_647002master
192.168.1.191Centos7.66.2.8x86_647003master
192.168.1.191Centos7.66.2.8x86_647004slave
192.168.1.191Centos7.66.2.8x86_647005slave
192.168.1.191Centos7.66.2.8x86_647006slave

目标端环境信息如下:

主机IP操作系统Redis版本CPU架构端口角色
192.168.1.192Centos7.66.2.8x86_647001master
192.168.1.192Centos7.66.2.8x86_647002master
192.168.1.192Centos7.66.2.8x86_647003master
192.168.1.192Centos7.66.2.8x86_647004slave
192.168.1.192Centos7.66.2.8x86_647005slave
192.168.1.192Centos7.66.2.8x86_647006slave

4.2、安装redis-shake

1、源端创建测试数据

[root@localhost ~]# for line in {1..1000};do /data/pkgs/redis/7001/bin/redis-cli -h 192.168.1.191 -p 7001 -c -a 1UEJjjGfYZU7dCWy set ops_${line} ${line}; done

2、在其中一个主节点上下载解压redis-shake文件

[root@localhost ~]# mkdir redis-shake && cd redis-shake
[root@localhost redis-shake]# wget https://github.com/alibaba/RedisShake/releases/download/release-v2.1.2-20220329/release-v2.1.2-20220329.tar.gz
[root@localhost redis-shake]# tar axf release-v2.1.2-20220329.tar.gz

3、修改配置文件

说明:cluster模式下,需要填写集群地址,以分号(;)分割。例如:192.168.1.191:7001;192.168.1.191:7002;192.168.1.191:7003。采用sync的时候只写master的IP和端口。

[root@localhost redis-shake]# vim bin/redis-shake.conf 
source.type = cluster
source.address = 192.168.1.191:7001;192.168.1.191:7002;192.168.1.191:7003
source.password_raw = 1UEJjjGfYZU7dCWy
target.type = cluster
target.address = 192.168.1.192:7001;192.168.1.192:7002;192.168.1.192:7003
target.password_raw = 1UEJjjGfYZU7dCWy
key_exists = rewrite

4.3、redis-shake执行数据迁移

1、分别在三个主节点上,执行下述命令启动redis-shake,redis-shake将开始执行数据迁移

[root@localhost bin]# ./redis-shake.linux -conf=redis-shake.conf -type=sync

出现百分比,则为全量同步阶段,出现字样sync rdb done后,当前dbSyncer进入增量同步

2023/01/05 09:19:33 [INFO] DbSyncer[1] total = 42.27KB -      42.27KB [100%]  entry=3349        
2023/01/05 09:19:33 [INFO] DbSyncer[1] sync rdb done
2023/01/05 09:19:33 [INFO] DbSyncer[1] FlushEvent:IncrSyncStart	Id:redis-shake	
2023/01/05 09:19:33 [INFO] DbSyncer[2] total = 42.05KB -      42.05KB [100%]  entry=3329        
2023/01/05 09:19:33 [INFO] DbSyncer[2] sync rdb done
2023/01/05 09:19:33 [INFO] DbSyncer[2] FlushEvent:IncrSyncStart	Id:redis-shake	
2023/01/05 09:19:33 [INFO] DbSyncer[0] total = 41.97KB -      41.97KB [100%]  entry=3322        
2023/01/05 09:19:33 [INFO] DbSyncer[0] sync rdb done  #全量同步完成,开始进行增量同步
2023/01/05 09:19:33 [INFO] DbSyncer[0] FlushEvent:IncrSyncStart	Id:redis-shake	
2023/01/05 09:19:34 [INFO] DbSyncer[1] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2023/01/05 09:19:34 [INFO] DbSyncer[2] sync:  +forwardCommands=1      +filterCommands=0      +writeBytes=4

4.4、校验迁移后的数据

参考官网:校验迁移后的数据

说明:redis-full-check is used to compare whether two redis have the same data. redis-full-check用于比较2个redis数据是否一致,支持单节点、主从、集群版、以及多种proxy,支持同构以及异构对比,redis的版本支持2.x-5.x。当前redis版本为6.x,也是可以使用,因为测试的不是很全面,也有可能会在某些场景下存在问题。

[root@localhost ~]# wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz
[root@localhost ~]# tar axf redis-full-check-1.4.8.tar.gz && cd redis-full-check-1.4.8
[root@localhost redis-full-check-1.4.8]# ./redis-full-check -s "192.168.1.191:7001;192.168.1.191:7002;192.168.1.191:7003" -p 1UEJjjGfYZU7dCWy \
-t "192.168.1.192:7001;192.168.1.192:7002;192.168.1.192:7003" -a 1UEJjjGfYZU7dCWy \
--sourcedbtype=1 --targetdbtype=1

说明:-s表示源端Redis的连接地址和端口,如果源Redis为集群版,集群中每个地址间需要以半角分号(;)分割不同的连接地址,-s后必须接三个主节点地址或者三个从节点地址,不能把三个主节点和三个从节点全部写上。-t表示目的端Redis的连接地址和端口,如果目的Redis为集群版,集群中每个地址间需要以半角分号(;)分割不同的连接地址,-t后必须接三个主节点地址或者三个从节点地址,不能把三个主节点和三个从节点全部写上。

说明:redis-full-check参数如下所示:

在这里插入图片描述

说明:执行完成后命令行输出校对结,如果此处为0,则两端数据一致

在这里插入图片描述


总结:整理不易,如果对你有帮助,可否点赞关注一下?

更多详细内容请参考:《Linux运维篇:Linux系统运维指南》

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东城绝神

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值