簡(jiǎn)述
本文主要介紹 CloudCanal 如何做 Redis 雙向同步并防循環(huán),方案特點(diǎn)包括:
- 支持 Redis 單節(jié)點(diǎn)姨蝴、主備奈应、分片集群
- 支持?jǐn)?shù)據(jù)初始化防循環(huán)
- 支持防循環(huán)輔助指令超時(shí)或永不超時(shí)設(shè)置
技術(shù)點(diǎn)
防循環(huán)事件
CloudCanal Redis 雙向同步采用輔助指令進(jìn)行循環(huán)判定惩琉,當(dāng)收到正常指令,計(jì)算其hash值,構(gòu)建輔助指令key亡蓉,反向查詢輔助指令是否存在录豺,如果存在則為循環(huán),過(guò)濾即可盖文。
對(duì)于輔助指令對(duì)端寫入以及源端查詢嘱蛋,CloudCanal 進(jìn)行了批量和多線程優(yōu)化,同步性能得到有效提升五续。
防循環(huán)兼容 分片集群洒敏、單節(jié)點(diǎn)、主備節(jié)點(diǎn)任意組合之間的數(shù)據(jù)遷移同步返帕。
單任務(wù)多節(jié)點(diǎn)事件訂閱
Redis 集群普遍具備多個(gè)節(jié)點(diǎn)桐玻,為了簡(jiǎn)化任務(wù)配置,CloudCanal 采用單任務(wù)多 Redis 節(jié)點(diǎn)訂閱方式荆萤,實(shí)現(xiàn)數(shù)據(jù)遷移和同步镊靴,整個(gè)過(guò)程更加便利可靠。
操作示例
準(zhǔn)備 CloudCanal
- 下載安裝 CloudCanal 私有部署版本
添加數(shù)據(jù)源
本案例采用 阿里云云市場(chǎng)購(gòu)買的 2 個(gè) Redis 集群, 均位于杭州區(qū)域
登錄 CloudCanal 平臺(tái) 链韭,數(shù)據(jù)源管理 -> 添加數(shù)據(jù)源 , 添加 2 個(gè) Redis 集群
-
建議對(duì)數(shù)據(jù)源進(jìn)行描述修改偏竟,防止配置正反鏈路時(shí),識(shí)別錯(cuò)數(shù)據(jù)庫(kù)
創(chuàng)建正向同步任務(wù)
任務(wù)管理->新建任務(wù)
雙向同步中敞峭,正向任務(wù)一般指源端有數(shù)據(jù)踊谋,目標(biāo)端無(wú)數(shù)據(jù)的鏈路,涉及對(duì)端數(shù)據(jù)初始化
-
第一個(gè)頁(yè)面旋讹,選擇源端和目標(biāo)端數(shù)據(jù)源和相關(guān)信息殖蚕,點(diǎn)擊下一步
-
第二個(gè)頁(yè)面
- 選擇 數(shù)據(jù)同步轿衔,并且勾選 全量數(shù)據(jù)初始化
- 置灰自動(dòng)啟動(dòng),以便創(chuàng)建任務(wù)后設(shè)置雙向同步參數(shù)
- 點(diǎn)擊 下一步
第三個(gè)頁(yè)面,點(diǎn)擊確認(rèn)創(chuàng)建
-
任務(wù)詳情 -> 參數(shù)設(shè)置
- 設(shè)置源端數(shù)據(jù)源配置 deCycle 參數(shù)為 true
- 設(shè)置源端數(shù)據(jù)源配置 deCycleEventExpireSec 參數(shù)為 1200 秒 (防循環(huán)輔助指令超時(shí)事件睦疫,超過(guò)后防循環(huán)即無(wú)效)
- 生效配置并啟動(dòng)
-
等待正向同步任務(wù)初始化完數(shù)據(jù)并正常同步
此處不建議在正向同步任務(wù)創(chuàng)建后立即創(chuàng)建反向任務(wù)害驹,涉及到 repl-backlog-size 設(shè)置不足時(shí),反向任務(wù)啟動(dòng)強(qiáng)制走 FULL SYNC 導(dǎo)致新數(shù)據(jù)被老數(shù)據(jù)覆蓋問題
創(chuàng)建反向同步任務(wù)
任務(wù)管理->新建任務(wù)
-
第一個(gè)頁(yè)面蛤育,選擇源端和目標(biāo)端選擇數(shù)據(jù)源(請(qǐng)和正向任務(wù)所選數(shù)據(jù)源對(duì)調(diào))和相關(guān)信息宛官,點(diǎn)擊下一步
-
第二個(gè)頁(yè)面
- 選擇 數(shù)據(jù)同步,并去除全量數(shù)據(jù)初始化勾選
- 置灰自動(dòng)啟動(dòng)瓦糕,以便創(chuàng)建任務(wù)后設(shè)置雙向同步參數(shù)
- 點(diǎn)擊 下一步
第三個(gè)頁(yè)面底洗,點(diǎn)擊確認(rèn)創(chuàng)建
-
任務(wù)詳情 -> 參數(shù)設(shè)置
- 設(shè)置源端數(shù)據(jù)源配置 deCycle 參數(shù)為 true , deCycleEventExpireSec 參數(shù)為 1200 秒
- 生效配置并啟動(dòng)
-
任務(wù)正常運(yùn)行
測(cè)試
-
源端數(shù)據(jù)庫(kù)做數(shù)據(jù)變更,正向任務(wù)監(jiān)控有變更咕娄,反向任務(wù)沒有(即無(wú)循環(huán))
-
目標(biāo)端數(shù)據(jù)庫(kù)做數(shù)據(jù)變更亥揖,反向任務(wù)監(jiān)控有變更,正向任務(wù)沒有(即無(wú)循環(huán))
- 等待兩邊防循環(huán)輔助指令過(guò)期谭胚,檢查數(shù)據(jù)一致
-
源端
-
目標(biāo)端
-
常見問題
目前遺留的問題
- 對(duì)于主備切換或者位點(diǎn)過(guò)老導(dǎo)致 FULL SYNC 控制還不夠精準(zhǔn)徐块,存在因全量遷移導(dǎo)致老數(shù)據(jù)覆蓋新數(shù)據(jù)問題
- 防循環(huán)指令目前較有限: FULL DUMP 、 SET 灾而、 HSET 胡控、DEL,后續(xù)需要豐富常見指令防循環(huán)
總結(jié)
本文簡(jiǎn)單介紹了如何使用 CloudCanal 構(gòu)建 Redis 雙向同步旁趟,助力用戶實(shí)現(xiàn)異地多活昼激、災(zāi)備業(yè)務(wù)目標(biāo)。