当前位置:网站首页>Redis上云迁移实践
Redis上云迁移实践
2022-08-10 12:35:00 【51CTO】
简介
随着云产品的完善,大多数公司已经开始使用云产品,云产品的确能够解决很多基础架构上的便利,提高业务架构的稳定性,如何将Redis数据在线迁移到云上,并且保证业务的无损,从迁移方案和工具选择必须要考虑如下几点:
兼容性:Redis社区版向下是兼容的,在上云的过程中,尽量保持大版本一致,以免版本不一致导致客户端不兼容的问题
迁移工具:充分考虑工具的功能性的同时,也要重点考虑便利和可运维性,工具需要有完整的日志和监控系统
数据完成性:数据大于一切,不能保证数据完整的情况下,切勿做相关的动作,Redis作为缓存数据变化较快,需实时进行数据较对相关工作
资源有效评估: 云上资源资源规格已标准化,在评估云上资源时,要充分参考自建机房实例,尽量高于自建资源
迁移流程
资源评估
- 充分考虑自建机房Redis实例的架构,从监控系统中提取实例QPS,内存大小,,连接数,带宽等三个指标,云上实例规格性能需与自建Redis对齐,云上实例对带宽有限制,这点需要注意
- 尽量采用自建实例的从库作为数据同步的数据源,以减少对业务访问主库的压力
兼容性评估
版本确认
云上实例尽量与自建实例保持大版本一致,目前比较主流的大版本是4.0
命令兼容性确认
云厂商为了支持一些特性,将一些命令进行了阉割,命令兼容性支持请查看云厂商文档
是否使用密码
某些老业务可能不支持密码,在上云的过程中,尽量保持免密,就算部分应用带有密码,也可以兼容
业务评估
是否使用lua脚本
检查原因:社区版4.0.2版本及以下版本都不会同步二级从库的lua脚本到三级从库,可对Redis进行monitor抓包查看
解决方法:同步主库
是否使用lua客户端
检查原因:部分应用应用lua客户端可能使用内置的域名解析,导致无法解析Redis域名
解决方法:修改内置域名解析或者使用系统域名解析
读写请求是否可拆
检查原因:主库读写无法拆开,无法保证应用一次读写请求请求迁移彻底,从而导致数据不一致性问题
解决方法:对主库使用代理,一般使用Haproxy
确认业务访问方
检查原因:防止业务漏迁,导致数据不一致
解决方法:定期开启redis monitor或tcpdump对主从实例进行抓包,了解业务访问方
确认业务是否有重连机制
检查原因:有研发确认
解决方法:应用端尽量保持重连机制,无重连机制,更改配置后,需重启业务应用
确定方案
方案实施
- 搭建的数据同步工具,需要有完成的监控系统,源端实例和目标实例需要有完整的日志,并对实例进行定期实时抓包
- 迁移过程中,研发负责人和运维人员全程参入,避免不可预见问题
- 迁移时间,应当选择业务低峰期
迁移收尾
善后处理
迁移完成后,确认业务无异常后,尽量将源端实例进行关闭,及时发现问题,并实时对代理抓包,避免漏迁移导致的数据不一致
总结经验
总结迁移过程中出现的问题,并形成文档,方便后续迁移和总结
迁移方案
原理
本方案采用开源Redis-shake作为数据同步工具,haroxy作为代理。架构如下图:
迁移方法
数据同步
可采用开源Redis数据同步工具,redis-shake的基本原理就是模拟一个从节点加入源redis集群,首先进行全量拉取并回放,然后进行增量的拉取(通过psync命令),具体配置请参考 文档
数据比对
可采用开源数据对比工具,通过全量对比源端和目的端的redis中的数据的方式来进行数据校验,其比较方式通过多轮次比较:每次都会抓取源和目的端的数据进行差异化比较,记录不一致的数据进入下轮对比(记录在sqlite3 db中)。然后通过多伦比较不断收敛,减少因数据增量同步导致的源库和目的库的数据不一致。最后sqlite中存在的数据就是最终的差异结果。具体配置请参考 文档
业务迁移
对于业务而已,只提供了redis地址和haproxy的地址,业务配置需要修改配置到haproxy地址,haproxy的配置如下:
总结
- 迁移前一定要做好方案调研、资源评估,兼容性评估
- 监控是运维人员的眼睛,方案选型后,监控是必不可少的
- 业务迁移,尽量选择业务低峰期,并做好相关测试
参考
redis数据同步
redis 数据比对
边栏推荐
- [Collection] HashSet and ArrayList lookup Contains() time complexity
- 漏洞管理计划的未来趋势
- 2022年8月中国数据库排行榜:openGauss重夺榜眼,PolarDB反超人大金仓
- StarRocks on AWS Review | Data Everywhere Series Event Shenzhen Station ended successfully
- 生成树协议STP(Spanning Tree Protocol)
- 【论文+代码】PEBAL/Pixel-wise Energy-biased Abstention Learning for Anomaly Segmentation on Complex Urban Driving Scenes(复杂城市驾驶场景异常分割的像素级能量偏置弃权学习)
- Codeforces Round #276 (Div. 1) B. Maximum Value
- CodeForces - 834C
- 把相亲角搬到海外,不愧是咱爸妈
- Comparison version number of middle questions in LeetCode
猜你喜欢
Shell:数组
漏洞管理计划的未来趋势
Ethernet channel 以太信道
【黑马早报】雷军称低谷期曾想转行开酒吧;拜登正式签署芯片法案;软银二季度巨亏230亿美元;北京市消协约谈每日优鲜...
kubernetes介绍
广东10个项目入选工信部2021年物联网示范项目名单
MySQL索引的B+树到底有多高?
What are the five common data types of Redis?What is the corresponding data storage space?Take you to learn from scratch
11 + chrome advanced debugging skills, learn to direct efficiency increases by 666%
AICOCO AI Frontier Promotion (8.10)
随机推荐
Educational Codeforces Round 41 (Rated for Div. 2) E. Tufurama
Codeforces Round #276 (Div. 1) D. Kindergarten
LeetCode·297.二叉树的序列化与反序列化·DFS·BFS
娄底干细胞制备实验室建设须知要求
BEVDet4D: Exploit Temporal Cues in Multi-camera 3D Object Detection 论文笔记
How to do foreign media publicity to grasp the key points
数字藏品,“赌”字当头
phpstrom 快速注释:
Twikoo腾讯云函数部署转移到私有部署
CodeForces - 834C
A detailed explanation of implementation api embed
商汤自研机械臂,首款产品是AI下棋机器人:还请郭晶晶作代言
大佬们有遇到过这个问题吗? MySQL 2.2 和 2.3-SNAPSHOT 都这样,貌似是
YTU 2295: KMP模式匹配 一(串)
神经网络可视化有3D版本了,美到沦陷!(已开源)
Requirements for the construction of Loudi stem cell preparation laboratory
Highways「建议收藏」
AICOCO AI Frontier Promotion (8.10)
跨域的五种解决方案
中科院深圳先进技术院合成所赵国屏院士组2022年招聘启事