设为首页 收藏本站
查看: 1547|回复: 0

[经验分享] Redis异构集群数据在线迁移工具Redis-Migrate

[复制链接]

尚未签到

发表于 2017-12-21 19:39:10 | 显示全部楼层 |阅读模式
  摘要:Redis-Migrate-Tool(后面都简称RMT),是唯品会开源的redis数据迁移工具,主要用于异构redis集群间的数据在线迁移,即数据迁移过程中源集群仍可以正常接受业务读写请求,无业务中断服务时间。这篇blog主要内容包括工具特性简介、使用方法以及注意的要点。关于实现的原理,可以自行阅读源码理解或者联系我们交流。
  目前该项目已经开源在GitHub上(https://github.com/vipshop/redis-migrate-tool 链接入口可点击原文阅读)。

一、RMT特性
1、异构集群相互之间的迁移
  支持下面几种异构集群之间的数据迁移和同构集群扩容/缩容。
  1)单个redis到twemproxy/cluster迁移;
  2)twemproxy到twemproxy/cluster迁移;
  3)cluster到twmeproxy/cluster迁移。

2、在线迁移
  RMT启动后模拟成redis slave,请求master的全量数据和增量数据。RMT收到数据之后解析成redis协议格式的oplog(写操作),然后发送给目标集群。有两种请求方式,source_safe: true,对于同一ip上的redis,逐个的请求全量数据(RDB);source_safe: false,并行请求同步全量数据。source_safe: false时,需要注意多个源redis所在的同一主机是否有足够的内存 和 RDB 并发落盘时的 IOPS 性能。

3、从AOF 或 RDB恢复数据
  如果在线集群数据全部丢失,不要方,RMT可以帮你从备份的 AOF 和 RDB 文件恢复到目标集群。
4、数据过滤
  可以过滤算法上不属于源集群的脏数据,比如有人绕过twemproxy,非正常方式直接向后端redis写入数据。还可以在配置文件[common]中使用filter参数,过滤掉不需要的数据。

二、使用方法
  下面手把手教你使用 RMT,包括安装、配置、监控还有业务在线切换方式。
1、RMT安装
  github开源地址:https://github.com/vipshop/redis-migrate-tool
  安装:
DSC0000.jpg

  生成的执行文件在src目录下,使用"-h"选项查看使用方法。
DSC0001.jpg

2、RMT配置文件
  RMT的配置主要由三部分组成,数据源[source],目标集群[target],通用配置部分[common]。
  RMT对源集群的类型并不敏感,对每个redis节点伪装成一个slave。因而 twemproxy和cluster集群,可以使用 single 和 cluster 类型。建议配置成对应的 twemproxy 或者 cluster类型。有两方面作用:1)RMT在数据迁移时,可以根据 twemproxy(hash)或者cluster(slots)数据分布规则,过滤掉原本不属于该节点的数据;2)当源集群类型是cluster时,只用配置一个节点,简化配置。
  目标集群,因为不同数据分布规则需要执行不同的写入逻辑,因而配置非常严谨。特别是tw集群,迁移到目标集群的server配置需要和twemproxy中保持一致,包括hash算法、数据分布算法、节点的ip和port、权重、节点的名字。
  部分配置下面会详细讲解,完整配置请参考github(https://github.com/vipshop/redis-migrate-tool#configuration)。
2.1、redis/twemproxy到twemproxy
DSC0002.jpg

[source]和[taget] 由集群类型type和redis节点server组成。[source] type可以支持single/twemproxy/cluster/aof file/rdb file 五种类型。[target]中的type支持single/twemproxy/cluster/rdb file 四种类型。

  对于twemproxy集群,必须设置 hash、distribution、servers等参数,而且和目标集群的twemproxy一模一样(敲黑板)。前几天,有某站公司的朋友问,RMT迁移之后,存在数据读取不到,0.0。了解之后,发现是 target部分和twemproxy配置不一致导致。这也是写这篇 使用文档初衷和动力,怕坑到更多使用这个开源软件的朋友。
  在[common]中,一些参数主要作用如下,其他参数参考GitHub(https://github.com/vipshop/redis-migrate-tool#common)
DSC0003.jpg


2.2、cluster集群到cluster集群迁移
DSC0004.jpg

[source] 和 [target]只需配置集群的一个节点。当然[source]部分cluster也可以配置成如下形式。

DSC0005.jpg

2.3、cluster到twemproxy的迁移
DSC0006.jpg

  twemproxy 到 cluster的迁移,作为练习题,你们自己测试吧
2.4、从AOF 和 RDB中恢复数据
DSC0007.jpg

3、RMT迁移
  使用下面的命令就可以开始迁移数据
DSC0008.jpg

4、观察迁移状态
  使用redis-cli可以连接 rmt.conf 中配置的端口,执行info命令,就可以观察迁移的状态。
  total_msgs_outqueue可以判断是否有oplog在队列中等待处理,如果total_msgs_outqueue>0,请继续等待。
DSC0009.jpg


5 RMT检验源集群和目标集群的差异
DSC00010.jpg

  在业务切换到目标服务器之前,可使用 RMT 抽样检查数据的一致性,默认抽样1000个key。
6 如何完成业务切换?
  如果是异构集群的迁移,更改redis驱动/客户端和修改代码,重新发布是必然的事情。如果是同构集群,做配置发布就可以。如果没有做重启发布,等待源集群没有连接之后,可以关闭RMT进程(kill)。或者重启应用,强制断开长连接。

三、注意事项
  1、重要的事说三遍,RMT迁移数据到twemproxy,需要保持rmt.conf 中 [target]  hash、distribution、servers 三个参数和目标集群的twemproxy配置严格一致。
  2、迁移中和业务切换之前,请反复观察“-o rmt.log”日志信息,确认是否有异常。
  3、业务切换之前,请充分检查,特别是数据的一致性。
  4、RMT 建议部署在单独空闲机器上,同目的集群在同一个网段(跨机房迁移数据,可以提高迁移速度)。千万不要部署在源集群所在的机器,防止资源不足,比如内存,带宽,IOPS。
  5、注意RDB传输是否超时;

  6、redis client buf中的slave项,设置足够大的buffer>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-426591-1-1.html 上篇帖子: SpringBoot,Security4, redis共享session,分布式SESSION并发控制,同账号只能登录一次 下篇帖子: Redis数据类型之Hash(二)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表