redis-full-check

 

https://github.com/alibaba/RedisFullCheck/releases

     redis-full-check是阿里云Redis&MongoDB团队开源的用于校验2个redis数据是否一致的工具。
  redis-full-check通过全量对比源端和目的端的redis中的数据的方式来进行数据校验,其比较方式通过多轮次比较:每次都会抓取源和目的端的数据进行差异化比较,记录不一致的数据进入下轮对比(记录在sqlite3 db中)。然后通过多轮比较不断收敛,减少因数据增量同步导致的源库和目的库的数据不一致。最后sqlite中存在的数据就是最终的差异结果。

_

redis-full-check对比的方向是单向:抓取源库A的数据,然后检测是否位于B中,反向不会检测,也就是说,它检测的是源库是否是目的库的子集。如果希望对比双向,则需要对比2次,第一次以A为源库,B为目的库,第二次以B为源库,A为目的库。

redis-full-check判断不一致的方式主要分为2类:key不一致和value不一致。

key不一致

  key不一致主要分为以下几种情况:

  • lack_target : key存在于源库,但不存在于目的库。
  • type: key存在于源库和目的库,但是类型不一致。
  • value: key存在于源库和目的库,且类型一致,但是value不一致。

value不一致

  不同数据类型有不同的对比标准:

  • string: value不同。
  • hash: 存在field,满足下面3个条件之一:

    • field存在于源端,但不存在与目的端。
    • field存在于目的端,但不存在与源端。
    • field同时存在于源和目的端,但是value不同。
  • set/zset:与hash类似。
  • list: 与hash类似。

  field冲突类型有以下几种情况(只存在于hash,set,zset,list类型key中):

  • lack_source: field存在于源端key,field不存在与目的端key。
  • lack_target: field不存在与源端key,field存在于目的端key。
  • value: field存在于源端key和目的端key,但是field对应的value不同。

比较原理

  对比模式(comparemode)有三种可选:

  • KeyOutline:只对比key值是否相等。
  • ValueOutline:只对比value值的长度是否相等。
  • FullValue:对比key值、value长度、value值是否相等。

  对比会进行comparetimes轮(默认comparetimes=3)比较:

  • 第一轮,首先找出在源库上所有的key,然后分别从源库和目的库抓取进行比较。
  • 第二轮开始迭代比较,只比较上一轮结束后仍然不一致的key和field。

    • 对于key不一致的情况,包括lack_source lack_target type,从源库和目的库重新取key、value进行比较。
    • value不一致的string,重新比较key:从源和目的取key、value比较。
    • value不一致的hashsetzset,只重新比较不一致的field,之前已经比较且相同的filed不再比较。这是为了防止对于大key情况下,如果更新频繁,将会导致校验永远不通过的情况。
    • value不一致的list,重新比较key:从源和目的取key、value比较。
  • 每轮之间会停止一定的时间(Interval)。

  对于hashsetzsetlist大key处理采用以下方式:

    • len <= 5192,直接取全量field、value进行比较,使用如下命令:hgetallsmemberszrange 0 -1 withscoreslrange 0 -1
    • len > 5192,使用hscan,sscan,zscan,lrange分批取field和value。
-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(standalone单节点、主从),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          对于差异的key存储的sqlite3 db的位置,默认result.db--comparetimes=COUNT          比较轮数-m, --comparemode=                比较模式,1表示全量比较,2表示只对比value的长度,3只对比 key是否存在,4全量比较的情况下,忽略大key的比较--id=                         用于打metric--jobid=                      用于打metric--taskid=                     用于打metric-q, --qps=                        qps限速阈值--interval=Second             每轮之间的时间间隔--batchcount=COUNT            批量聚合的数量--parallel=COUNT              比较的并发协程数,默认5--log=FILE                    log文件--result=FILE                 不一致结果记录到result文件中,格式:'db    diff-type    key    field'--metric=FILE                 metric文件--bigkeythreshold=COUNT       大key拆分的阈值,用于comparemode=4-f, --filterlist=FILTER           需要比较的key列表,以分号(;)分割。例 如:"abc*|efg|m*"表示对比'abc', 'abc1', 'efg', 'm', 'mxyz',不对比'efgh', 'p'。-v, --version
 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535344.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021-06-22

服务器信息 [rootiZs7z01dz0z12dyttz9zn5Z cluster]# /app/redis/redis-3.2.1/src/redis-cli -c -h 10.252.120.9 -p 8003 10.252.120.9:8003> cluster nodes b1f543d646c5c97a70b0635439a44a72f8a143b1 10.252.120.10:8004 master - 0 1624349601417 7 connected 0-5460 1…

Docker目录挂载

Docker容器启动的时候&#xff0c;如果要挂载宿主机的一个目录&#xff0c;可以用-v参数指定。 譬如我要启动一个centos容器&#xff0c;宿主机的/test目录挂载到容器的/soft目录&#xff0c;可通过以下方式指定&#xff1a; # docker run -it -v /test:/soft centos /bin/ba…

Redis主从复制原理学习

Redis主从复制原理学习总结 - 运维笔记 和Mysql主从复制的原因一样&#xff0c;Redis虽然读取写入的速度都特别快&#xff0c;但是也会产生读压力特别大的情况。为了分担读压力&#xff0c;Redis支持主从复制&#xff0c;Redis的主从结构可以采用一主多从或者级联结构&#xff…

redis数据恢复

公司线上一个项目数据存储采用MySQL&#xff0c;共分为10个库&#xff0c;分布在4台机器上&#xff0c;每个库数据量约为10G&#xff0c;各机器均采用RAID5加速磁盘访问&#xff1b; 当同时在线人数达高峰期&#xff08;10w&#xff09;&#xff0c;DB磁盘IO压力巨大&#xff0…

Redis哨兵模式(sentinel)学习总结及部署记录(主从复制、读写分离、主从切换)

Redis的集群方案大致有三种&#xff1a;1&#xff09;redis cluster集群方案&#xff1b;2&#xff09;master/slave主从方案&#xff1b;3&#xff09;哨兵模式来进行主从替换以及故障恢复。 一、sentinel哨兵模式介绍 Sentinel(哨兵)是用于监控redis集群中Master状态的工具&…

Redis之Redis内存模型

Redis是目前最火爆的内存数据库之一&#xff0c;通过在内存中读写数据&#xff0c;大大提高了读写速度&#xff0c;可以说Redis是实现网站高并发不可或缺的一部分。 我们使用Redis时&#xff0c;会接触Redis的5种对象类型&#xff08;字符串、哈希、列表、集合、有序集合&…

MySQL 数据库误删除后的数据恢复操作说明

在日常运维工作中&#xff0c;对mysql数据库的备份是万分重要的&#xff0c;以防在数据库表丢失或损坏情况出现&#xff0c;可以及时恢复数据。 线上数据库备份场景&#xff1a; 每周日执行一次全量备份&#xff0c;然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案…

MySQL 之binlog日志说明及利用binlog日志恢复数据操作记录

众所周知&#xff0c;binlog日志对于mysql数据库来说是十分重要的。在数据丢失的紧急情况下&#xff0c;我们往往会想到用binlog日志功能进行数据恢复&#xff08;定时全备份binlog日志恢复增量数据部分&#xff09;&#xff0c;化险为夷&#xff01; 一、简单了解binlog MySQ…

zabbix巡检脚本

#!/bin/bash BIN/usr/local/zabbix/binpasswort() { name$2 while read line do ipecho $line|awk -F {print $1} timeecho $line|awk -F {print $2} echo -e "${name}passport${ip}探活时间\t $time" done <$1 }for i in 100.245.160.113 100.245.160.141 1…

mysqldump备份(全量+增量)

在日常运维工作中&#xff0c;对mysql数据库的备份是万分重要的&#xff0c;以防在数据库表丢失或损坏情况出现&#xff0c;可以及时恢复数据。 线上数据库备份场景&#xff1a; 每周日执行一次全量备份&#xff0c;然后每天下午1点执行MySQLdump增量备份. 下面对这种备份方案…

查找指定日期数据所在分区数据

select a.subobject_namefrom dba_objects a join (select dbms_rowid.rowid_object(rowid) object_idfrom NEWLOG4 where TO_CHAR(autudt,YYYY-MM-DD) 2021-06-22) b on a.object_id b.object_id and object_name UPPER(NEWLOG4) group by a.subobject_name

统计内存使用率shell

#!/bin/bashdatedate "%Y-%m-%d %H:%M:%S"#显示消耗资源内存最高的进程名firstps aux | grep -v "grep" | grep -v "USER" | sort -rn -k 4 | head -4 | awk -F {print $13} | sed -n 1pSecondps aux | grep -v "grep" | grep -v &q…

Oracle 11g系统自动收集统计信息

从Oracle Database 10g开始&#xff0c;Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务&#xff0c;用于自动收集CBO的统计信息&#xff0c;调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先…

Redis监控指标

监控指标 •性能指标&#xff1a;Performance•内存指标: Memory•基本活动指标&#xff1a;Basic activity•持久性指标: Persistence•错误指标&#xff1a;Error 性能指标&#xff1a;Performance NameDescriptionlatencyRedis响应一个请求的时间instantaneous_ops_per_s…

innobackupex参数说明

1、备份&#xff1a; #常用参数     --user&#xff1a;该选项表示备份账号。     --password&#xff1a;该选项表示备份的密码。     --port&#xff1a;该选项表示备份数据库的端口。     --host&#xff1a;该选项表示备份数据库的地址。     --socket…

innobackupex远程备份脚本

#!/bin/sh #备份主机 remote_ip10.2.142.161 Master_ip10.2.142.148 VIP103.2.132.136 #备份用户 userroot #密码 password123456 # 返回年月日 backup_datedate %F # 返回时分秒 backup_timedate %H-%M-%S # 返回今天是这周的第几天 backup_week_daydate %u backup_ok0 #备份目…

MySQL管理利器 MySQL Utilities---mysqlreplicate

mysqlreplicate 工具是在两台服务器间设置和启动复制。用户提供登录从服务器信息和连接到主的信息。也可以指定一个数据库用于测试复制。 该工具报告条件是当主和从的存储引擎不一样时。如果主和从的存储引擎不同将产生告警信息。对于Innodb存储引擎而言&#xff0c;必需完全…

MySQL管理工具MySQL Utilities — 如何连接MySQL服务器

连接参数 连接到一个服务器&#xff0c;必须指定连接参数&#xff0c;如用户名&#xff0c;主机名称&#xff0c;密码&#xff0c;端口号&#xff0c;socket。MySQL Utilities提供了三种提供这些参数的方法&#xff0c;这些方法都需要通过命令行指定。 使用.mylogin.cnf文件&…

MHA高可用

manager 组件 masterha_manger # 启动MHA masterha_check_ssh # 检查MHA的SSH配置状况 masterha_check_repl # 检查MySQL复制状况&#xff0c;配置信息 masterha_master_monitor # 检测master是否宕机 masterha_check_status # 检测当…

MySQL Replication需要注意的问题

主库意外宕机 如果没有设置主库的sync_binlog选项&#xff0c;就可能在奔溃前没有将最后的几个二进制日志事件刷新到磁盘中。备库I/O线程因此也可一直处于读不到尚未写入磁盘的事件的状态中。当主库从新启动时&#xff0c;备库将重连到主库并再次尝试去读该事件&#xff0c;但…