一、Redis-Migrate-Tool介绍
Redis 集群迁移工具,基于redis复制,快速,稳定。
github链接:https://github.com/vipshop/redis-migrate-tool
工具特点:
- 快速。
- 多线程。
- 基于redis复制。
- 实时迁移。
- 迁移过程中,源集群不影响对外提供服务。
- 异构迁移。
- 支持Twemproxy集群,redis cluster集群,rdb文件 和 aof文件。
- 过滤功能。
- 当目标集群是Twemproxy,数据会跳过Twemproxy直接导入到后端的redis。
- 迁移状态显示。
- 完善的数据抽样校验。
迁移工具的来源可以是:单独的redis实例,twemproxy集群,redis cluster,rdb文件,aof文件。
迁移工具的目标可以是:单独的redis实例,twemproxy集群,redis cluster,rdb文件。
安装依赖
yum install -y automake libtool autoconf bzip2
下载redis-migrate-tool工具
git clone https://github.com/vipshop/redis-migrate-tool.git
软件编译安装
$ cd redis-migrate-tool
$ autoreconf -fvi
$ ./configure
$ make
$ src/redis-migrate-tool -h
软件运行
src/redis-migrate-tool -c rmt.conf -o log -d
配置文件示例
- 从redis cluster集群迁移数据到twemproxy集群
[source]
type: redis cluster
servers:
- 127.0.0.1:6379
[target]
type: twemproxy
hash: fnv1a_64
hash_tag: "{}"
distribution: ketama
servers:
- 127.0.0.1:6380:1 server1
- 127.0.0.1:6381:1 server2
- 127.0.0.1:6382:1 server3
- 127.0.0.1:6383:1 server4
[common]
listen: 0.0.0.0:34345
threads: 8
step: 1
mbuf_size: 512
source_safe: true
- 从redis cluster集群迁移数据到另外一个cluster集群
[source]
type: redis cluster
servers:
- 127.0.0.1:8379
[target]
type: redis cluster
servers:
- 127.0.0.1:7379
[common]
listen: 0.0.0.0:8888
- 从rdb文件恢复数据到redis cluster集群
[source]
type: rdb file
servers:
- /data/redis/dump1.rdb
- /data/redis/dump2.rdb
- /data/redis/dump3.rdb
[target]
type: redis cluster
servers:
- 127.0.0.1:7379
[common]
listen: 0.0.0.0:8888
- 将数据从aof文件加载到Redis集群。
[source]
type: aof file
servers:
- /data/redis/appendonly1.aof
- /data/redis/appendonly2.aof
[target]
type: redis cluster
servers:
- 127.0.0.1:7379
[common]
listen: 0.0.0.0:8888
step: 2
- 从redis单点迁移数据到redis cluster集群
[source]
type: single
servers:
- 127.0.0.1:8379
[target]
type: redis cluster
servers:
- 127.0.0.1:7379
[common]
listen: 0.0.0.0:8888
数据效验
迁移数据后,可以使用redis_check命令检查源组和目标组中的数据。
$ src/redis-migrate-tool -c rmt.conf -o log -C redis_check
Check job is running...
Checked keys: 1000
Inconsistent value keys: 0
Inconsistent expire keys : 0
Other check error keys: 0
Checked OK keys: 1000
All keys checked OK!
Check job finished, used 1.041s
二、使用redis-migrate-tool做redis在线数据迁移
把单实例Redis的数据迁到一个新建立的Redis Cluster集群中。然后向单实例Redis插入数据,再使用redis-migrate-tool工具将数据迁移到集群中。
注意:当前测试环境中Redis的版本为3.2.12。
Redis Cluster集群搭建传送门:https://www.wanhebin.com/database/redis/771.html
安装redis-migrate-tool工具
- 安装依赖
yum install -y automake libtool autoconf bzip2
- 下载redis-migrate-tool工具
git clone https://github.com/vipshop/redis-migrate-tool.git
- 编译安装redis-migrate-tool
$ cd redis-migrate-tool
$ autoreconf -fvi
$ ./configure
$ make && make install
$ src/redis-migrate-tool -h
配置redis-migrate-tool
- 编写配置文件
tocluster.conf
[root@redis-03 redis-migrate-tool]# vim tocluster.conf
[source]
type: single
servers:
- 172.16.1.58:6381
[target]
type: redis cluster
servers:
- 172.16.1.56:6379
[common]
listen: 0.0.0.0:8888
向单实例redis中插入数据
- 插入1000条数据
[root@redis-03 ~]# for i in {1..999};do redis-cli -p 6381 set k-$i v-$i;done
- 查看数据
[root@redis-03 ~]# redis-cli -p 6381 dbsize
(integer) 999
启动redis-migrate-tool
- 启动redis-migrate-tool
[root@redis-03 redis-migrate-tool]# src/redis-migrate-tool -c tocluster.conf -o log -d
- 查看端口,检查是否启动
[root@redis-03 redis-migrate-tool]# netstat -tlnp | grep 8888
tcp 0 0 0.0.0.0:8888 0.0.0.0:* LISTEN 58541/src/redis-mig
查看集群数据
单节点上的1003条数据,已经被平均分布在redis cluster中的3个节点上。
[root@redis-01 ~]# redis-cli -p 6379 -h 172.16.1.56 dbsize
(integer) 337
[root@redis-01 ~]# redis-cli -p 6379 -h 172.16.1.57 dbsize
(integer) 323
[root@redis-01 ~]# redis-cli -p 6379 -h 172.16.1.58 dbsize
(integer) 339
对但实例redis和redis集群做数据效验
迁移数据后,检查单实例redis的数据和集群中的数据是否一致。
[root@redis-03 redis-migrate-tool]# src/redis-migrate-tool -c tocluster.conf -o log -C redis_check
Check job is running...
Checked keys: 1000
Inconsistent value keys: 0
Inconsistent expire keys : 0
Other check error keys: 0
Checked OK keys: 1000
All keys checked OK!
Check job finished, used 0.020s
进行业务切换
确保所有数据都迁移到了redis cluster后,直接把业务中指向但实例的redis修改为redis cluster中的任意一个主节点,然后用户就直接向redis cluster中写入、读取。等待源集群没有连接之后,关闭REDIS-MIGRATE-TOOL进程。