最新消息:

redis-shake一款优秀的redis数据同步工具

Linux ipcpu 1230浏览 0评论

一、概述

redis-shake是阿里云Redis&MongoDB团队开源的用于redis数据同步的工具。
目前在我司线上运行过数次,对于数据迁移非常方便,极力推荐。

二、基本功能

redis-shake是基于redis-port(codis团队作品,目前停止开发)基础上进行改进的一款产品。它支持解析、恢复、备份、同步四个功能。

恢复restore:将RDB文件恢复到目的redis数据库。
备份dump:将源redis的全量数据通过RDB文件备份起来。
解析decode:对RDB文件进行读取,并以json格式解析存储。
同步sync:支持源redis和目的redis的数据同步,支持全量和增量数据的迁移,支持从云下到阿里云云上的同步,也支持云下到云下不同环境的同步,支持单节点、主从版、集群版之间的互相同步。需要注意的是,如果源端是集群版,可以启动一个RedisShake,从不同的db结点进行拉取,同时源端不能开启move slot功能;对于目的端,如果是集群版,写入可以是1个或者多个db结点。
同步rump:支持源redis和目的redis的数据同步,仅支持全量的迁移。采用scan和restore命令进行迁移,支持不同云厂商不同redis版本的迁移。

三、支持的redis版本情况

支持2.8-5.0版本的同步。
支持codis。
支持云下到云上,云上到云上,云上到云下(阿里云目前支持主从版),其他云到阿里云等链路,帮助用户灵活构建混合云场景。

四、基本原理

redis-shake的基本原理就是模拟一个从节点加入源redis集群,首先进行全量拉取并回放,然后进行增量的拉取(通过psync命令)。如下图所示

如果源端是集群模式,只需要启动一个redis-shake进行拉取,同时不能开启源端的move slot操作。如果目的端是集群模式,可以写入到一个结点,然后再进行slot的迁移,当然也可以多对多写入。
目前,redis-shake到目的端采用单链路实现,对于正常情况下,这不会成为瓶颈,但对于极端情况,qps比较大的时候,此部分性能可能成为瓶颈,后续我们可能会计划对此进行优化。另外,redis-shake到目的端的数据同步采用异步的方式,读写分离在2个线程操作,降低因为网络时延带来的同步性能下降。

五、安装和使用

github地址 https://github.com/alibaba/RedisShake
下载对应的版本就可以运行。
使用时,现编写好配置文件,然后运行即可。

./redis-shake -type=sync -conf=../conf/redis-shake.conf

以最常用的sync模式为例,配置文件如下

# id唯一标识一次同步进程
id=redis-shake
# source相关配置
source.type=standalone
source.address=10.xx.xx.xx:6379
source.password_raw={password}
source.auth_type = auth

target.type=standalone
target.address=10.xx.xx.xx:6379
target.password_raw={password}
target.auth_type = auth
# 在rdb全量同步阶段,如果目标redis已经存在对应的key时是否覆盖,如果为false就抛异常
rewrite = true

# 是否做metric统计,建议设置为true,如果设置为false,/metric中的部分参数的值就一直是0
metric = true

提示:sync模式,就是全量同步(full)和增量同步(increment),增量同步是实时的,所以进程是一直存在的。sync模式原理图如下

六、性能

全量同步阶段并发执行,增量同步阶段异步执行,能够达到毫秒级别延迟(取决于网络延迟)。同时,我们还对大key同步进行分批拉取,优化同步性能。

七、监控

   用户可以通过我们提供的restful拉取metric来对redis-shake进行实时监控:curl 127.0.0.1:9320/metric。

八、校验

   如何校验同步的正确性?可以采用阿里开源的redis-full-check,具体原理可以参考这篇博客。

转载请注明:IPCPU-网络之路 » redis-shake一款优秀的redis数据同步工具

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址