Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Redis-Cluster 集群(源) 和 Redis 单机(目标)数据比对,比对结果完全不对 #124

Open
newbieroutine opened this issue Jun 16, 2023 · 4 comments

Comments

@newbieroutine
Copy link

newbieroutine commented Jun 16, 2023

问题描述:
同一批个数据存在于redis-cluster 和redis 主从db5 数据源中,在进行源数据和目标数据进行比对时,源数据中的所有数据都被标记有问题数据,且sqlite3 输出结果 中conflict_type = lack_target (key在源数据库中,不在目的数据库中)

问题背景:
源redis 配置:

  1. redis-cluster 集群模式6主6从
    目标redis 配置:
  2. 单机redis ,数据源在db5
    redis-full-check 版本
    1.4.8
    比对模式: FullValue

比对需求: 比对源redis-cluster 模式 指定key 和 目标redis db5 的指定key 是否存在差异性,比对命令如下
./redis-full-check -s "192.168.0.125:6379;192.168.0.104:6379;192.168.0.100:6379;192.168.0.59:6379;192.168.0.137:6379;192.168.0.61:6379" -p "xxx" --sourcedbtype=1 --sourcedbfilterlist=0 -t "192.168.0.113:6379" -a "xxx" --targetdbtype=0 --targetdbfilterlist="5" --interval=10 --qps=300 --batchcount=1000 --log=redisFullCheck.log --result=checkResult.log --filterlist="redisson_delay_queue*"

输出结果分析:
数据结果提示:field存在与源端key,field不存在于目的端key
image

redis-full-check 执行日志如下:
通过日志看,感觉没有加载到redis-cluster 中的数据
image

查询源数据源和目的数据数据如下:
源数据key :
image

目的数据key :
image

通过输出结果可以看出,数据是在两个数据源的,但是比对结果确标注都不在源端,多次测试发现源端的所有数据都被标注成不一致。

@newbieroutine
Copy link
Author

newbieroutine commented Jun 16, 2023

是因为redis 单机作为目的源时,无法切换db吗

@yangbodong22011
Copy link
Member

yangbodong22011 commented Jun 19, 2023

当前代码下,集群和主从比较时候,sourcedbfilterlisttargetdbfilterlist必须相同。因为 Redis 原生集群只支持一个db0,因此只能对比单机的db0。

@newbieroutine
Copy link
Author

当前代码下,集群和主从比较时候,sourcedbfilterlisttargetdbfilterlist必须相同。因为 Redis 原生集群只支持一个db0,因此只能对比单机的db0。

哦哦, 如果需要支持,我需要修改源码的那个文件? 我看full_check.go 文件好像没有获取目的源db 的代码

@yangbodong22011
Copy link
Member

参考下这里VerifyOneGroupKeyInfo, src/full_check/full_check/full_check.go:389 目前都是用了 p.currentDB。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants