redis-migrate-tool迁移工具

Redis 集群迁移工具,基于redis复制,快速,稳定。 
特点:

  • 快速。
  • 多线程。
  • 基于redis复制。
  • 实时迁移。
  • 迁移过程中,源集群不影响对外提供服务。
  • 异构迁移。
  • 支持Twemproxy集群,redis cluster集群,rdb文件 和 aof文件。
  • 过滤功能。
  • 当目标集群是Twemproxy,数据会跳过Twemproxy直接导入到后端的redis。
  • 迁移状态显示。
  • 完善的数据抽样校验。


迁移工具的来源可以是:单独的redis实例,twemproxy集群,redis cluster,rdb文件,aof文件。
迁移工具的目标可以是:单独的redis实例,twemproxy集群,redis cluster,rdb文件。 
安装依赖:
yum install autoconf automake libtool bzip2 
解压安装包:
$ unzip redis-migrate-tool-master.zip 

软件编译安装:
$ cd redis-migrate-tool-master
$ autoreconf -fvi
$ ./configure
$ make
使用"-h"选项查看使用方法
$ src/redis-migrate-tool -h 
软件运行:
src/redis-migrate-tool -c rmt.conf -o log -d 
在线迁移
redis-migrate-tool启动后模拟成redis slave,请求master的全量数据和增量数据。redis-migrate-tool收到数据之后解析成redis协议格式的oplog(写操作),然后发送给目标集群。有两种请求方式:
1、source_safe: true,对于同一ip上的redis,逐个的请求全量数据(RDB);
2、source_safe: false,并行请求同步全量数据。source_safe: false时,需要注意多个源redis所在的同一主机是否有足够的内存 和 RDB 并发落盘时的 IOPS 性能。 

配置文件
配置文件主要由三个部分组成:数据源[source],目标集群[target],通用配置部分[common]。

sourcetarget:
type
:可能的值是
single
twemproxy
redis cluster
rdb file
aof file
servers:redis地址列表,如果类型是twemproxy,此处需与twemproxy配置文件中的保持一致。如果是rdb文件,此处就是文件名。
redis_auth:对redis服务器的连接进行验证。
timeout:redis的读写超时以毫秒为单位。仅针对源redis集群,默认为120000。
hash:哈希函数的名称。仅针对与twemproxy类型。可能的值是:
one_at_a_time
md5
crc16
crc32 (crc32 implementation compatible with libmemcached)
crc32a (correct crc32 implementation as per the spec)
fnv1_64
fnv1a_64
fnv1_32
fnv1a_32
hsieh
murmur
jenkins 
hash_tag:两个字符串指定用于hash key的一部分。如"{ }"或"$ $"。只要标签内的key相同,hash_tag可以映射不同的keys到同一服务器。只针对twemproxy类型。 
distribution:key的分布规则。只针对twemproxy类型。可能的值是:
ketama
modula
random 
common:
listen:监听地址和端口,默认为:127.0.0.1:8888
max_clients:默认为100
threads:由redis-migrate-tool可以使用的最大线程数。默认为cpu核心数。
step:解析请求的步骤。数值越高,迁移越快,但会使用更多的内存,默认为1
mbuf_size:默认为512
noreply:一个布尔值,决定是否检查目标群体回复。默认值为false
source_safe:一个布尔值,保护源组机器内存安全。如果为true,该工具可以保证源组在同一台机器上同时只有一个redis生成rdb文件。此外,"source_safe:true"可以使用更少的线程,默认值为true。
dir:工作目录,用于存储文件(比如rdb文件)。默认为当前目录。
filter: 过滤掉不需要的数据,默认值为null. 
使用方法:
⑴.REDIS-MIGRATE-TOOL对源集群的类型并不敏感,对每个redis节点伪装成一个slave。因而 twemproxy和cluster集群,可以使用 single 和 cluster 类型。建议配置成对应的 twemproxy 或者 cluster类型。有两方面作用:1)REDIS-MIGRATE-TOOL在数据迁移时,可以根据 twemproxy(hash)或者cluster(slots)数据分布规则,过滤掉原本不属于该节点的数据;2)当源集群类型是cluster时,只用配置一个节点,简化配置。
⑵.目标集群,因为不同数据分布规则需要执行不同的写入逻辑,因而配置非常严谨。特别是tw集群,迁移到目标集群的server配置需要和twemproxy中保持一致,包括hash算法、数据分布算法、节点的ip和port、权重、节点的名字。
⑶.配置完成后,使用如下命令迁移数据:
$ src/redis-migrate-tool -c rmt.conf -o log -d


1、配置文件示例:从redis cluster集群迁移数据到twemproxy集群


2、配置文件示例:从redis cluster集群迁移数据到另外一个cluster集群


3、配置文件示例:从rdb文件恢复数据到redis cluster集群



观察迁移状态:
通过redis-cli连接redis-migrate-tool监控的端口,运行info命令,就可以查看迁移状态。
total_msgs_outqueue可以判断是否有oplog在队列中等待处理,如果total_msgs_outqueue>0,请继续等待。


数据校验(默认抽样1000个key)



如何完成业务切换?
如果是异构集群的迁移,更改redis驱动/客户端和修改代码,重新发布是必然的事情。如果是同构集群,做配置发布就可以。如果没有做重启发布,等待源集群没有连接之后,可以关闭REDIS-MIGRATE-TOOL进程(kill)。或者重启应用,强制断开长连接。 
注意事项:
1、REDIS-MIGRATE-TOOL迁移数据到twemproxy,需要保持rmt.conf 中 [target] hash、distribution、servers 三个参数和目标集群的twemproxy配置严格一致。
2、迁移中和业务切换之前,请反复观察"-o redis-migrate-tool.log"日志信息,确认是否有异常。
3、业务切换之前,请充分检查,特别是数据的一致性。
4、REDIS-MIGRATE-TOOL 建议部署在单独空闲机器上,同目的集群在同一个网段(跨机房迁移数据,可以提高迁移速度)。千万不要部署在源集群所在的机器,防止资源不足,比如内存,带宽,IOPS。
5、注意RDB传输是否超时;
6、redis client buf中的slave项,设置足够大的buffer size和超时时间。
7.运行此工具前,请确认redis源机器是否有足够的内存允许至少生成一个RDB文件。如果redis源机器有足够的内存允许所有的redis同时生成RDB文件,可以在配置文件rmt.conf中的添加配置项source_safe: false
8.以下命令不支持传播到目标redis组,因为keys使用这些命令可能会跨越不同的目标redis节点:
RENAME,RENAMENX,RPOPLPUSH,BRPOPLPUSH,FLUSHALL,FLUSHDB,BITOP,MOVE,GEORADIUS,GEORADIUSBYMEMBER,EVAL,EVALSHA,SCRIPT,PFMERGE

猜你喜欢

转载自blog.csdn.net/ahzxj2012/article/details/74347984