集群数据对比运行报错
我需要校验两个集群间的数据一致性,以下是校验命令:

但运行中出错,如下:
麻烦看下是什么原因导致的,感谢!
抱歉,这几天有点忙,这个今天我晚点看下
把这个地方改成string(ret.(string))就可以了
另外又出现一个问题,我们现在两个机房做redis集群数据同步,两个机房之间通过ip承载网互相访问,redis数据检查时,我源redis集群参数配置的是承载网ip,但报ECONNTIMEOUT超时,如下:
报连接超时的却是集群内部真实的cluster node的ip地址,
我想请问下,数据检查连接到源redis集群后,是拿的集群内部的ip地址去获取数据的吗?
如果是这样,能够修改为,使用检查参数中源redis集群的地址去获取数据吗?
感谢!
我不是搞go的,这个东西搞起来有点费劲儿。。。
改完报这个错那是连接问题了,你手动能连上吗?对于集群cluster是要每个db ip都能连接通才行的。这个报错捕获是不太合理,我后续会更新一下
报错的这台是10网段的,连不上吧?
./redis-full-check -s "172.17.70.150:10476;172.17.70.151:10476;172.17.70.152:10476;172.17.70.153:10476;172.17.70.154:10476" -p aaaaa -t "10.252.229.90:10476;10.252.229.90:10477;10.252.229.91:10476" -a aaaaa -m 1 --targetdbtype=1 --comparemode=1 --comparetimes=3 --qps=100 --batchcount=100 --sourcedbtype=1
这几台机器都能手动连上
报错的这台:10.14.16.122:10476呢。这个应该是某个db的地址,配的是172的网段,看这个应该走的10网段,看看机器ip是不是有啥特殊配置
报错的是10.14.16.122连不上,这个ip并不是我在命令中配置的ip 我们现在又A、B两个机房 A机房中集群作为源,A中集群ip为10.14.16.118-122,端口为10476 现在需要往B机房同步数据,但B机房中直接连10.14.16.118-122是连不上的,需要使用承载网ip 10.14.16.118--122分别对应的承载网ip为172.17.70.150--154 也就是说,从B机房连A机房的10.14.16.118机器上的redis,就要通过172.17.70.150去连接,也即 ./redis-cli -h 172.17.70.150 -p 10476 -a 现在的情况是,我的检查命令用的全都是承载网ip,但报连不上的是A机房实际的redis ip
你这个说的"承载网"是做的NAT转发?你看看集群cluster nodes显示本身应该也都是10网段的吧?这个驱动层面应该是有获取状态信息的,所以要改的话可能还得看下驱动层面的代码再修改,这个代价比较高了。 我建议,你可以把你A集群数据同步(可以用redis-shake)到A机房所在的1个standalone节点(假设为C),然后对外暴露172的网段,再对比B和C,相当于变相对于A和B了,这样可以绕开集群的driver。
对,就是转发,集群本身的cluster nodes确实是10网段的,我也看了redis的代码,还没找到在哪里改,go我也不熟悉。。。 我们目前同步用的就是redis-shake,直接是集群对集群,但同步完发现两边的数据量不一致,相差一百多万的key,所以就想用这个工具检查下,才发现有这么个问题。 行,我按照你的建议搞一发,搞完我在来反馈结果。 十分感谢!!
嗯,你先对比看下,有问题再反馈。差异你是用info keyspace看出来的吧,正常应该是数据过期了但没被删除导致的。
对,keyspace看的,用redis-shake同步,源集群中过期的key会同步到新集群吗
不会同步,keyspace看到不一致是正常的,你用full-check校验一下好了
我昨天检查了一遍,有三百多个key不一致,今天想再跑一次,但一直卡在21%不动,好几个小时了,该怎么解决,命令如下:

大概有15302148的数据
这个还是第一次见,应该哪里卡了,你要不重启一下吧,下个版本我加些堆栈信息。
我重启了还是一直卡在21%不动,我圈起来的后面两个变成两个0是什么意思
你加下我微信吧,redis-shake的底部能找到我的微信方式,我发你个二进制打下堆栈信息再试一下,再有问题把堆栈信息打给我。
我加你了
用户反馈:比较的线程数调到默认的5,就不会卡住,之前配置的32个线程。另外,还有qps、batchcount调到了1000,之前是5000。