当前位置: 首页 > 科技观察

Redis数据同步和数据迁移怎么做?

时间:2023-03-12 00:00:29 科技观察

前言一个Redis需要同步或者迁移另一个Redis的数据。这个怎么做?数据迁移通常更容易进行。可以直接从源Redis中导出RDB,然后将RDB文件导入到目标Redis中。但是,如果需要实时增量同步,就比较困难了。有什么好的方法可以解决这个需求吗?这里介绍一下阿里云开源的redis-shake工具。Redis-shake项目地址:https://github.com/alibaba/RedisShake基本功能redis-shake:是我们在redis-port的基础上改进的产品。支持分析、恢复、备份、同步四种功能。下面主要介绍同步sync。Restore恢复:将RDB文件恢复到目标redis数据库。备份转储:通过RDB文件备份源redis的全量数据。解析解码:读取RDB文件,解析成json格式存储。同步sync:支持源redis和目的redis的数据同步,支持全量和增量数据迁移,支持从云下同步到阿里云上云,也支持在不同环境下从云下同步到云下,支持单节点,主从版本和集群版本相互同步。需要注意的是,如果source是集群版本,可以启动一个RedisShake从不同的db节点拉取,source不能开启moveslot功能;对于目的地,如果是集群版本,可以写成Itisoneormoredbnodes。Synchronizedrump:支持源redis和目的redis的数据同步,只支持全量迁移。使用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。基本原理redis-shake的基本原理是模拟一个从节点加入源redis集群,先进行全量拉取回放,然后进行增量拉取(通过psync命令)。如下图所示:如果源端是集群模式,只需要启动redis-shake拉取即可,源端不能开启moveslot操作。如果目的地是集群模式,可以写入一个节点,然后进行槽迁移,当然也可以写多对多。目前,redis-shake是通过到目的地的单一链接实现的。一般情况下,这不会成为瓶颈,但在极端情况下,当qps比较大时,这部分性能可能会成为瓶颈。我们可能计划在未来优化处理这个问题。另外,从redis-shake到目的地的数据同步采用了异步的方式,读写操作分离在两个线程中,减少了网络延迟带来的同步性能下降。效率全同步阶段并发执行,增量同步阶段异步执行,可实现毫秒级延迟(取决于网络延迟)。同时我们也批量拉大key同步,优化同步性能。监控用户可以通过我们提供的restfulpullmetric来实时监控redis-shake:curl127.0.0.1:9320/metric。如何验证同步的正确性?您可以使用我们开源的redis-full-check:https://github.com/aliyun/redis-full-check?spm=a2c6h.12873639.0.0.4b8974955p9YxV。支持版本支持2.8-5.0版本同步。支持科迪斯。支持离云到上云,上云到上云,上云到离云(阿里云目前支持主从版本),其他云到阿里云,帮助用户灵活构建混合云场景。注意事项如果目标库的数据逐出策略(maxmemory-policy)配置为noeviction以外的值,可能会导致目标库的数据与源库的数据不一致。数据逐出策略详见Redis数据逐出策略介绍。如果源库中的某些Key使用了expire机制,由于Key可能已经过期但没有及时删除,所以在目标库中查看到的Key(比如通过info命令)会比源库中的多.按键数量少。解释:源库和目标库中,未设置过期机制或未过期的Key数量一致。安装Redis-shake#下载Redis-shake安装包$wget'http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120287/cn_zh/1608173646665/redis-shake-v2。0.3.tar.gz'#解压redis-shake安装包$tarxzfredis-shake-v2.0.3.tar.gz#修改配置文件$cdredis-shake-v2.0.3/$vimredis-shake.conf#启动Redis-shake,开始数据迁移$./redis-shake.linux-type=sync-conf=redis-shake.conf如果启动报错,相关原因及解决方法,请参考常见错误及解决方法。参考链接https://developer.aliyun.com/article/691794https://help.aliyun.com/document_detail/117311.html?spm=a2c4g.11186623.6.651.57fc1516WTPTT9