简述
本文次要介绍 CloudCanal 如何做 Redis 双向同步并防循环, 计划特点包含:
- 反对 Redis 单节点、主备、分片集群
- 反对数据初始化防循环
- 反对防循环辅助指令超时或永不超时设置
技术点
防循环事件
CloudCanal Redis 双向同步采纳辅助指令进行循环断定,当收到失常指令,计算其 hash 值,构建辅助指令 key,反向查问辅助指令是否存在,如果存在则为循环,过滤即可。
对于辅助指令对端写入以及源端查问,CloudCanal 进行了批量和多线程优化,同步性能失去无效晋升。
防循环兼容 分片集群、单节点、主备节点任意组合之间的数据迁徙同步。
单任务多节点事件订阅
Redis 集群广泛具备多个节点,为了简化工作配置,CloudCanal 采纳单任务多 Redis 节点订阅形式,实现数据迁徙和同步,整个过程更加便当牢靠。
操作示例
筹备 CloudCanal
- 下载安装 CloudCanal 公有部署版本
增加数据源
- 本案例采纳 阿里云云市场购买的 2 个 Redis 集群, 均位于杭州区域
- 登录 CloudCanal 平台,数据源治理 -> 增加数据源 , 增加 2 个 Redis 集群
-
倡议对数据源进行形容批改,避免配置正反链路时,辨认错数据库
创立正向同步工作
- 工作治理 -> 新建工作
- 双向同步中,正向工作个别指源端有数据,指标端无数据的链路,波及对端数据初始化
-
第一个页面,抉择源端和指标端数据源和相干信息,点击 下一步
-
第二个页面
- 抉择 数据同步 ,并且勾选 全量数据初始化
- 置灰主动启动,以便创立工作后设置双向同步参数
- 点击 下一步
- 第三个页面, 点击 确认创立
-
工作详情 -> 参数设置
- 设置源端数据源配置 deCycle 参数为 true
- 设置源端数据源配置 deCycleEventExpireSec 参数为 1200 秒 (防循环辅助指令超时事件,超过后防循环即有效)
- 失效配置并启动
-
期待正向同步工作初始化完数据并失常同步
此处不倡议在正向同步工作创立后立刻创立反向工作,波及到 repl-backlog-size 设置有余时,反向工作启动强制走 FULL SYNC 导致新数据被老数据笼罩问题
创立反向同步工作
- 工作治理 -> 新建工作
-
第一个页面,抉择源端和指标端抉择数据源(请和正向工作所选数据源对调 )和相干信息,点击 下一步
-
第二个页面
- 抉择 数据同步 ,并去除 全量数据初始化 勾选
- 置灰主动启动,以便创立工作后设置双向同步参数
- 点击 下一步
- 第三个页面,点击 确认创立
-
工作详情 -> 参数设置
- 设置源端数据源配置 deCycle 参数为 true , deCycleEventExpireSec 参数为 1200 秒
- 失效配置并启动
-
工作失常运行
测试
- 源端数据库做数据变更,正向工作监控有变更,反向工作没有(即无循环)
- 指标端数据库做数据变更,反向工作监控有变更,正向工作没有(即无循环)
-
期待两边防循环辅助指令过期,检查数据统一
- 源端
- 指标端
常见问题
目前遗留的问题
- 对于主备切换或者位点过老导致 FULL SYNC 管制还不够精准,存在因全量迁徙导致老数据笼罩新数据问题
- 防循环指令目前较无限: FULL DUMP、SET、HSET、DEL,后续须要丰盛常见指令防循环
总结
本文简略介绍了如何应用 CloudCanal 构建 Redis 双向同步,助力用户实现异地多活、灾备业务指标。