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.pswp.cn/news/535344.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/535344.shtml
英文地址,請注明出處:http://en.pswp.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;但…