Skip to content

Latest commit

 

History

History
240 lines (145 loc) · 6.33 KB

README_ZH.md

File metadata and controls

240 lines (145 loc) · 6.33 KB

Redis GunYu

CI LICENSE release

简体中文 English

简介

redis-GunYu是一款redis数据治理工具,可以进行数据实时同步,数据迁移,备份、校验恢复,数据分析等等。

特性

数据实时同步

Redis-GunYu的实时同步功能矩阵

功能点 是否支持
断点续传 支持
源和目标集群slot不一致 支持
源或目标集群拓扑变化(扩容、迁移等) 支持
工具高可用 支持
数据过滤 支持
数据一致性 最终/弱

redis-GunYu还有一些其他优势,如下

  • 对稳定性影响更小
    • 复制优先级:可用指定优先从从库进行复制或主库复制
    • 本地缓存 + 断点续传:最大程度减少对源端redis的影响
    • 对RDB中的大key进行拆分同步
    • 更低的复制延迟:在保证一致性的前提下,并发地进行数据回放,参考复制延迟指标
  • 数据安全性与高可用
    • 本地缓存支持数据校验
    • 工具高可用 : 支持主从模式,以最新记录进行自主选举,自动和手动failover;工具本身P2P架构,将宕机影响降低到最小
  • 对redis限制更少
    • 支持源和目标端不同的redis部署方式,如cluster或单实例
    • 兼容源和目的redis不同版本,支持从redis4.0到redis7.2,参考测试
  • 数据一致性策略更加灵活,自动切换
    • 当源端和目标端分片信息一致时,采用伪事务方式批量写入,实时更新偏移,最大可能保证一致性
    • 当源端和目标端分片不一致时,采用定期更新偏移
  • 运维更加友好
    • API:可以通过http API进行运维操作,如强制全量复制,同步状态,暂停同步等等
    • 监控:监控指标更丰富,如时间与空间维度的复制延迟指标
    • 数据过滤:可以对某些正则key,db,命令等进行过滤
    • 拓扑变化监控 : 实时监听源和目标端redis拓扑变更(如加减节点,主从切换等等),以更改一致性策略和调整其他功能策略

RDB导入到redis

此功能是解析RDB文件,然后将数据回放到正在运行的redis中,可以对RDB文件进行过滤。

其他

其他功能,仍在开发中。

产品比较

从产品需求上,对redis-GunYu和几个主流工具的实时同步功能进行比较

功能点 redis-shake/v2 DTS xpipe redis-GunYu
断点续传 Y(无本地缓存) Y Y Y
支持分片不对称 N Y N Y
拓扑变化 N N N Y
高可用 N N Y Y
数据一致性 最终 最终(分片对称) + 弱(不对称)

实现

redis-GunYu同步功能的技术实现如图所示,具体技术原理请见技术实现

架构图

快速开始

安装

可以自行编译,也可以直接运行容器

下载二进制

编译源码

先确保已经安装Go语言,配置好环境变量

git clone https://github.com/mgtv-tech/redis-gunyu.git
cd redis-GunYu

## 如果需要,添加代理
export GOPROXY=https://goproxy.cn,direct

make

在本地生成redisGunYu二进制文件。

使用

redisGunYu不同的功能以子命令的方式来启动,子命令有

  • sync : 实时同步功能
  • rdb : rdb相关功能

我们以使用同步功能为例

配置文件的方式启动

./redisGunYu -conf ./config.yaml -cmd=sync

-cmd=sync 可忽略

命令行传递参数的方式启动

./redisGunYu --sync.input.redis.addresses=127.0.0.1:6379 --sync.output.redis.addresses=127.0.0.1:16379

以容器方式运行

docker run mgtvtech/redisgunyu:latest --sync.input.redis.addresses=172.10.10.10:6379 --sync.output.redis.addresses=172.10.10.11:6379


# 如果本机测试,则可以以host网络模式启动容器`--network=host`,使redisGunYu能够和redis进行网络通信
docker run --network=host mgtvtech/redisgunyu:latest --sync.input.redis.addresses=127.0.0.1:6700 --sync.output.redis.addresses=127.0.0.1:6710

运行demo

启动demo服务

docker run --rm -p 16379:16379 -p 26379:26379 -p 18001:18001 mgtvtech/redisgunyudemo:latest
  • 源redis : 端口16379
  • 目标redis : 端口26379
  • 同步工具: 端口 18001

目的redis

redis-cli -p 26379
127.0.0.1:26379> monitor

在目的redis-cli中输入monitor

源redis

连接到源redis,写入一个key,同步工具会将命令同步到目的redis,查看redis-cli连接到的源redis输出

redis-cli -p 16300
127.0.0.1:16379> set a 1

检查状态

curl http://localhost:18001/syncer/status

检查同步工具运行状态

文档

贡献

欢迎大家一起来完善redis-GunYu。如果您有任何疑问、建议或者想添加其他功能,请直接提交issue或者PR。

请按照以下步骤来提交PR:

  • 克隆仓库
  • 创建一个新分支:如果是新功能分支,则命名为feature-xxx;如果是修复bug,则命名为bug-xxx
  • 在PR中详细描述更改的内容

许可

redis-GunYu是基于Apache2.0许可的,请见LICENSE

联系

如果您有任何问题,请联系ikenchina@gmail.com