前言
一个 Redis 需要从另一个 Redis 数据同步 或者 数据迁移,这种一般怎么做?
数据迁移 这种一般比较好做,可以直接从源redis导出rdb,再把rdb文件导入目标redis。但是如果需要实时增量同步就比较困难,有什么好的方法解决这种需求,这里介绍下阿里云开源 redis-shake 工具。
基本功能
redis-shake:是我们基于redis-port基础上进行改进的一款产品。它支持解析、恢复、备份、同步四个功能。以下主要介绍同步sync。
基本原理
redis-shake 的基本原理就是模拟一个从节点加入源redis集群,首先进行全量拉取并回放,然后进行增量的拉取(通过psync命令)。如下图所示:
如果源端是集群模式,只需要启动一个redis-shake进行拉取,同时不能开启源端的move slot操作。如果目的端是集群模式,可以写入到一个结点,然后再进行slot的迁移,当然也可以多对多写入。
目前,redis-shake到目的端采用单链路实现,对于正常情况下,这不会成为瓶颈,但对于极端情况,qps比较大的时候,此部分性能可能成为瓶颈,后续我们可能会计划对此进行优化。另外,redis-shake到目的端的数据同步采用异步的方式,读写分离在2个线程操作,降低因为网络时延带来的同步性能下降。
高效性
全量同步阶段并发执行,增量同步阶段异步执行,能够达到毫秒级别延迟(取决于网络延迟)。同时,我们还对大key同步进行分批拉取,优化同步性能。
用户可以通过我们提供的restful拉取metric来对redis-shake进行实时监控:curl 127.0.0.1:9320/metric。
校验
如何校验同步的正确性?可以采用我们开源的 redis-full-check:https://github.com/aliyun/redis-full-check?spm=a2c6h.12873639.0.0.4b8974955p9YxV 。
支持版本
注意事项
说明:源和目标库中,未设置过期机制或未过期的Key数量是一致的。
安装 Redis-shake
- # 下载 Redis-shake 安装包
- $ wget 'http://docs-aliyun.cn-hangzhou.oss.aliyun-inc.com/assets/attach/120287/cn_zh/1608173646665/redis-shake-v2.0.3.tar.gz'
- # 解压Redis-shake 安装包
- $ tar xzf redis-shake-v2.0.3.tar.gz
- # 修改配置文件
- $ cd redis-shake-v2.0.3/
- $ vim redis-shake.conf
- # 启动Redis-shake,开始执行数据迁移
- $ ./redis-shake.linux -type=sync -conf=redis-shake.conf
参考链接
https://developer.aliyun.com/article/691794
https://help.aliyun.com/document_detail/117311.html?spm=a2c4g.11186623.6.651.57fc1516WTPTT9
Greediness(贪婪型):最大匹配 X、X*、X+、X{n,} 是最大匹配。例如你要用 “....
ajax 实现三级联动,相当于写了一个小插件,用的时候直接拿过来用就可以了,这里...
3月22日消息 外媒 Winfuture 报道,此前微软面向 Insider 预览用户公布了 Window...
从另一台机器上复制过来的项目,由于两台机器的库目录不一致,导致了stdio.h等很...
1 . 目标 演示下图的git reset 各选项的效果。 2. Git Reset操作说明 图中说明:...
这些日子一直在简书上使用markdown写作,已经渐渐的痴迷于这种简洁纯粹的写作方...
Go原生就支持连接数据库,所以在使用 Golang 开发时,当需要数据库交互时,即可...
橡皮擦一个逗趣的互联网高级网虫。 观前提醒本篇文章涉及知识点巨大建议先收藏再...
本文实例讲述了正则表达式中的操作符及说明。分享给大家供大家参考,具体如下: ...
2月23日消息 据外媒 Windows Latest 今日报道,借助 Windows 10 Sun Valley 更新...