往常大家对数据的迁移可能会想到mysql、mongodb、oracle等数据库的迁移,对redis数据的迁移可能比较少,因为redis平时都是用来做缓存用,里面的数据无所谓。因为某些特殊场景下,redis中的数据是必须的,又不能丢失,这时如果做迁移,那么里面的数据就必须一起进行迁移了。
对于redis数据迁移常见的手段有开启持久化直接copy文件,还有就是使用redis-dump,对于集群的迁移这种方式显然是不行的。
比如:
从6个节点的集群迁移到9个节点的集群中,用以上方法必然是不行的。
这里我们使用了一个迁移神器—redis-migrate-tool
安装比较简单,如下:
[root@test ~]# wget https://codeload.github.com/vipshop/redis-migrate-tool/zip/master
[root@test ~]# mv master redis-migrate-tool.zip
[root@test ~]# unzip redis-migrate-tool.zip
[root@test ~]# mv redis-migrate-tool-master /usr/local/redis-migrate-tool
[root@test ~]# cd /usr/local/redis-migrate-tool
[root@test ~]# autoreconf -fvi
[root@test ~]# ./configure
[root@test ~]# make
安装完成后,执行程序在此目录的src下。
查看启动参数
[root@test ~]# ./src/redis-migrate-tool -h
启动
[root@test ~]# ./src/redis-migrate-tool -c rmt.conf -o log -d
rmt.conf
[source]type: redis clusterservers :-1.1.1.1:1000redis_auth: 123456 [target]type: redis clusterservers:-2.2.2.2:1000redis_auth: 123456 [common]listen: 0.0.0.0:8000
type支持twemproxy、redis cluster、single这几种类型。
[root@test ~]# redis-cli -p 8000 info
total_msgs_outqueue可以判断是否有oplog在队列中等待处理,如果total_msgs_outqueue>0,请继续等待。
当total_msgs_outqueue为0时,可以尝试在老的集群各个节点中set几个值,并在新集群各个节点中get一下,验证数据同步的有效性。