写点什么

跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案

发布于: 2021 年 02 月 26 日

随着云计算十余年的高速发展,作为目前可见的最新阶段,多云正在快步大踏步前进。而多云趋势所带来得数据云间迁移,也逐步常态化。因此,缓存 Redis 已成为高并发场景下提升数据访问速度的标配。


不仅是数据云间迁移,目前大型系统对于缓存强依赖,致使大多数企业都会面临大量并发读写数据时访问速度慢、数据库压力大,以及缓存数据不⾜带来的缓存击穿及雪崩⻛险。其中,Redis 就起到了降低数据库压力,提升数据访问速度的作用。


下图是某网站业务的解决访问速度慢的问题,引入缓存 Redis 提升访问速度的流程:



但在 Redis 迁移同步过程中,势必会面临着许多挑战:


  • rdb 版本不⼀致导致源 redis dump⽂件在⽬标 redis 中不能加载

  • 数据节点不⼀致带来的 redis 主从复制⽅案失效

  • 应⽤快速割接的⽤⼾需求

  • ⾮幂等命令的幂等要求


正因如此, 应运而生。RedisSyncer 是京东云用于在 redis 之间数据同步的产品,支持跨版本、异构集群间的数据同步。它模拟了 redis 的 replication 协议,在 rdb 版本不⼀致时进⾏命令转换,以实现跨 rdb 版本迁移,并通过缓存 value 的⽅式完成 INCR、INCRBY、DECR、DECRBY 等⾮命令的幂等转换。最终适应云上与云下、原生与托管等多种场景,能够快速灵活地满足用户的同步、迁移、扩容的需求。


RedisSyncer 案例解析



某金融机构为保障金融数据安全、符合金融数据规范,需要将原⽣redis 集群迁移⾄该金融机构⾃研的 upredis 集群,并保证业务系统平滑过渡。


项⽬挑战

  • 版本差异

  • 降版本迁移

  • 集群节点数不⼀致

  • 极速回退需求


最终客⼾收益

  • 实现 15 分钟完成 256GB+数据迁移

  • 20 分钟完成系统割接

  • 迁移过程“丝般柔顺”


RedisSyncer 操作实战

  • 必要环境

  • docker

  • docker-compose

  • 使⽤docker-compose 部署服务

git clone https://github.com/TraceNature/redissyncer.gitcd redissyncerdocker-compose up -d
复制代码


  • 下载并配置 cli 客⼾端


wget https://github.com/TraceNature/redissyncercli/releases/download/v0.1.0/redissyncer-cli-0.1.0-linux-amd64.tar.gz
复制代码


.config.yaml

syncserver: http://10.0.1.20:8080token: 379F5E2BD55A4608B6A7557F0583CFC5
复制代码


  • ⽣成数据


./rsst -c ../config.yml generatedata -i 1 -a 10.0.1.101:6479 -predistest0102
复制代码


  • 编写要执⾏的任务 json redissyncer-cli 需要增加 taskexamples


{"sourcePassword": "redistest0102","sourceRedisAddress": "10.0.1.101:6379","targetRedisAddress": "10.0.1.102:6379","targetPassword": "redistest0102","taskName": "testtask","targetRedisVersion": 4.0,"autostart": true,"afresh": true,"batchSize": 100}
复制代码


  • 启动任务

redissyncer-cli -iredissyncer-cli > task create source ./task.json
复制代码


  • 数据校验


wgethttps://github.com/TraceNature/rediscompare/releases/download/v1.0.0/rediscompare-1.0.0-linux-amd64.tar.gz
复制代码


rediscompare compare single2single --saddr "10.0.1.101:6479" --spassword "redistest0102" --taddr "10.0.1.102:6479" --tpassword"redistest0102" --comparetimes 3
复制代码


Github 地址:

https://github.com/TraceNature/redissyncer-server


推荐阅读


欢迎点击【京东科技】,了解开发者社区

更多精彩技术实践与独家干货解析

欢迎关注【京东科技开发者】公众号


发布于: 2021 年 02 月 26 日阅读数: 22
用户头像

拥抱技术,与开发者携手创造未来! 2018.11.20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东科技开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
跨越异构鸿沟,Redis 迁移同步过程中的挑战与解决方案