欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

實現在線?+?離線模式進行遷移?Redis?數據實戰(zhàn)指南

 更新時間:2023年01月24日 10:19:07   作者:洛神灬殤  
這篇文章主要介紹了實現在線?+?離線模式進行遷移?Redis?數據實戰(zhàn)指南的相關資料,需要的朋友可以參考下

redis-full-check的使用背景

在經歷了之前的文章內容章節(jié)內容,已完成Redis遷移后,可能會存在以下問題需要進行數據遷移之后的對比。例如,如果Redis遷移的過程出現異常,源端與目的端Redis的數據將會不一致。

在Redis遷移完成后進行數據校驗可以檢查數據的一致性,該如何校驗就是我們本文的內容。我們在這里采用的是阿里開源的數據對比工具與Redis-Shake形成伴侶模式的開源工具redis-full-check,使用redis-full-check進行校驗能夠找出異常數據,為數據對齊提供可靠依據,本文主要介紹如何使用RedisFullCheck。

【Redis 技術探索】「數據遷移實戰(zhàn)」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰(zhàn)指南(數據檢查對比)_Redis

redis-full-check的基本介紹

redis-full-check是阿里云自研的Redis數據校驗工具,能夠提取源端和目的端的數據進行多輪差異化比較,并將比較結果記錄在一個SQLite3數據庫中,從而達到全量數據校驗的目的。

遷移源端和目的端Redis實例需為主從版、單節(jié)點版、開源集群版以及部分云上帶proxy的集群版(阿里云、騰訊云)。

開源地址redis-full-check源碼地址: ??https://github.com/aliyun/redis-full-check??

【Redis 技術探索】「數據遷移實戰(zhàn)」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰(zhàn)指南(數據檢查對比)_redis_02

redis-full-check下載地址: ??https://github.com/alibaba/RedisFullCheck/releases??

【Redis 技術探索】「數據遷移實戰(zhàn)」手把手教你如何實現在線 + 離線模式進行遷移 Redis 數據實戰(zhàn)指南(數據檢查對比)_Redis_03

編譯源碼

運行 ./bin/redis-full-check.darwin64 or redis-full-check.linux64,它分別在OSX和Linux中構建,然而,二進制文件并不總是最新版本。 或者您可以根據以下步驟構建red- full-check自己:

git clone https://github.com/alibaba/RedisFullCheck.git
cd RedisFullCheck/src/vendor
GOPATH=`pwd`/../..; govendor sync

注意:必須先安裝govendor,然后拉出所有依賴

cd ../../ && ./build.sh

執(zhí)行build.sh進行編譯即可。

基本原理redis-full-check通過全量對比源端和目的端的redis中的數據的方式來進行數據校驗,其比較方式通過多輪次比較:每次都會抓取源和目的端的數據進行差異化比較,記錄不一致的數據進入下輪對比(記錄在sqlite3 db中)。通過多倫比較不斷收斂,減少因數據增量同步導致的源庫和目的庫的數據不一致。最后sqlite中存在的數據就是最終的差異結果。數據對比介紹

redis-full-check對比的方向是單向,如果希望對比雙向,則需要對比2次,第一次以A為源庫,B為目的庫,第二次以B為源庫,A為目的庫。

首次對別:會抓取源庫A的數據,然后檢測是否位于B中,反向不會檢測,它檢測的是源庫是否是目的庫的子集。每次比較,會先抓取比較的key。

第一輪是從源庫中進行抓取,后面輪次是從sqlite3 db中進行抓??;抓取key之后是分別抓取key對應的field和value進行對比,然后將存在差異的部分存入sqlite3 db中,用于下次比較。

數據對比核心流程

下圖是基本的數據流圖。

對比模式(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不一致的hash、set和zset,只重新比較不一致的field,之前已經比較且相同的filed不再比較。這是為了防止對于大key情況下,如果更新頻繁,將會導致校驗永遠不通過的情況。value不一致的list,重新比較key:從源和目的取key、value比較。

每輪之間會停止一定的時間(Interval)。

對于hash,set,zset,list大key處理采用以下方式:len <= 5192,直接取全量field、value進行比較,使用如下命令:hgetall,smembers,zrange 0 -1 withscores,lrange 0 -1。len > 5192,使用hscan,sscan,zscan,lrange分批取field和value。使用redis-full-check解壓redis-full-check.tar.gz:tar -xvf redis-full-check.tar.gz執(zhí)行如下命令進行數據校驗:單機實例之間進行數據對比檢測

./redis-full-check -s $(source_redis_ip_port) -p $(source_password) -t $(target_redis_ip_port) -a $(target_password)

集群實例之間進行數據對比檢測

./redis-full-check -s "<Redis集群地址1連接地址:Redis集群地址1端口號;Redis集群地址2連接地址:Redis集群地址2端口號;Redis集群地址3連接地址:Redis集群地址3端口號>" -p <Redis集群密碼> -t <Redis連接地址:Redis端口號> -a <Redis密碼> --comparemode=1 --comparetimes=1 --qps=10 --batchcount=100 --sourcedbtype=1 --targetdbfilterlist=0

參數信息介紹

redis-full-check中主要參數如下:

-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單節(jié)點、主從),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              比較的并發(fā)協(xié)程數,默認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

對比實現案例對比2個主從版/單節(jié)點:

./redis-full-check -t 10.101.72.137:30661 -s 10.101.72.137:30551

對比主從和集群:

./redis-full-check -s "100.81.164.177:21331;100.81.164.177:21332;100.81.164.177:21333" -t 10.101.72.137:30551 --comparemode=1 --comparetimes=1 --qps=10 --batchcount=100 --sourcedbtype=1 --targetdbfilterlist=0

由于集群版只有db0,所以如果一端是集群版,另一端是非集群版(多個邏輯db),則需要添加sourcedbfilterlist或者targetdbfilterlist(非集群版本的一端)

查詢對比結果

sqlite> select * from key;
id          key              type        conflict_type  db          source_len  target_len
----------  ---------------  ----------  -------------  ----------  ----------  ----------
1           keydiff1_string  string      value          1           6           6
2           keydiff_hash     hash        value          0           2           1
3           keydiff_string   string      value          0           6           6
4           key_string_diff  string      value          0           6           6
5           keylack_string   string      lack_target    0           6           0
sqlite>

sqlite> select * from field;
id          field       conflict_type  key_id
----------  ----------  -------------  ----------
1           k1          lack_source    2
2           k2          value          2
3           k3          lack_target    2

對比結果差異分析不一致類型

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不同。

參考資料

數據參數校驗

redis-full-check中文文檔

到此這篇關于實現在線 + 離線模式進行遷移 Redis 數據實戰(zhàn)指南的文章就介紹到這了,更多相關遷移 Redis 數據實戰(zhàn)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 利用ganglia監(jiān)控redis的最新解決方法

    利用ganglia監(jiān)控redis的最新解決方法

    這篇文章主要給大家介紹了如何利用ganglia監(jiān)控redis的最新解決方法,網上的資料基本上就是13年的一篇文章,但發(fā)現文章的內容有些許問題,于是整理了下最新的解決方法,下面通過這篇文章來一起詳細的看看吧。
    2016-12-12
  • 深入理解redis中multi與pipeline

    深入理解redis中multi與pipeline

    pipeline 只是把多個redis指令一起發(fā)出去,redis并沒有保證這些指定的執(zhí)行是原子的;multi相當于一個redis的transaction的,保證整個操作的原子性,避免由于中途出錯而導致最后產生的數據不一致。本文詳細的介紹,感興趣的可以了解一下
    2021-06-06
  • 基于redis集群設置密碼的實例

    基于redis集群設置密碼的實例

    今天小編就為大家分享一篇基于redis集群設置密碼的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Redis有序集合類型的操作_動力節(jié)點Java學院整理

    Redis有序集合類型的操作_動力節(jié)點Java學院整理

    今天通過本文給大家說一下Redis中最后一個數據類型 “有序集合類型”,需要的的朋友參考下吧
    2017-08-08
  • Redis?持久化原理分析和使用建議詳解

    Redis?持久化原理分析和使用建議詳解

    本文主要介紹了Redis提供的三大持久化機制,即AOF日志、RDB快照以及混合持久化機制,結合圖文實例給大家講解的非常詳細,感興趣的朋友一起看看吧
    2025-02-02
  • redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    redis中如何使用lua腳本讓你的靈活性提高5個逼格詳解

    這篇文章主要給大家介紹了關于redis中如何使用lua腳本讓你的靈活性提高5個逼格的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-10-10
  • 64位Windows下安裝Redis教程

    64位Windows下安裝Redis教程

    這篇文章主要介紹了64位Windows下安裝Redis教程,本文使用Microsoft Open Tech group 在 GitHub上開發(fā)的一個Win64版本的Redis,需要的朋友可以參考下
    2014-09-09
  • Redis數據庫分布式設計方案介紹

    Redis數據庫分布式設計方案介紹

    大家好,本篇文章主要講的是Redis數據庫分布式設計方案介紹,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • Redis獲取某個大key值的腳本實例

    Redis獲取某個大key值的腳本實例

    這篇文章主要給大家分享介紹了關于Redis獲取某個大key值的一個腳本實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04
  • dubbo服務使用redis注冊中心的系列異常解決

    dubbo服務使用redis注冊中心的系列異常解決

    這篇文章主要為大家介紹了dubbo服務在使用redis注冊中心遇到的一系列異常的解決,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03

最新評論