Redis 实例对比工具之 Redis-full-check

存储 存储软件 Redis
这篇文章给大家介绍一个 Redis 工具 redis-full-check,主要是用来校验迁移数据过后的准确性,下面我们来看一下。

[[344636]]

本文转载自微信公众号「Java极客技术」,作者鸭血粉丝 。转载本文请联系Java极客技术公众号。 

这篇文章给大家介绍一个 Redis 工具 redis-full-check,主要是用来校验迁移数据过后的准确性,下面我们来看一下。

安装

Redis-full-check 是阿里开源的一个工具,GitHub 地址 https://github.com/alibaba/RedisFullCheck,安装前我们需要找一台 Linux 机器,并且 GLIBC的版本需要高于 2.14,不然使用的时候会提示 /lib64/libc.so.6: version GLIBC_2.14 not found 。下载我们有两种方式,第一种是在本地直接下载,然后上传到服务器上面;另一个是直接在服务器上面执行wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz进行下载。下载完成过后解压tar xzvf redis-full-check-1.4.8.tar.gz。具体的过程我们如下进行:

1.检查当前服务器的 GLIBC 版本,执行命令strings /lib64/libc.so.6 |grep GLIBC_,如下图,如果出现高于 2.14 的即可,如果没有可以考虑换一台服务器或者自己更新,但是更新有风险请谨慎,具体的更新方法自行百度;

 

2.下载压缩包,执行:wget https://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz 下载完成后解压。阿粉这里已经下过了, 就不重复下载了,解压后进入目录,输入./redis-full-check -v 如果能正常看到版本号就说明下载安装成功了。

 

使用

在使用这个工具之前,你需要的是两台不同的 Redis 实例,阿粉这边因为是从单机切换到集群,所以已经有了。下面就有单机和集群给大家演示。我们执行如下命令:./redis-full-check -s "172.20.xxx.xxx:6379" -p "sourcePassword" --sourcedbfilterlist=0 -t "172.20.xxx.xxx:6379;172.20.yyy.yyy:6379" -a "targetPassword" --targetdbtype=1

 

说明:

  1. -s: 表示源 Redis 实例
  2. p:源 Redis 密码
  3. --sourcedbfilterlist:匹配指定的 db 库,单集 Redis 是可以设置特定 db 库的,集群环境不行,根据自己的情况决定是否采用;
  4. -t:目标 Redis,阿粉这边是集群所以会有多个节点,每个节点用分号隔开,另外注意文档上说这里必须填写所有的 master 节点或者所有的 slave 节点,不能混合填写。阿粉这里填的都是 master 节点是成功,但是全部 slave 好像没成功,大家可以自己试试。
  5. -a:表示目标 Redis 的密码
  6. --targetdbtype=1:目标 Redis 环境的类型,0:db(standalone单节点、主从),1: cluster(集群版),2: 阿里云

详细的参数如下:

  1. -s, --source=SOURCE               源redis库地址(ip:port),如果是集群版,那么需要以分号(;)分割不同的db,只需要配置主或者从的其中之一。例如:10.1.1.1:1000;10.2.2.2:2000;10.3.3.3:3000。 
  2.  -p, --sourcepassword=Password     源redis库密码 
  3.      --sourceauthtype=AUTH-TYPE    源库管理权限,开源reids下此参数无用。 
  4.      --sourcedbtype=               源库的类别,0:db(standalone单节点、主从),1: cluster(集群版),2: 阿里云 
  5.      --sourcedbfilterlist=         源库需要抓取的逻辑db白名单,以分号(;)分割,例如:0;5;15表示db0,db5和db15都会被抓取 
  6.  -t, --target=TARGET               目的redis库地址(ip:port) 
  7.  -a, --targetpassword=Password     目的redis库密码 
  8.      --targetauthtype=AUTH-TYPE    目的库管理权限,开源reids下此参数无用。 
  9.      --targetdbtype=               参考sourcedbtype 
  10.      --targetdbfilterlist=         参考sourcedbfilterlist 
  11.  -d, --db=Sqlite3-DB-FILE          对于差异的key存储的sqlite3 db的位置,默认result.db 
  12.      --comparetimes=COUNT          比较轮数 
  13.  -m, --comparemode=                比较模式,1表示全量比较,2表示只对比value的长度,3只对比key是否存在,4全量比较的情况下,忽略大key的比较 
  14.      --id=                         用于打metric 
  15.      --jobid=                      用于打metric 
  16.      --taskid=                     用于打metric 
  17.  -q, --qps=                        qps限速阈值 
  18.      --interval=Second             每轮之间的时间间隔 
  19.      --batchcount=COUNT            批量聚合的数量 
  20.      --parallel=COUNT              比较的并发协程数,默认5 
  21.      --log=FILE                    log文件 
  22.      --result=FILE                 不一致结果记录到result文件中,格式:'db    diff-type    key    field' 
  23.      --metric=FILE                 metric文件 
  24.      --bigkeythreshold=COUNT       大key拆分的阈值,用于comparemode=4 
  25.  -f, --filterlist=FILTER           需要比较的key列表,以分号(;)分割。例如:"abc*|efg|m*"表示对比'abc', 'abc1', 'efg', 'm', 'mxyz',不对比'efgh', 'p'。 
  26.  -v, --version 

查看结果

执行完上面的命令过后在当前目录下会生成三个文件,分别是result.db.1,result.db.2,result.db.3。我们可以通过 sqlite3 工具进行查询,如下所示:

 

通过sqlite3 result.db.3 命令进入终端,然后从 key 表中查询我们需要的数据。sqlite3 工具是一个类似 MySQL 的数据库,大家可以自己研究下如何使用,后面有机会阿粉再跟大家分享。

从上面的图中可以发现,这个结果看起来很难受,阿粉再教大家几招,让看起来爽一点!进入终端后我们依次输入下面图中命令

 

  1. .header on 打开表头,id 只是序号,key 表示源 Redis 中的 key,type 表示类型,db 表示 key 所在的源 Redis 的 db 库,source_len,和 target_len 分别表示在源 Redis 和目标 Redis 的中 value 的长度。我们可以通过长度来快速查看不同的数据。
  2. .mode column 设置输出模式
  3. .widht int int... 设置每列显示的长度,更美观
  4. .quit 退出终端

通过这个输出结果我们可以明显的看出哪些数据是不一致的,从而对比两个 Redis 实例的数据,需要注意的是 Redis-full-check 对比的是源实例是否是目标实例的子集!

 

总结

今天阿粉给大家介绍了一个 Redis 实例数据对比的工具,能真正在生产上使用的一个阿里开源的很优秀的工具,希望对大家有帮助!具体的更多使用细节,大家可以自己研究研究,一个好的工具值得好好深入研究。

 

责任编辑:武晓燕 来源: Java极客技术
相关推荐

2017-06-07 14:58:39

Redis源码学习Redis事务

2024-04-18 08:00:00

2021-05-28 10:40:08

Redis数据库集群化

2015-12-28 10:48:44

RedisSpring缓存实例

2013-03-20 10:19:17

RedisRedis-senti监控

2020-05-27 20:45:31

Redis底层数据

2022-08-27 21:37:57

PrometheusRedis​监控

2022-12-22 07:40:28

2019-03-20 15:59:11

NoSQLRedis数据库

2021-09-28 09:36:13

redisHash结构

2021-03-23 08:39:27

SpringBootRedis管道技术

2014-08-01 13:40:50

R语言

2021-04-11 09:51:25

Redis可视化工具

2020-09-04 09:58:58

Redis数据集群

2011-07-15 09:11:39

MySQLMongoDB

2022-09-18 21:18:43

架构Redis

2023-03-15 08:30:37

2022-02-25 08:55:19

BitMapRedis面试题

2018-08-20 10:40:09

Redis位图操作

2023-03-01 22:28:15

Redis高可用
点赞
收藏

51CTO技术栈公众号