当前位置: 首页 > 科技观察

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

时间:2023-03-16 02:21:53 科技观察

本文转载请联系Java极客技术公众号。本文介绍一个Redis工具redis-full-check,主要用于校验迁移数据的准确性。下面我们一起来看看吧。安装redis-full-check是阿里的一个开源工具,github地址https://github.com/alibaba/RedisFullCheck,安装前需要找一台Linux机器,GLIBC版本需要高于2.14,否则在使用的时候会提示/lib64/libc.so.6:versionGLIBC_2.14notfound。我们有两种下载方式,第一种是直接在本地下载,然后上传到服务器;另一种是直接在服务器上执行wgethttps://github.com/alibaba/RedisFullCheck/releases/download/release-v1.4.8-20200212/redis-full-check-1.4.8.tar.gz进行下载。下载完成后解压tarxzvfredis-full-check-1.4.8.tar.gz。具体过程如下:1、查看当前服务器的GLIBC版本,执行命令strings/lib64/libc.so.6|grepGLIBC_,如下图,如果高于2.14,可以如果不是可以考虑更换服务器或自行更新,但更新有风险请谨慎。具体更新方法自行百度;2、下载压缩包并执行:wgethttps://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说明:-s:表示源Redis实例p:源Redis密码--sourcedbfilterlist:匹配指定的db库,单套Redis可以设置特定的db库,但不是在集群环境下,根据自己的情况决定是否使用;-t:TargetRedis,阿粉是一个集群所以会有多个节点,每个节点之间用分号隔开,注意文档上说的是allmasternodesorAllslavenodes不能一起填。这里填的master节点都成功了,但是slave好像都不成功。你可以自己试试。-a:表示目标Redis的密码--targetdbtype=1:目标Redis环境的类型,0:db(单机单节点,主从),1:cluster(集群版本),2:阿里云详解参数如下:-s,--source=SOURCE源redis库地址(ip:port),如果是集群版本,那么需要用分号(;)分隔不同的db,只需要配置一个主人或奴隶的。例如:10.1.1.1:1000;10.2.2.2:2000;10.3.3.3:3000。-p,--sourcepassword=Password源redis库密码--sourceauthtype=AUTH-TYPE源库管理权限,该参数在开源reids下无用。--sourcedbtype=源数据库类型,0:db(单机单机,主从),1:cluster(集群版),2:阿里云--sourcedbfilterlist=源数据库需要抓取的逻辑db白名单,在点序号(;)拆分,例如:0;5;15表示将抓取db0、db5、db15-t,--target=TARGET目标redis库地址(ip:port)-a,--targetpassword=password目标redis库密码--targetauthtype=AUTH-TYPE目标库管理权限,开源reids下无此参数。--targetdbtype=参考sourcedbtype--targetdbfilterlist=参考sourcedbfilterlist-d,--db=Sqlite3-DB-FILE为sqlite3db存放key不同的位置,默认result.db--comparetimes=COUNT比较轮次-m,--comparemode=比较模式,1表示完全比较,2表示只比较value的长度,3只比较key是否存在,4在完全比较的情况下,忽略大key的比较--id=usedformetric--jobid=用于播放metric--taskid=用于播放metric-q,--qps=qps限速阈值--interval=每轮之间的第二个时间间隔--batchcount=COUNT个batch聚合--parallel=COUNT比较并发协程数,默认5--log=FILE日志文件--result=FILE不一致的结果记录在结果文件中,格式:'dbdiff-typekeyfield'--metric=FILEmetricfile--bigkeythreshold=COUNTlargekeysplitThreshold,用于comparemode=4-f,--filterlist=FILTER待比较的key列表ed,以分号(;)分隔。例如:“abc*|efg|m*”表示比较“abc”、“abc1”、“efg”、“m”、“mxyz”,但不比较“efgh”、“p”。-v,--version查看结果执行上述命令后,会在当前目录下生成三个文件,分别是result.db.1、result.db.2、result.db.3。我们可以通过sqlite3工具进行查询,如下:通过sqlite3result.db.3命令进入终端,然后从key表中查询到我们需要的数据。sqlite3工具是一个类似于MySQL的数据库。具体使用方法大家可以自己研究,以后有机会再分享给大家。从上图我们可以看出这个结果看起来很不舒服。阿芬教你几招让妆容更好看!进入终端后,我们输入下图中的命令。headeron打开header,id就是序列号。key表示源Redis中的key,type表示类型,db表示key所在源Redis的db库,source_len和target_len分别表示源Redis和目标Redis中value的长度。我们可以按长度快速查看不同的数据。.mode列设置输出模式。widhtintint...设置每列显示的长度,比较美观。Quit退出终端通过这个输出,我们可以清楚的看到哪些数据不一致,从而比较两个Redis实例的数据,需要注意的是Redis-full-check比较的是源实例是否是目标实例的子集!总结今天阿粉给大家介绍一款Redis实例数据对比工具,一款阿里开源的真正可以用于生产的优秀工具,希望对大家有所帮助!更具体的使用细节,大家可以自行研究。一个好的工具是值得深入研究的。