Advertisement

Redis 数据迁移篇之redis-migrate-tool工具使用手册

阅读量:

文章目录

  • Redis 数据迁移篇:Redis-Migrate-Tool 工具使用说明
    • 安装部署步骤
      • 数据迁移操作演示
      • 检查指定监听端口是否已被其他服务占用
        • 修改Redis-Migrate-Tool的配置参数
        • 启动Redis-Migrate-Tool以开始数据迁移过程
        • 实时监控Redis-Migration-Tool的状态以确保正常运行
        • 完成数据迁移后进行系统一致性校验

Redis 数据迁移篇之redis-migrate-tool工具使用手册

Redis-Migrate-Tool(统称为RMT)是唯品会提供的开源Redis数据迁移工具,在线实现异构Redis集群间的数据迁移,在数据迁移过程中源集群能够持续处理正常的业务读写请求,并保证服务不停机

支持下面几种异构集群之间的数据迁移和同构集群扩容/缩容。

1)单个redis到twemproxy/cluster迁移

2)twemproxy到twemproxy/cluster迁移

3)cluster到twmeproxy/cluster迁移

1. 安装部署

复制代码
    # 示例1:CentOS系统部署redis-migrate-tool工具
    安装依赖包 
    # yum install autoconf automake libtool bzip2 
     
    下载安装包 
    # wget https://github.com/vipshop/redis-migrate-tool/archive/master.zip 
     
    解压安装包 
    # unzip master.zip 
    # mv redis-migrate-tool-master redis-migrate-tool 
     
    编辑安装 
    # cd redis-migrate-tool 
    # mkdir data 
    # autoreconf -fvi 
    # ./configure 
    # make 
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    # 示例2:Ubuntu系统部署redis-migrate-tool工具
    # mkdir -p /data/third_party
    # cd /data/third_party
    
    # apt-get update
    # apt-get install automake
    # apt-get install libtool
    # apt-get install autoconf
    # apt-get install bzip2
    
    # apt-get install git
    # git clone https://github.com/tanruixing88/redis-migrate-tool.git
    
    # cd redis-migrate-tool
    # autoreconf -fvi
    # ./configure
    # make
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

2. 数据迁移示例

1. 确认redis-migrate-tool工具的监听端口是否被占用

复制代码
    # lsof -i:6666
    
    
      
    
    代码解读

2.编辑redis-migrate-tool工具的配置文件

如下示例配置是进行twemproxy到twemproxy的迁移:

复制代码
    # vim /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.conf
    
    
      
    
    代码解读
复制代码
    [source]
    type: twemproxy
    hash: fnv1a_64
    hash_tag: "{}"
    distribution: ketama
    redis_auth: 6d27078f93b7508d1f6c0104
    servers:
     - 172.21.111.11:8100:1 server01
     - 172.21.111.12:8100:1 server02
     - 172.21.111.13:8100:1 server03
     - 172.21.111.14:8100:1 server04
     - 172.21.111.15:8100:1 server05
     - 172.21.111.16:8100:1 server06
     - 172.21.111.17:8100:1 server07
     - 172.21.111.18:8100:1 server08
     - 172.21.111.19:8100:1 server09
     - 172.21.111.20:8100:1 server10
     - 172.21.111.21:8100:1 server11
     - 172.21.111.22:8100:1 server12
     - 172.21.111.23:8100:1 server13
    
    [target]
    type: twemproxy
    hash: fnv1a_64
    hash_tag: "{}"
    distribution: ketama
    redis_auth: 6d27078f93b7508d1f6c0104
    servers:
     - 172.21.111.14:6201:1 server1
     - 172.21.111.14:6202:1 server2
     - 172.21.111.14:6203:1 server3
     - 172.21.111.14:6204:1 server4
     - 172.21.111.14:6205:1 server5
     - 172.21.111.14:6206:1 server6
     - 172.21.111.14:6207:1 server7
     - 172.21.111.14:6208:1 server8
     - 172.21.111.14:6209:1 server9
     - 172.21.111.14:6210:1 server10
     - 172.21.111.15:6201:1 server11
     - 172.21.111.15:6202:1 server12
     - 172.21.111.15:6203:1 server13
     - 172.21.111.15:6204:1 server14
     - 172.21.111.15:6205:1 server15
     - 172.21.111.15:6206:1 server16
     - 172.21.111.15:6207:1 server17
     - 172.21.111.15:6208:1 server18
     - 172.21.111.15:6209:1 server19
     - 172.21.111.15:6210:1 server20
     - 172.21.111.16:6201:1 server21
     - 172.21.111.16:6202:1 server22
     - 172.21.111.16:6203:1 server23
     - 172.21.111.16:6204:1 server24
     - 172.21.111.16:6205:1 server25
     - 172.21.111.16:6206:1 server26
     - 172.21.111.16:6207:1 server27
     - 172.21.111.16:6208:1 server28
     - 172.21.111.16:6209:1 server29
     - 172.21.111.16:6210:1 server30
    
    
    [common]
    listen: 0.0.0.0:6666
    threads: 4
    step: 1
    mbuf_size: 1024
    source_safe: true
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    注1:[source]和[taget] 由集群类型type和redis节点server组成;
    	[source] type可以支持single/twemproxy/cluster/aof file/rdb file 五种类型;
    	[target]中的type支持single/twemproxy/cluster/rdb file四种类型。
    
    注2:在[common]中,一些参数主要作用如下,其他参数请参考GitHub(https://github.com/JokerQueue/redis-migrate-tool)
    	listen: 0.0.0.0:6666 # RMT的状态汇报端口
    	threads: 30 		# 启动的线程数,建议大于所有redis节点的个数
    	step: 1 			# 控制解析请求的速度,值越大需要的内存越多
    	mbuf_size: 1024 	 # 使用的mbuf大小,需要大于redis中最大的key的长度(不是value)
    	source_safe: true 	 # 对于是否串行请求做全量RDB
    
    注3:cluster集群到cluster集群迁移,[source] 和 [target]只需配置集群的一个节点。
    
    注4:RMT迁移数据到twemproxy,需要保持rmt.conf 中 [target] hash、distribution、servers 三个参数和目标集群的twemproxy配置严格一致。
    
    注5:源端的server的标签,如server01、server02需要保持和twemproxy中的配置一致。
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

3. 运行redis-migrate-tool开始迁移

复制代码
    # /data/third_party/redis-migrate-tool/src/redis-migrate-tool -c /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.conf -v 11 -o /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.log -d 
    
    
    注:参数说明:
    	参数说明:
    	-d 以守护进程执行
    	-I 输出有用的信息
    	-n 不接收目标redis的回应
    	-v 设置日志等级,默认5,最小0,最大11
    	-o 输出到日志
    	-c 配置文件
    	-p 进程文件,默认没有
    	-m 存储器缓冲大小,默认512字节
    	-C 默认redis_migrate,就是迁移命令
    	-r 源类型,默认single,还可以是twemproxy或者redis_cluster
    	-R 目标类型,默认single,还可以是twemproxy或者redis_cluster
    	-T 线程数,使用多少线程来跑这个job,默认1
    	-b 默认可以使用128T的缓存来运行这个job
    	-f 源ip:port
    	-t 目标ip:port
    	-S 默认1,用于解析请求的步骤,数值越大,迁移越快,内存占用也就越大
    
    
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读
复制代码
    查看执行进程:
    # ps -ef| grep redis-migrate-tool |grep rmt_tw_18100_to_16201.conf| grep -v grep
    
    
      
      
    
    代码解读
复制代码
    若需停止进程,可执行如下命令:
    # ps -ef| grep redis-migrate-tool |grep rmt_tw_18100_to_16201.conf| grep -v grep | awk '{print $2}' | xargs kill -9
    
    
      
      
    
    代码解读

4. 监控redis-migration-tool的运行状态

复制代码
    # redis-cli -p 6666
    127.0.0.1:6666> info stats
    
    注:使用redis-cli可以连接rmt.conf中配置的端口,执行info命令,就可以观察迁移的状态。[total_msgs_outqueue]可以判断是否有oplog在队列中等待处理,如果total_msgs_outqueue>0,请继续等待。
    
    
      
      
      
      
    
    代码解读
复制代码
    # tail -f /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.log
    
    注:迁移中和业务切换之前,请反复观察“-o rmt_tw_18100_to_16201.log”日志信息,确认是否有异常。
    
    
      
      
      
    
    代码解读

5. 迁移完毕后验证数据一致性

复制代码
    默认每次验证1000个KEY:
    # /data/third_party/redis-migrate-tool/src/redis-migrate-tool -c /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.conf -v 11 -o /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.log -C redis_check
    
    可指定每次验证10000个KEY:
    # /data/third_party/redis-migrate-tool/src/redis-migrate-tool -c /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.conf -v 11 -o /data/third_party/redis-migrate-tool/rmt_tw_18100_to_16201.log -C "redis_check 10000"
    
    
    注1:aof和rdb无法做rmt的redis_check校验。
    
    注2:迁移之后的数据check是根据conf配置文件中指定的那两个Redis的key和value 的比较,只要这个过程中target的数据不要乱动就没事。
    
    注3:rmt工具只要不关闭,一次的量要不大,速度同步的够快不会出现check不一致。
    
    
      
      
      
      
      
      
      
      
      
      
      
      
    
    代码解读

全部评论 (0)

还没有任何评论哟~