Redis迁移及数据同步(Redis-Shake)

redis-shake是阿里云Redis&MongoDB团队开源的用于redis数据同步的工具。它支持解析、恢复、备份、同步四个功能。

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

迁移同步是使用sync模式,可支持单节点(主从)-->单节点(主从)、单节点(主从)-->cluster、cluster-->cluster、cluster-->单节点(主从)等情况。

1.  下载

redis-shake的下载地址为:redis-shake下载地址。直接下载二进制包,可免编译直接使用,目前最新版本为1.6.23。

注:每次使用,请下载使用最新的版本。

2.  修改配置文件

默认sync模式只需要配置以下几个内容:

  • source.type: 源redis的类型,支持一下4种类型:
    standalone: 单db节点/主从版模式。
    sentinelsentinel模式。
    cluster: 集群模式。
    proxy: proxy模式。
  • source.address: 源redis的地址,从1.6版本开始支持集群版,不同的类型对应不同的地址:
    standalone模式下,需要填写单个db节点的地址,主从版需要输入master或者slave的地址。
    sentinel模式下,需要填写sentinel_master_name:master_or_slave@sentinel_cluster_addresssentinel_master_name表示sentinel配置下master的名字,master_or_slave表示从sentinel中选择的db是master还是slave,sentinel_cluster_address表示sentinel的单节点或者集群地址,其中集群地址以分号(;)分割。例如:mymaster:master@127.0.0.1:26379;127.0.0.1:26380
    cluster模式下,需要填写集群地址,以分号(;)分割。例如:10.1.1.1:20331;10.1.1.2:20441。支持自动发现机制,以@开头。
    proxy模式下,需要填写单个proxy的地址,此模式目前仅用于rump
  • source.password_raw:源redis的密码。
  • target.type: 目的redis的类型,与source.type一致。
  • target.address:目的redis的地址。从1.6版本开始支持集群版,不同的类型对应不同的地址。 
    standalone模式,参见source.address
    sentinel模式,需要填写sentinel_master_name@sentinel_cluster_addresssentinel_master_name表示sentinel配置下master的名字,sentinel_cluster_address表示sentinel的单节点或者集群地址,其中集群地址以分号(;)分割。例如:mymaster@127.0.0.1:26379;127.0.0.1:26380
    cluster模式,参见source.address
    proxy模式下,填写proxy的地址,如果是多个proxy,则round-robin循环负载均衡连接,保证一个源端db连接只会对应一个proxy。
  • target.password_raw:目的redis的密码。

配置完配置文件,然后以不同的模式启动即可:./redis-shake -conf=../conf/redis-shake.conf -type=sync

2.1 单个节点到单个节点配置举例。

  • source.type: standalone
  • source.address: 10.1.1.1:6379
  • source.password: 12345
  • target.type: standalone
  • target.address: 10.1.1.1:6379
  • target.password: 12345

2.2 集群版cluster到集群版cluster配置举例

  • source.type: cluster
  • source.address: 10.1.1.1:7000;10.1.1.2:7000;10.1.1.3:7000
  • source.password: 12345
  • target.type: cluster
  • target.address: 10.1.2.1:7000;10.1.2.1:7000;10.1.2.1:7000
  • target.password: 12345

  对于source.address或者target.address,用户可以启用自动发现机制,地址以'@'开头,redis-shake将会根据cluster nodes命令自动去探测有几个节点。

对于source.address,用户可以在'@'前面配置master(默认)或者slave表示分表从master或者slave进行拉取;对于target.address,只能是master或者不配置:

  • source.type: cluster
  • source.address: master@10.1.1.1:7000 # 将会自动探测到10.1.1.1:7000 集群下的所有节点,并从所有master进行拉取。
  • source.password: 12345
  • target.type: cluster
  • target.address: @10.1.2.1:7000 # 将会自动探测到10.1.2.1:7000 集群下的所有节点,并写入所有master。
  • target.password: 12345

3. 启动

转后台使用nohup启动:

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

 

4. 日志信息

日志文件在配置文件中的log.file配置,默认为同步分为三个阶段:

1) 等待源端save rdb完毕并从rdb头部读取size大小,日志如下:

2019/06/06 15:14:56 [INFO] dbSyncer[0] +
2019/06/06 15:14:57 [INFO] dbSyncer[0] -
2019/06/06 15:14:57 [INFO] dbSyncer[0] +

2) 全量同步阶段,显示百分比:

2019/06/06 15:15:41 [INFO] dbSyncer[0] total=924836132 -      9155943 [  0%]  entry=2109
2019/06/06 15:15:42 [INFO] dbSyncer[0] total=924836132 -     16107663 [  1%]  entry=4411
2019/06/06 15:15:43 [INFO] dbSyncer[0] total=924836132 -     22914262 [  2%]  entry=6750
2019/06/06 15:15:44 [INFO] dbSyncer[0] total=924836132 -     29707595 [  3%]  entry=9060
2019/06/06 15:15:45 [INFO] dbSyncer[0] total=924836132 -     35741354 [  3%]  entry=11067
2019/06/06 15:15:46 [INFO] dbSyncer[0] total=924836132 -     42911547 [  4%]  entry=13480

3)增量同步,出现字样sync rdb done:

2019/07/09 16:34:05 [INFO] dbSyncer[0] sync:  +forwardCommands=1      +filterCommands=0      +writeBytes=4
2019/07/09 16:34:06 [INFO] dbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2019/07/09 16:34:07 [INFO] dbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2019/07/09 16:34:08 [INFO] dbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2019/07/09 16:34:09 [INFO] dbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2019/07/09 16:34:10 [INFO] dbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0
2019/07/09 16:34:11 [INFO] dbSyncer[0] sync:  +forwardCommands=0      +filterCommands=0      +writeBytes=0

其中forwardCommands表示发送的命令个数,filterCommands表示过滤的命令个数,比如opinfo或者指定了filter都会被过滤,writeBytes表示发送的字节数。都为0表示源端没有数据变化。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redis-shake是一款基于Go语言开发的Redis数据迁移工具。它能够在不停机的情况下将Redis数据从一个节点迁移到另一个节点,支持集群、单机以及主从架构的数据迁移Redis-shake具有以下特点。 1. 快速高效:Redis-shake使用并行化的方式进行数据迁移,能够充分利用多核处理器和带宽资源,提供高性能的数据迁移速度。 2. 稳定可靠:Redis-shake经过了大规模的生产环境验证,已经得到了广泛的应用。它具备重试机制,能够自动处理网络中断等异常情况,保证数据迁移的稳定性和可靠性。 3. 灵活易用:Redis-shake支持多种数据源和数据目标的组合。它可以从Redis节点迁移到另一个Redis节点,也可以将数据迁移到其他存储系统,如MySQL、MongoDB等。同时,Redis-shake提供了丰富的配置选项,可以根据需要进行灵活配置和定制。 4. 兼容支持:Redis-shake能够兼容不同版本的Redis,包括Redis 2.x和Redis 3.x等。它支持迁移过程中的数据过滤、数据分片、数据压缩等功能,可以满足不同场景下的需求。 5. 开源免费:Redis-shake是一款开源工具,遵循Apache 2.0协议。它的源代码可以在GitHub上获取,用户可以基于其代码进行定制和扩展,且使用过程中没有任何费用。 总之,Redis-shake是一款强大且灵活的Redis数据迁移工具,通过它我们可以轻松实现Redis数据迁移和备份等操作,同时保证数据的一致性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值