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

本文涉及的产品
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 【Redis 技术探索】「数据迁移实战」手把手教你如何实现在线 + 离线模式进行迁移Redis数据实战指南(离线同步数据)

离线迁移


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




存在的问题


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


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




方案汇总


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


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


命令 save bgsave
IO阻塞 同步 异步
复杂度 O(n) O(n)
缺点 阻塞客户端 需要fork子线程,消耗内存

导入原有Redis实例的数据dump.rdb


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


迁移到目标实例为单节点服务


需要使用restore.toml文件,进行编辑,从而进行执行执行文件进行迁移重放数据,如下图所示。

image.png

修改 restore.toml 为:
type = "restore"
[source]
rdb_file_path = "/root/dump.rdb"
[target]
type = "standalone"
address = "127.0.0.1:6379"
password = "r-aaaaa:xxxxx"
复制代码


运行 redis-shake:
redis-shake restore.toml
复制代码



迁移到目标实例为集群实例服务


修改 restore.toml 为:

type = "restore"
[source]
rdb_file_path = "/root/dump.rdb"
[target]
type = "cluster"
address = "192.168.0.1:6379" # 这里写集群中的任意一个节点的地址即可
password = "r-ccccc:xxxxx"
复制代码



运行 redis-shake:


redis-shake restore.toml
复制代码



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


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



下载和运行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 127.0.0.1:6379 > dump.json
复制代码


导出指定数据库数据

redis-dump -u 127.0.0.1:6379 -d 15 > dump.json
复制代码


如果redis设有密码

redis-dump –u :password@127.0.0.1:6379 > dump.json
复制代码


导入命令

dump.json redis-load
复制代码


指定redis密码
dump.json redis-load -u :password@127.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数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
7天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(一)
数据的存储--Redis缓存存储(一)
39 1
|
7天前
|
存储 缓存 NoSQL
数据的存储--Redis缓存存储(二)
数据的存储--Redis缓存存储(二)
22 2
数据的存储--Redis缓存存储(二)
|
4天前
|
存储 缓存 NoSQL
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
大数据-38 Redis 高并发下的分布式缓存 Redis简介 缓存场景 读写模式 旁路模式 穿透模式 缓存模式 基本概念等
19 4
|
4天前
|
消息中间件 缓存 NoSQL
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
大数据-49 Redis 缓存问题中 穿透、雪崩、击穿、数据不一致、HotKey、BigKey
14 2
|
4天前
|
SQL 分布式计算 NoSQL
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
大数据-42 Redis 功能扩展 发布/订阅模式 事务相关的内容 Redis弱事务
14 2
|
4天前
|
存储 缓存 NoSQL
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
大数据-46 Redis 持久化 RDB AOF 配置参数 混合模式 具体原理 触发方式 优点与缺点
20 1
|
6天前
|
JSON 缓存 NoSQL
Redis 在线查看序列化对象技术详解
Redis 在线查看序列化对象技术详解
17 2
|
6天前
|
存储 缓存 NoSQL
【redis】数据量庞大时的应对策略
【redis】数据量庞大时的应对策略
15 1
|
17天前
|
存储 缓存 NoSQL
解决Redis缓存击穿问题的技术方法
解决Redis缓存击穿问题的技术方法
40 2
|
6天前
|
存储 NoSQL Redis
redis保存数据的结构-redisobject结构体
`redisObject`结构体是Redis内部数据组织的核心,它通过集成类型标识、引用计数和编码方式等关键信息,实现了数据的高效管理和访问。这种设计允许Redis根据数据的实际需求动态调整存储结构,既保证了内存使用的高效性,也确保了数据操作的灵活性和速度。通过对 `redisObject`的深入了解,可以更好地掌握Redis如何在内存中高效存储和操作数据,进而优化数据库的性能和资源利用。
12 0