摘要: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

安装:

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

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

[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)

2.2、cluster集群到cluster集群迁移

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

2.3、cluster到twemproxy的迁移

twemproxy 到 cluster的迁移,作为练习题,你们自己测试吧

2.4、从AOF 和 RDB中恢复数据

3、RMT迁移

使用下面的命令就可以开始迁移数据

4、观察迁移状态

使用redis-cli可以连接 rmt.conf 中配置的端口,执行info命令,就可以观察迁移的状态。

total_msgs_outqueue可以判断是否有oplog在队列中等待处理,如果total_msgs_outqueue>0,请继续等待。

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

在业务切换到目标服务器之前,可使用 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 size和超时时间。

转载于:https://www.cnblogs.com/AmilyWilly/p/9120115.html

Redis异构集群数据在线迁移工具Redis-Migrate-Tool【转】相关推荐

  1. redis哨兵集群数据迁移_redis集群数据迁移—redis-migrate-tool神器

    往常大家对数据的迁移可能会想到mysql.mongodb.oracle等数据库的迁移,对redis数据的迁移可能比较少,因为redis平时都是用来做缓存用,里面的数据无所谓.因为某些特殊场景下,red ...

  2. redis主从集群搭建eclipse_【Redis】Redis 主从模式搭建

    主从模式介绍 Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以采用一主多从或者级联结构,Redis主从复制可以根据 ...

  3. redis cluster 集群redis5.xj数据迁移

    集群搭建参考我上片文章 https://blog.csdn.net/sinat_36759535/article/details/106605884 现在网上大都是基于3.x和4.x的迁移方案:他们通 ...

  4. Redis集群脑裂、Redis主从同步的异步丢数据问题

    什么是Redis的集群脑裂? Redis的集群脑裂指在主从集群中,同时有两个master主节点,它们都能接收写请求.而脑裂最直接的影响,就是客户端不知道应该往哪个master主节点写入数据,结果就是不 ...

  5. Redis Cluster集群知识学习总结

    Redis集群解决方案有两个: 1)  Twemproxy: 这是Twitter推出的解决方案,简单的说就是上层加个代理负责分发,属于client端集群方案,目前很多应用者都在采用的解决方案.Twem ...

  6. redis cluster 集群 HA 原理和实操(史上最全、面试必备)

    文章很长,建议收藏起来慢慢读!疯狂创客圈总目录 语雀版 | 总目录 码云版| 总目录 博客园版 为您奉上珍贵的学习资源 : 免费赠送 经典图书:<Java高并发核心编程(卷1)> 面试必备 ...

  7. Ubuntu 16.04下Redis Cluster集群搭建(官方原始方案)

    前提:先安装好Redis,参考:http://www.cnblogs.com/EasonJim/p/7599941.html 说明:Redis Cluster集群模式可以做到动态增加节点和下线节点,使 ...

  8. Redis面试 - 集群模式

    Redis面试 - 集群模式 面试题 redis 集群模式的工作原理能说一下么?在集群模式下,redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗? 面试官心理分 ...

  9. Redis学习(二)之 Redis Cluster集群

    redis3.0以前的版本要实现集群一般是借助哨兵sentinel工具来监控master节点的状态,如果master节点异常,则会做主从切换,将某一台slave作为master,哨兵的配置略微复杂,并 ...

最新文章

  1. audio type多种类型_http content-type常见文件格式类型
  2. dubbo集群服务下一台服务挂了对服务调用的影响
  3. 将八进制数制转换为二进制,十进制和十六进制数制
  4. Openshift 4.4 静态 IP 离线安装系列:准备离线资源
  5. Tree(树分治入门)
  6. Flex 开发android程序键盘遮挡输入框解决方案
  7. JSP直接调用一个action定向到页面
  8. java匿名类_Java匿名类
  9. centos7 python2换成python3后,yum报错解决
  10. 漫画聚合阅读器Tachidesk
  11. ${pram.name}
  12. python课后练习(高琪400集第一季.第五章)
  13. 堆外缓存是什么? OHC 堆外缓存使用简介
  14. MPLS 配置LDP本地会话实验 详解
  15. Chrome 制作绿色便携版
  16. mysql table plugin,MySql报错Table mysql.plugin doesn’t exist的解决方法
  17. WebUI自动化框架 - 数据驱动(ddt、paramunittest)
  18. 欧文分校计算机新sat多少分录取,加州大学欧文分校留学托福成绩要求95分 SAT1800分...
  19. Windows下Pycharm使用pyhive
  20. 2W 字详解 Redis 集群环境搭建实践

热门文章

  1. 服务器电脑安装win10系统安装教程视频,台式电脑win10系统安装教程
  2. 2021-07-23体素模型展示
  3. c++遍历文件系统时的坑
  4. Thingsboard的本地编译与运行详细说明
  5. 西门子1200连接安川伺服的心得
  6. 程序员业余生活之锻炼身体-中华武术
  7. s7300的db块详细说明_S7300中FB、FC和DB块的使用
  8. Istio在虚拟机部署纳管
  9. OpenJWeb+QQ群号:33724089+特此公告
  10. 若依的路由是怎么跳转的?