公司的redis服务器key的数量以达到千万级别,需要对redis进行实例拆分并线上迁移redis数据。
之前公司用的迁移脚本是基于一个key一个key的,速度非常慢,脚本如下:
#!/bin/bash
#redis 源ip
src_ip=192.168.1.1
#redis 源port
src_port=6379
#redis 目的ip
dest_ip=192.168.1.1
#redis 目的port
dest_port=9379
#src redis pass
src_auth_pass=Idianyou_Redis6379
#dest redis pass
dest_auth_pass=Idianyou_Redis6379
#要迁移的key前缀
key_prefix=circle
#迁到那个db
dest_db=0
#设置ttl过期时间
TTL=0
i=1
Cmd=/zywa/redis/bin
Other_Cmd=/zywa/redis_9379/bin
$Cmd/redis-cli -h $src_ip -p $src_port -n 0 -a $src_auth_pass keys "${key_prefix}*" | while read key
do
$Cmd/redis-cli -h $src_ip -p $src_port -n 0 -a $src_auth_pass --raw dump $key | perl -pe 'chomp if eof' | $Other_Cmd/redis-cli -h $dest_ip -p $dest_port -a $dest_auth_pass -n $dest_db -x restore $key 0
echo "$i migrate key $key"
((i++))
done
于是,通过查阅资料,最后决定使用唯品会开发的开源的redis迁移工具:redis-migrate-tool。该项目已在github上开源。一下称为RMT。
该工具的优势:
快速。
多线程。
基于redis复制。
实时迁移。
迁移过程中,源集群不影响对外提供服务。
异构迁移。
支持Twemproxy集群,redis cluster集群,rdb文件 和 aof文件。
过滤功能。
当目标集群是Twemproxy,数据会跳过Twemproxy直接导入到后端的redis。