使用redis-shake 进行redis的数据同步或迁移操作
- 2019 年 10 月 4 日
- 笔记
redis-shake 是阿里开源的一个redis 同步工具(redis-migrate-tool比较老了,对一些命令的支持不好,并且官方的版本对应4.X的直接就是不支持)
下载地址: https://github.com/alibaba/RedisShake (直接去下载官方编译好的tar.gz包即可)
官方文档: https://yq.aliyun.com/articles/691794
mkdir /root/redis-shake-1.6.3 -pv
tar xf redis-shake.tar.gz -C /root/redis-shake-1.6.3
cd /root/redis-shake-1.6.3
我的修改后的配置文件如下: redis-shake.conf
id = redis-shake log.file = ./redis-shake.log log.level = all pid_path = ./ system_profile = 9310 http_profile = 9320 ncpu = 0 parallel = 32 source.type = standalone # 源redis是个单机版本的 source.address = 10.80.1.9:6389 # 这是我源redis的地址 # source.password_raw = 123456 # 没有密码的话, 可以注释掉这行配置,或者设置 source.password_raw = source.auth_type = auth source.tls_enable = false target.type = standalone # 目标redis 是个sentinel版的,下面 target.address 填sentinel环境下的redis master地址即可 target.address = 10.81.10.9:6390 # 目标redis的master地址 target.password_raw = target.auth_type = auth target.db = -1 target.tls_enable = false rdb.input = local rdb.output = local_dump rdb.parallel = 0 rdb.special_cloud = fake_time = rewrite = true filter.db = filter.key = filter.slot = big_key_threshold = 524288000 psync = false metric = true metric.print_log = false heartbeat.url = heartbeat.interval = 3 heartbeat.external = test external heartbeat.network_interface = sender.size = 104857600 sender.count = 5000 sender.delay_channel_size = 65535 keep_alive = 0 scan.key_number = 50 scan.special_cloud = scan.key_file = replace_hash_tag = false extra = false
启动命令:
./redis-shake -type=sync -conf=redis-shake.conf
数据同步过程到最后上线切换阶段, 我们还需要检验下数据是否一致。 可以使用配套的工具: redis-full-check
下载地址: https://github.com/alibaba/RedisFullCheck
文档地址:https://yq.aliyun.com/articles/690463?spm=a2c4e.11153940.blogcont691794.7.50c53f76mTeis6 (文档从原理到使用介绍得很详细,这里就不贴了)
redis-full-check的用法很简单, 解压后就一个可执行文件。
mkdir /root/redis-full-check-1.2.3/ -pv
tar xf redis-full-check.tar.gz -C /root/redis-full-check-1.2.3/
cd /root/redis-full-check-1.2.3/
./redis-full-check.linux64 -s 10.80.1.9:6389 -t 10.81.10.9:6390 -p '' -a '' –log=./check.log –result result.log
稍等片刻,就会在目录下生产几个文件

这3个result.db.X 文件,就是我们3轮过程中最后产生的文件,可以使用sqlite3程序打开查看里面的内容。 result.log 是用来记录不一致结果的。 看 result.log 就可以初步知道哪些key不一致了。