问题:
采用阿里云的redis-shake进行redis数据同步的过程中遇见需要进行数据一致性比对
分析:
理论:CRDT--https://yq.aliyun.com/articles/635628
幸运的是CRDT目前仅支持redis 4.0版本,雪球使用的就是redis4
解决:
采用阿里云开源组件:redis-full-check
准备:
1.下载组件
2.启动命令
nohup ./redis-full-check -s '涉密隐藏' --sourcedbtype=1 -t 涉密隐藏:6379 --targetdbtype=2 --comparemode=1 1>>redis-full-check.output 2>&1 &
已经封装在start.sh脚本中
#!/usr/bin/env bash
catalog=$(dirname "$0")
cd "${catalog}" || exit 1
if [ $# != 2 ] ; then
echo "USAGE: $0 [source] [target]"
exit 0
fi
name="redis-full-check"
if [ "Linux" != "$(uname -s)" ];then
printf "\\nWARNING !!! MacOs doesn't supply to use this script, please use \"./%s -conf=config_file_name\" manual command to run\\n" "$name"
exit 1
fi
nohup ./redis-full-check -s $1 --sourcedbtype=1 -t $2 --targetdbtype=2 --comparemode=1 1>>$name.output 2>&1 &
参数解释:
-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
3.日志分析
# 第一部分 初始化校验
# 第二部分 开始通过scan比较
# 第三部分 开始比较第二轮
# 第三部分 开始比较第三轮
# 第四部分 校验结束
|
4.结果分析
结果:没有冲突
耗时:5:18
分析数据量:30344089个key 共5.78G数据
3034
时间戳 | 动作 |
---|---|
2020-03-31-22:15:56 | init log success |
2020-03-31-22:15:56 | ---------------- start 1th time compare |
2020-03-31-22:21:24 | ---------------- start 2th time compare |
2020-03-31-22:21:29 | ---------------- start 3th time compare |
2020-03-31-22:21:29 | --------------- finished! ---------------- |