飞道的博客

使用redis-shake工具迁移云Redis数据(二十一)

338人阅读  评论(0)


使用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 install

2.创建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 yes
bind 0.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      8119  0.0  0.7 154000  7564 ?        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-cli
127.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 in 3 masters.				#比较这个值即可
0.13 keys per slot on average.
······
[OK] All nodes agree about slots configuration.
>>> Check for open 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 in 1 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-- 1 1320024 users     3175 Feb 12  2020 ChangeLog
-rwxr-xr-x 1 1320024 users 15220992 Feb 12  2020 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个失败的。


转载:https://blog.csdn.net/weixin_44953658/article/details/128230969
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场