Redis Input/Output Tools (RIOT) 工具是一款支持 Redis 和文件,数据库之间进行数据同步的工具,支持全量和增量同步。
RIOT 基于迁移数据的逻辑架构图如下:
RIOT 支持全量和增量迁移,从其逻辑架构图上来看,RIOT 使用生产者和消费者模型,全量迁移是基于 Redis 的 SCAN 功能,变量所有的key,然后获取键值对,放到后面的消费队列里面,写入到下游。
RIOT 工具的增量功能是基于 Redis 的键空间消息提醒(keyspace notification)功能,通过监听 源数据库的键值数据变化事件并解析该事件为对应的命令动作,在目标端执行该命令,以便达到增量迁移 key 的目的。
需要在测试机器上安装 java-1.8.0-openjdk, 然后上传并解压 RIOT 软件包。
sudo yum install -y java-1.8.0-openjdk
unzip riot-3.1.4.zip
cd riot-3.1.4/bin
./riot --help
RIOT 工具支持 Redis 到 Redis ,文件和 Redis, 数据库和 Redis 之间进行数据同步迁移,本文只基于 Redis 之间的数据迁移功能。其他功能大家有兴趣可以自己去探索。
Redis connection options
-a, --pass[=<password>] # 指定访问 Redis 的密码
-c, --cluster # 支持 cluster 模式,如果源或者目标库是 cluster 模式,需要指定该参数
-h, --hostname=<host> # 数据库 主机 ip/dns 地址
-n, --db=<db> # 同步数据库的编号,默认是 0
--no-auto-reconnect Disable auto-reconnect on connection loss.
-p, --port=<port> # 实例的端口号
--timeout=<sec> # Redis 命令的超时时间
-u, --user=<name> # 需要配置用户名和密码
--batch 指定批量获取 key的数量,默认是50
--mode 同步数据的默认,支持全量 和 增量 ,对比功能
基础迁移命令
riotreplicate--mode <snapshot|live|compare> [OPTIONS]
./riot -h 源ip -p port replicate -h 目标ip -p port [ --user=user_name --pass=password ] --mode live --progress log
SET name aliyun_poc
MSET key1 value1 key2 value2
SET number 0
INCR number
INCRBY number 10
DECR number
DECRBY number 10
LPUSH k1 v1 k2 v2 k3 v3
HMSET uid:1 name Tom age 15
HMSET uid:2 name Jerry age 13
SADD article:1 uid:1 article:1 uid:2
SADD article:1 uid:3
SREM article:1 uid:1
SMEMBERS article:1
SCARD article:1
ZADD user:score 80 "yangyi" 90 "zhangsan"
ZRANGE user:score 0 -1 WITHSCORES
SETBIT online 1001 1
PFADD user:visit 192.168.0.1 192.168.0.2 192.168.0.3
全量迁移
增量迁移
测试十多种数据类型,都能同步到目标端。