Login
网站首页 > 文章中心 > 其它

【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 ◆ 离线模式进行迁移Redis数据实战指南_离线同步数据)

作者:小编 更新时间:2023-08-16 18:13:32 浏览量:387人看过

离线迁移

与在线迁移相比,离线迁移适宜于源实例与目标实例的网络无法连通的场景,或者源端实例部署在其他云厂商Redis服务中,无法实现在线迁移.

存在的问题

由于生产环境的各种原因,我们需要对现有服务器进行迁移,包括线上正在运行的redis集群环境 如何去做?

涉及到数据源变动,原有数据如何平滑迁移到新实例,从而可以实现无缝迁移?

方案汇总

save/bgsave导出RDB◆Redis-Shake进行迁移

基于redis自身的RDB/AOF 备份机制,执行save\bgsave触发数据持久化 RDB文件,拷贝redis备份文件(dump.rdb)到目标机器,重启目标实例重新load RDB 文件.

将上一步导出dump.rdb文件放到目标Redis服务所在的服务器的路径为:/root/dump.rdb

【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 ◆ 离线模式进行迁移Redis数据实战指南_离线同步数据)


type = "restore"

[source]
rdb_file_path = "/root/dump.rdb"

[target]
type = "standalone"
address = "12⑦0.0.1:6379"
password = "r-aaaaa:xxxxx"



redis-shake restore.toml


修改 restore.toml 为:


type = "restore"
[source]
rdb_file_path = "/root/dump.rdb"

[target]
type = "cluster"
address = "192.16⑧0.1:6379" # 这里写集群中的任意一个节点的地址即可
password = "r-ccccc:xxxxx"


运行 redis-shake:


redis-shake restore.toml


基于redis-dump导入导出 json备份

redis-dump基于JSON 备份还原Redis的数据:https://github.com/delano/redis-dump


git clone https://github.com/delano/redis-dump.git
$ cd redis-dump
$ gem install redis
$ gem install uri-redis
$ gem install yajl-ruby
$ gem install drydock
$ ruby -r rubygems bin/redis-dump



redis-dump –u 12⑦0.0.1:6379 > dump.json



redis-dump -u 12⑦0.0.1:6379 -d 15 > dump.json



redis-dump –u :password@12⑦0.0.1:6379 > dump.json



dump.json redis-load



dump.json redis-load -u :password@12⑦0.0.1:6379


数据迁移之后进行数据对比

数据迁移后,我们通常需要对比源实例和目的实例中的数据是否一致.如果有不一致的数据,我们需要把它们找出来,从目的实例中剔除,或者是再次迁移这些不一致的数据.这里,我就要再给你介绍一个数据一致性比对的工具了,就是阿里云团队开发的Redis-full-check .

Redis-full-check

Redis-full-check 的工作原理很简单,就是对源实例和目的实例中的数据进行全量比对,从而完成数据校验.不过,为了降低数据校验的比对开销,Redis-full-check 采用了多轮比较的方法.

在第一轮校验时,Redis-full-check 会找出在源实例上的所有 key,然后从源实例和目的实例中把相应的值也都查找出来,进行比对.第一次比对后,Redis-full-check 会把目的实例中和源实例不一致的数据,记录到 sqlite 数据库中.

从第二轮校验开始,Redis-full-check 只比较上一轮结束后记录在数据库中的不一致的数据.

为了避免对实例的正常请求处理造成影响,Redis-full-check 在每一轮比对结束后,会暂停一段时间.随着 Redis-shake 增量同步的进行,源实例和目的实例中的不一致数据也会逐步减少,所以,我们校验比对的轮数不用很多.

在运行 Redis-full-check 命令时,把参数 comparetimes 的值设置为我们想要比对的轮数.等到所有轮数都比对完成后,数据库中记录的数据就是源实例和目的实例最终的差异结果了.

注意:Redis-full-check 提供了三种比对模式,我们可以通过 comparemode 参数进行设置.comparemode 参数有三种取值,含义如下:

KeyOutline ,只对比 key 值是否相等;

ValueOutline ,只对比 value 值的长度是否相等;

FullValue ,对比 key 值、value 长度、value 值是否相等.

在应用 Redis-full-check 时,根据业务对数据一致性程度的要求,选择相应的比对模式.如果一致性要求高,就把 comparemode 参数设置为 FullValue .

最后至此完成了对应的数据的迁移和离线导入.后面的章节会详细介绍 Redis-full-check的应用实战和实现原理.

以上就是土嘎嘎小编为大家整理的【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 ◆ 离线模式进行迁移Redis数据实战指南_离线同步数据)相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!

版权声明:倡导尊重与保护知识产权。未经许可,任何人不得复制、转载、或以其他方式使用本站《原创》内容,违者将追究其法律责任。本站文章内容,部分图片来源于网络,如有侵权,请联系我们修改或者删除处理。

编辑推荐

热门文章