文章目录
使用redis-shake工具将云Redis的数据迁移到ECS服务器中的redis上,当然也可以通过阿里云的DTS数据传输服务进行数据迁移。
1.在ECS服务器中部署相同版本的Redis
阿里云Redis版本时5.x,由于版本兼容性问题,我们也需要在ECS中部署5.x版本的Redis。
1.下载源码包并编译安装
[root@iZ2ze1dg1xkfbzteb418qtZ ~]# wget https://download.redis.io/releases/redis-5.0.8.tar.gz[root@iZ2ze1dg1xkfbzteb418qtZ ~]# tar xf redis-5.0.8.tar.gz[root@iZ2ze1dg1xkfbzteb418qtZ ~]# cd redis-5.0.8/src[root@iZ2ze1dg1xkfbzteb418qtZ src]# make && make install2.创建redis部署目录
[root@iZ2ze1dg1xkfbzteb418qtZ ~]# mkdir /data/redis/{etc,bin} -p[root@iZ2ze1dg1xkfbzteb418qtZ ~]# cd redis-5.0.8/src/[root@iZ2ze1dg1xkfbzteb418qtZ src]# cp mkreleasehdr.sh redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-server /data/redis/bin/3.配置redis
[root@iZ2ze1dg1xkfbzteb418qtZ ~]# vim /data/redis/etc/redis.conf
daemonize yesbind0.0.0.0
4.启动redis
[root@iZ2ze1dg1xkfbzteb418qtZ ~]# /data/redis/bin/redis-server /data/redis/etc/redis.conf 5.查看进程
[root@iZ2ze1dg1xkfbzteb418qtZ ~]# ps aux | grep redis
root 81190.00.71540007564 ? Ssl 21:19 0:00 /data/redis/bin/redis-server 0.0.0.0:6379
2.安装redis-shake工具
[root@iZ2ze1dg1xkfbzteb418qtZ ~]# wget -c https://github.com/alibaba/RedisShake/releases/download/release-v1.6.24-20191220/redis-shake-1.6.24.tar.gz[root@iZ2ze1dg1xkfbzteb418qtZ ~]# cd redis-shake-1.6.24[root@iZ2ze1dg1xkfbzteb418qtZ redis-shake-1.6.24]# ls
ChangeLog redis-shake.conf redis-shake.darwin redis-shake.linux redis-shake.windows start.sh stop.sh
#主要是使用redis-shake.linux这个命令
3.redis-shake配置文件
[root@iZ2ze1dg1xkfbzteb418qtZ redis-shake-1.6.24]# vim redis-shake.conf conf.version=1#当前配置文件的版本号id= redis-shake #保持默认
source.type = proxy #源端Redis的类型,支持standalone,sentinel,cluster和proxy四种模式,由于源端是阿里云的redis,因此需要设置为proxy类型,并且不能使用sync同步方式
source.address = kodcloud.redis.rds.aliyuncs.com:6379 #源端Redis的连接地址
source.password_raw = kodcloud@123 #源端Redis的密码
source.auth_type = auth #源端验证类型
target.type = standalone #目标端Redis类型,standalone为单节点模式
target.address =127.0.0.1:6379 #目标端Redis连接地址
target.password_raw =123456#目标端Redis密码
target.auth_type = auth #目标端Redis验证类型#其余配置参数保持默认即可#源端Redis的类型,支持standalone,sentinel,cluster和proxy四种模式
standalone:适用于单机或者主从集群版的redis
sentinel:适用于哨兵模式的redis集群
cluster:适用于redis集群
proxy:适用于从阿里云的redis集群中写入或者拉取数据使用的类型,如果阿里云的redis使用的是直连模式可以采用cluster类型,proxy模式仅支持rump的同步方式。
redis-shake其他扩展参数
source.type
: 源redis的类型,支持一下4种类型:-standalone
: 单db节点/主从版模式。如果源端是从多个db节点拉取就选择这个模式,即便是codis等开源的proxy-db架构。-sentinel
: sentinel模式。-cluster
: 集群模式。开源的cluster。对于阿里云来说,用户目前无法拉取db的地址,所以此处只能是proxy。-proxy
: proxy模式。如果是阿里云redis的集群版,从proxy拉取/写入请选择proxy,从db拉取请选择cluster。正常cluster到cluster同步源端请选择cluster模式,proxy模式目前只用于rump。。source.address
: 源redis的地址,从1.6版本开始我们支持集群版,不同的类型对应不同的地址:- standalone模式下,需要填写单个db节点的地址,主从版需要输入master或者slave的地址。- sentinel模式下,需要填写sentinel_master_name:master_or_slave@sentinel_cluster_address。sentinel_master_name表示sentinel配置下master的名字,master_or_slave表示从sentinel中选择的db是master还是slave,sentinel_cluster_address表示sentinel的单节点或者集群地址,其中集群地址以分号(;)分割。例如:mymaster:master@127.0.0.1:26379;127.0.0.1:26380。注意,如果是sentinel模式,目前只能拉取一个master或者slave信息,如果需要拉取多个节点,需要启动多个shake。- cluster模式下,需要填写集群地址,以分号(;)分割。例如:10.1.1.1:20331;10.1.1.2:20441。同样也支持上面sentinel介绍的自动发现机制,包含@即可,参考3.2。- proxy模式下,需要填写单个proxy的地址,此模式目前仅用于rump。source.password_raw
:源redis的密码。-target.type
: 目的redis的类型,与source.type一致。注意,目的端如果是阿里云的集群版,类型请填写proxy,填写cluster只会同步db0。-target.address
:目的redis的地址。从1.6版本开始我们支持集群版,不同的类型对应不同的地址。 standalone模式,参见source.address。-target.password_raw
:目的redis的密码。 用户配置完配置文件,然后以不同的模式启动即可:./redis-shake -conf=redis-shake.conf -type=sync。
.4.将云Redis数据迁移至ECS的Redis中
1.为ECS中的Redis以及阿里云的Redis设置直接登录密码
[root@iZ2ze1dg1xkfbzteb418qtZ redis-shake-1.6.24]# /data/redis/bin/redis-cli127.0.0.1:6379> config set requirepass 123456[root@iZ2ze1dg1xkfbzteb418qtZ ~]# redis-cli -h kodcloud.redis.rds.aliyuncs.com
kodcloud.redis.rds.aliyuncs.com:6379> config set requirepass kodcloud@123
2.查看源端云Redis中的数据
[root@iZ2ze1dg1xkfbzteb418qtZ ~]# /data/redis/bin/redis-cli -h kodcloud.redis.rds.aliyuncs.com
kodcloud.redis.rds.aliyuncs.com:6379> KEYS *
1)"dbe6e88fcc467944baac323c679dde26"2)"9a8aeaef2c6c2b0bf2e300d0ddc8ce5d"3)"ef7f2_SystemOption_System.pluginList"4)"61e81db7b57bb014b4498f191bbb3b91"5)"9fe40105fd2547d817551b610b9d7e45"6)"7b887983dc8aff4231b3898fa9633684"7)"dfb98a1a872251c4cd8fde20569ebe51"8)"f0bab702b96c54a4a71e2612fe0d653f"9)"ef7f2_SystemOption_"10)"bcd010ad24518f0f3d6c58704aadbd87"11)"a1e77a3f16c732591bfccfa9213b301a"
3.迁移云Redis中的数据导ECS中的Redis
[root@iZ2ze1dg1xkfbzteb418qtZ redis-shake-1.6.24]# ./redis-shake.linux -conf=redis-shake.conf -type=rump
5.检查数据的准确率
数据迁移已完成,现在我们来检测数据的正确率,可以手动检查也可以通过工具来检查。
5.1.人工检查数据同步的准确率
redis-cli的check参数仅支持集群模式。
#由于在ecs中部署的是单机的redis,只能使用其他redis集群展示检测效果
/data/redis-5.0.8-cluster/bin/redis-cli --cluster check 192.168.100.1:6371
192.168.7.34:6372 (fc9c25cf...) ->654 keys |5462 slots |1 slaves.
192.168.7.34:6374 (7d4c8a93...) ->779 keys |5461 slots |1 slaves.
192.168.7.34:6375 (fa3c9a0f...) ->749 keys |5461 slots |1 slaves.
[OK]2182 keys in3 masters. #比较这个值即可0.13 keys per slot on average.
······
[OK] All nodes agree about slots configuration.
>>> Check foropen slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
#阿里云redis集群模式[root@iZ2ze1dg1xkfbzteb418qtZ ~]# /root/redis-6.2.6/src/redis-cli -a kodcloud@123 --cluster check kodcloud.redis.rds.aliyuncs.com:6379[OK]11 keys in1 masters.
5.2.使用redis-full-check工具检验数据同步正确率
1.安装redis-full-check工具以及参数介绍
#下载二进制文件[root@iZ2ze1dg1xkfbzteb418qtZ ~]# wget https://cdn.xuliangwei.com/redis-full-check-1.4.8.tar.gz#解压即可使用[root@iZ2ze1dg1xkfbzteb418qtZ ~]# cd redis-full-check-1.4.8[root@iZ2ze1dg1xkfbzteb418qtZ redis-full-check-1.4.8]# ls[root@iZ2ze1dg1xkfbzteb418qtZ redis-full-check-1.4.8]# ll
total 14892
-rw-r--r-- 11320024users3175 Feb 122020 ChangeLog
-rwxr-xr-x 11320024users15220992 Feb 122020 redis-full-check
redis-full-check命令常用参数:
-s
:指定源Redis库连接地址。--sourcepassword
:指定源Redis连接使用的密码。-t
:指定目标端Redis连接地址。--targetpassword
:指定目标端Redis连接使用的密码。--comparemode / -m
:校验模式。 - 1:全量校验。- 2:仅校验Vaule的长度。- 3:仅校验key是否存在。- 4:全量对比的情况下,忽略大key的比较。--comparetimes
:校验次数,建议不超过5。--qps
:限速阈值,最小值为1。--batchcount
:批量聚合的数量。--sourcedbtype
:源Redis的类型。 - 0:单节点、主从版。- 1:集群版。- 2:云Redis。--targetdbtype
:目标Redis的类型 - 0:单节点、主从版。- 1:集群版。- 2:云Redis。
2.开始校验数据正确率
[root@iZ2ze1dg1xkfbzteb418qtZ redis-full-check-1.4.8]# ./redis-full-check \-s"kodcloud.redis.rds.aliyuncs.com:6379"\--sourcepassword=kodcloud@123 \-t"127.0.0.1:6379"\--targetpassword=123456\--comparemode=1\--comparetimes=1\--qps=1000\--batchcount=100\--sourcedbtype=2\--targetdbtype=0#成功示意图[INFO 2022-01-31-22:08:35 full_check.go:328]: --------------- finished! ----------------
all finish successfully, totally 0 key(s) and 0 field(s) conflict
输出结果如下图:KeyScan:{11 11 0}中的第一个11为源库的key数量,第二个11位目标库的key数量,0表示无数据差异,最后两行显示校验已完成,所有的key中有0个失败的。
版权归原作者 Jiangxl~ 所有, 如有侵权,请联系我们删除。