簡述
Redis 是一個開源的高性能內(nèi)存數(shù)據(jù)庫功蜓,支持鍵值對和多種數(shù)據(jù)結(jié)構(gòu)(如字符串、列表宠蚂、集合式撼、哈希等),常用于緩存求厕、實時數(shù)據(jù)處理和分布式鎖著隆。它提供持久化、主從復制和高可用集群功能呀癣,適用于高并發(fā)低延遲場景美浦。
本文主要介紹如何通過 CloudCanal 實現(xiàn) Redis 到 Redis 數(shù)據(jù)遷移同步。
技術(shù)點
基于 PSync 協(xié)議同步
CloudCanal 基于 PSync 協(xié)議實現(xiàn) Redis 到 Redis 的數(shù)據(jù)同步项栏,同步流程如下:
- CloudCanal 與 Redis Master 建立 Socket 長連接浦辨。
- 發(fā)送 Auth 命令驗證身份(如果有)。
- CloudCanal 向 Redis Master 發(fā)送 PSync 命令沼沈,偽裝成一個 Redis Slave 節(jié)點流酬。
- Redis Master 節(jié)點持續(xù)向 CloudCanal 偽裝的 Redis Slave 節(jié)點推送 二進制數(shù)據(jù)流币厕。
- CloudCanal 將二進制數(shù)據(jù)流解析為 Redis 命令,發(fā)送給目標端執(zhí)行芽腾。
雙向同步防循環(huán)能力
CloudCanal 采用輔助命令實現(xiàn) Redis 之間的雙向同步防循環(huán)旦装。
當收到正常指令,CloudCanal 計算其 hash 值晦嵌,構(gòu)建輔助指令 Key同辣,反向查詢輔助指令是否存在,如果存在則為循環(huán)惭载。隨后旱函,CloudCanal 反向刪除對應輔助命令,如果刪除成功描滔,過濾即可棒妨。
對于對端寫入以及源端查詢輔助指令,CloudCanal 進行了批量和多線程優(yōu)化含长,同步性能得到有效提升券腔。
過濾超大 Key 能力
在實際的 Redis 業(yè)務使用中,由于歷史遺留問題或維護不當拘泞,可能會出現(xiàn)一些體積過大的 Key纷纫。
在數(shù)據(jù)同步場景下,這些超大 Key 容易引發(fā)任務同步異常陪腌。CloudCanal 提供了靈活的任務參數(shù)配置辱魁,支持過濾超出指定大小的 Key。
操作示例
步驟 1: 安裝 CloudCanal
請參考 全新安裝(Docker Linux/MacOS)诗鸭,下載安裝 CloudCanal 私有部署版本染簇。
步驟 2: 添加數(shù)據(jù)源
登錄 CloudCanal 控制臺,點擊 數(shù)據(jù)源管理 > 新增數(shù)據(jù)源 强岸。
步驟 3: 創(chuàng)建任務
點擊 同步任務 > 創(chuàng)建任務锻弓。
-
配置源和目標數(shù)據(jù)源。
- 選擇源和目標實例蝌箍,并分別點擊 測試連接青灼。
- 在源端實例下方 高級配置 中選擇 啟用 DB 映射 :是/否。當啟用 DB 映射時十绑,需要確保源端 Redis 實例與目標端 Redis 實例 DB 數(shù)量相同聚至。
選擇 數(shù)據(jù)同步 并勾選 全量初始化。
-
點擊 確認創(chuàng)建本橙。
任務創(chuàng)建過程將會進行一系列操作,點擊 同步設置 > 異步任務脆诉,找到任務的創(chuàng)建記錄并點擊 詳情 即可查看甚亭。
Redis 源端的任務創(chuàng)建會有以下幾個步驟:
- 分配任務執(zhí)行機器
- 創(chuàng)建任務狀態(tài)機
- 完成任務創(chuàng)建
-
等待任務自動流轉(zhuǎn)贷币。
當任務創(chuàng)建完成,CloudCanal 會自動進行任務流轉(zhuǎn)亏狰,其中的步驟包括:
- 全量數(shù)據(jù)遷移: 已存在的存量數(shù)據(jù)將會完整遷移到對端役纹。
- 增量數(shù)據(jù)同步: 增量數(shù)據(jù)將會持續(xù)地同步到對端數(shù)據(jù)庫,并且保持實時(秒級別延遲)暇唾。
總結(jié)
本文簡單介紹了如何使用 CloudCanal 進行 Redis 到 Redis 數(shù)據(jù)遷移同步促脉,打通數(shù)據(jù)流動的渠道,實現(xiàn)端到端的精準數(shù)據(jù)傳輸策州。