Redis迁移工具redis-migrate-tool的使用
背景 : 公司由于以前没有同意规划 , 导致出现好几个redis实例 , 现在需要整合到一起 , 查到还有redis-migrate-tool工具 , 所以把使用情况写一下 , 以备后用参考
一、下载编译
# 从git库直接拉取
git clone https://github.com/vipshop/redis-migrate-tool.git
# CentOS安装必要的包(其他Linux版本请自己查询安装方法)
yum -y install automake libtool autoconf bzip2
# 编译并安装
cd redis-migrate-tool
autoreconf -fvi
./configure
make
#能出现帮助 , 说明编辑安装成功
src/redis-migrate-tool -h
二、写配置文件
配置文件样例 :
[source] type: redis cluster servers: - 172.25.2.118:6380 - 172.25.2.118:6381 redis_auth: {redis密码} [target] type: single servers: - 172.25.2.118:6379 redis_auth: {redis密码} [common] listen: 0.0.0.0:8888 threads: 8 step: 1 mbuf_size: 512 source_safe: true
source和target详解 (待迁移 和 迁入数据源) :
;Redis RDB备份模式 [source] type: rdb file servers: - /data/redis/dump1.rdb - /data/redis/dump2.rdb ;Redis AOF备份模式 [source] type: aof file servers: - /data/redis/dump1.aof - /data/redis/dump2.aof ;Redis 单机实例 [source] type: single servers: - 172.25.2.118:6379 ; redis密码 redis_auth: 111 ;Redis Cluster集群模式 [target] type: redis cluster servers: - 127.0.0.1:6379 - 127.0.0.1:6380 ; redis密码 redis_auth: 111 ;Redis Twemproxy集群模式 [target] type: twemproxy ;hash模式包括 : one_at_a_time md5 crc16 crc32 crc32a fnv1_64 fnv1a_64 fnv1_32 fnv1a_32 hsieh murmur jenkins hash: fnv1a_64 ; {} or $$ hash_tag: "{}" ;distribution包括 : ketama , modula ,random distribution: ketama servers: - 127.0.0.1:6380:1 server1 - 127.0.0.1:6381:1 server2
common详解
common
listen: 监听的地址和端口(name:port或ip:port)。默认是127.0.0.1:8888
max_clients:该监听端口客户端最大数量。默认是100
threads: redis-migrate-tool能够使用的最大的线程数量。默认是cpu核数。
step: 解析请求的级别。配的越大,迁移越快,消耗内存越多。默认是1
mbuf_size: Mbuf的大小。默认是512
noreply: boolean。决定是否要检测目标redis的回复。默认是false。
source_safe: boolean。是否保护源redis的内存安全。如果设置为true,那么该工具保证一台机器上同一时刻只有一个redis在生成rdb文件。除此之外,设置‘source_safe:true’时,所使用的线程可能会比你设置的要少。默认是true
dir: 工作目录,用于存储文件(例如rdb文件)。默认是当前目录。
filter: 过滤key,如果不匹配表达式,则不迁移。表达式Glob-style(通配符)。默认是空。
filter支持通配符表达式:
h?llo 匹配 hello, hallo 和 hxllo
h*llo 匹配 hllo 和 heeeello
h[ae]llo 匹配 hello 和 hallo, 不匹配 hillo
h[^e]llo 匹配 hallo, hbllo, … 不匹配 hello
h[a-b]llo 匹配 hallo 和 hbllo
三、开始迁移
注意 : 建议配置文件直接使用根目录下的 rmt.conf , 并且执行也是在根目录下执行 , 比如 :
# 开始运行 ./src/redis-migrate-tool -c rmt.conf -o log -d
自写其他配置文件 , 使用-c加载 , 有时候会出现无法加载的情况 , 不知道是不是bug
四、查看迁移情况
软件的原理是自己创建一个redis从库, 然后作为从库进行主从迁移 ,
所以根据此原理 , 可用redis-cli进入临时库 , 进行数据查询
# 使用redis-cli进入临时库进行查看 redis-cli -h 127.0.0.1 -p 8888 127.0.0.1:8888> info
info命令响应介绍:
Server:
Clients:
version: redis-migrate-tool版本号
os:操作系统名称
multiplexing_api: 多路复用API
gcc_version: gcc版本
process_id: redis-migrate-tool的进程id
tcp_port: redis-migrate-tool监听的tcp端口
uptime_in_seconds: redis-migrate-tool运行的时长。单位秒。
uptime_in_days: redis-migrate-tool运行的时长。单位天。
config_file: redis-migrate-tool配置文件的名称
connected_clients: 当前连接的客户端数量
max_clients_limit: 允许同时连接的最大客户端数量
total_connections_received: 迄今为止接收的连接数量的总数
Group:
source_nodes_count: 源redis的节点数量
target_nodes_count: 目标redis的节点数量
Stats:
all_rdb_received: 是否所有源节点的rdb都已接收完毕。
all_rdb_parsed: 是否所有的源节点rdb文件都已经解析完毕。
all_aof_loaded: 是否所有的源节点aof文件都已经加载完毕。
rdb_received_count: 已经接收源redis节点rdb文件的个数。
rdb_parsed_count: 已经完成解析rdb的个数。
aof_loaded_count: 已经加载完aof的个数。
total_msgs_recv: 从源redis接收到的消息总数。
total_msgs_sent: 发送给目标redis,并已经收到相应的的消息总数。
total_net_input_bytes: 从源redis接收到的数据总大小
total_net_output_bytes: 发送给目标redis的数据总大小
total_net_input_bytes_human: 和total_net_input_bytes相同,转化成可读的格式
total_net_output_bytes_human: 和total_net_output_bytes相同,转化为可读的格式
total_mbufs_inqueue: 来自源redis的mbufs的缓存数据(不包括rdb数据)
total_msgs_outqueue: 待发送给目标redis和已经发送等待响应的消息总数
五、迁移异常处理及验证
停止迁移 : 直接把临时库停止即可
$redis-cli -h 127.0.0.1 -p 8888 127.0.0.1:8888> shutdown OK
shutdown参数 : [second | asap]
- seconds: 在redis-migrate-tool退出之前,它把缓冲区的数据发送给目标redis最多用的时长(秒)。默认是10s
- asap: 不关心缓冲区的数据,直接退出。
该命令会干下面几件事:
- 停止从源redis复制数据
- 试图发送redis-migrate-tool缓冲区中的数据给目标集群
- 停止redis-migrate-tool并退出
验证 :
# 验证传输情况 src/redis-migrate-tool -c rmt.conf -o log -C redis_check