Redis ​集群迁移工具 Redis-Migrate-Tool

一、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进程。

点赞

发表回复