本文主要介紹如何使用 CloudCanal 構建生產級穩定性的 Redis 雙向數據同步,具備版本相容全面、功能細節豐富自然等特點。 ...
簡述
本文主要介紹 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 雙向同步,助力用戶實現異地多活、災備業務目標。