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

 

posted on 2023-11-08 16:02  太清  阅读(356)  评论(0编辑  收藏  举报