一次Redis-shake迁移数据缺少key问题记录-阿里云开发者社区

开发者社区> 持续高温> 正文

一次Redis-shake迁移数据缺少key问题记录

简介:
+关注继续查看

1、背景

某客户卡卷Redis集群数据迁移到阿里云redis,通过redis-shake工具迁移,遇到如下问题:
        ①源端:idc自建redis cluster,版本3.0.5,库中key基本都带过期时间
        ②目标端:阿里云redis 4分片集群,版本4.0
        ③通过redis-shake工具迁移,初始化完成,日志显示sync rdb done,进入增量阶段,发现目标库比源库少好多key,重试了多次,数据仍有缺失。

2、问题排查

2.1、观察redis-shake日志

        sync初始化完成进入增量,日志如下:

image

2.2、通过redis-full-check进行校验

        在上面初始化完成,进入增量后,通过redis-full-check校验数据,发现源端和目标端key相差较大,信息如下:

image

2.3、查看rdb文件

        这次拿的的redis-shake工具备份的备份文件,在查看备份文件rdb时发现,上面目标端缺少的key在rdb中没有,但是实际在源端是存在的。
        因为备份的文件看出有问题,这次去拿实际的redis rdb文件,登录到redis集群服务器,查看redis参数文件,找到rdb文件相关信息,发现
        ①三个主节点配置的dbfilename dump.rdb;dir ./这两个参数都是一样的
        ②去拿rdb文件,发现服务器上dump.rdb只有一个,结合上面参数的设置,怀疑三个主节点都写入到了同一个dump.rdb中

image


        ③查看redis三个主节点启动路径,验证②中的猜测

image


image


        从这里可以看到,redis集群主节点启动路径是一样的,多个节点数据都写入到了一个dump.rdb文件中。

2.4、redis-shake sync

        从上面看到的信息,结合本次使用的redis-shake工具,使用了sync模式,在全量初始化的时候,redis-shake需要去拿主节点的dump.rdb文件,结果源端只有一个dump.rdb文件,三个主节点之间数据互相覆盖,导致数据不完整,redis-shake进入增量之后,redis-full-check校验数据相差较大。

3、解决方法

        结合这次迁移环境,源端写入的key都是带过期时间的,等目标端缺少的这些key在源端过期后,之后的增量能实时从源库同步到目标库,达到数据迁移的目的。
        上面的方法只是针对这次的实际环境,最好是源端重新配置那两个参数,每个节点生成一个rdb文件,重新配置redis-shake全量+增量迁移。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
OSS实时日志查询——访问记录秒级查询与可视化分析
OSS新发布“OSS访问日志实时查询”,用户可在OSS控制台,对OSS访问日志,进行可视化的实时查询与分析统计。该功能可简化用户对OSS访问记录的审计、统计、事件回溯、运维分析、问题定位等工作,提升运维效率,挖掘日志数据价值,提高基于数据的决策能力,助力业务发展。
2313 0
面料电商后台报错小记录
前言快下班了,突然感觉有事情发生。但是小问题马上就解决了! 报错问题如下: 之后进入后台查看原来是少东西哇! 添加上就好了如图: 总结!多动脑常喝六个核桃!
558 0
MySQL删除小写记录
delete from tablename where binary field1 regexp '[a-z]';
470 0
基于redis(key分段,避免一个key过大) 和db实现的 布隆过滤器(解决hash碰撞问题)
基于redis(key分段,避免一个key过大) 和db实现的 布隆过滤器(解决hash碰撞问题)
5295 0
+关注
持续高温
你所追求的,总有一天会拥抱你!
21
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载