手把手教你做 Redis 雙向數據同步

来源:https://www.cnblogs.com/clougence/archive/2023/08/18/redis_loop_sync.html
-Advertisement-
Play Games

本文主要介紹如何使用 CloudCanal 構建生產級穩定性的 Redis 雙向數據同步,具備版本相容全面、功能細節豐富自然等特點。 ...


簡述

本文主要介紹 CloudCanal 如何做 Redis 雙向同步並防迴圈,方案特點包括:

  • 支持 Redis 單節點、主備、分片集群
  • 支持數據初始化防迴圈
  • 支持防迴圈輔助指令超時或永不超時設置

技術點

防迴圈事件

CloudCanal Redis 雙向同步採用輔助指令進行迴圈判定,當收到正常指令,計算其hash值,構建輔助指令key,反向查詢輔助指令是否存在,如果存在則為迴圈,過濾即可。

對於輔助指令對端寫入以及源端查詢,CloudCanal 進行了批量和多線程優化,同步性能得到有效提升。

防迴圈相容 分片集群、單節點、主備節點任意組合之間的數據遷移同步。

單任務多節點事件訂閱

Redis 集群普遍具備多個節點,為了簡化任務配置,CloudCanal 採用單任務多 Redis 節點訂閱方式,實現數據遷移和同步,整個過程更加便利可靠。

操作示例

準備 CloudCanal

添加數據源

  • 本案例採用 阿裡云云市場購買的 2 個 Redis 集群, 均位於杭州區域

  • 登錄 CloudCanal 平臺 ,數據源管理 -> 添加數據源 , 添加 2 個 Redis 集群

  • 建議對數據源進行描述修改,防止配置正反鏈路時,識別錯資料庫

    redis_loop_ds

創建正向同步任務

  • 任務管理->新建任務

  • 雙向同步中,正向任務一般指源端有數據,目標端無數據的鏈路,涉及對端數據初始化

  • 第一個頁面,選擇源端和目標端數據源和相關信息,點擊下一步

    redis_loop_create_1

  • 第二個頁面

    • 選擇 數據同步,並且勾選 全量數據初始化
    • 置灰自動啟動,以便創建任務後設置雙向同步參數
    • 點擊 下一步

    redis_loop_create_2

  • 第三個頁面,點擊確認創建

  • 任務詳情 -> 參數設置

    • 設置源端數據源配置 deCycle 參數為 true
    • 設置源端數據源配置 deCycleEventExpireSec 參數為 1200 秒 (防迴圈輔助指令超時事件,超過後防迴圈即無效)
    • 生效配置並啟動

    redis_loop_create_3

  • 等待正向同步任務初始化完數據並正常同步

    此處不建議在正向同步任務創建後立即創建反向任務,涉及到 repl-backlog-size 設置不足時,反向任務啟動強制走 FULL SYNC 導致新數據被老數據覆蓋問題

    redis_loop_forward_job

創建反向同步任務

  • 任務管理->新建任務

  • 第一個頁面,選擇源端和目標端選擇數據源(請和正向任務所選數據源對調)和相關信息,點擊下一步

    redis_loop_create_reverse_1

  • 第二個頁面

    • 選擇 數據同步,並去除全量數據初始化勾選
    • 置灰自動啟動,以便創建任務後設置雙向同步參數
    • 點擊 下一步

    redis_loop_create_reverse_2

  • 第三個頁面,點擊確認創建

  • 任務詳情 -> 參數設置

    • 設置源端數據源配置 deCycle 參數為 true , deCycleEventExpireSec 參數為 1200 秒
    • 生效配置並啟動

    redis_loop_create_reverse_3

  • 任務正常運行

    redis_loop_reverse_job

測試

  • 源端資料庫做數據變更,正向任務監控有變更,反向任務沒有(即無迴圈)
    redis_loop_forward_gen_data
    redis_loop_forward_gen_data_src
    redis_loop_forward_gen_data_dst

  • 目標端資料庫做數據變更,反向任務監控有變更,正向任務沒有(即無迴圈)
    redis_loop_reverse_gen_data
    redis_loop_reverse_gen_data_src
    redis_loop_reverse_gen_data_dst

  • 等待兩邊防迴圈輔助指令過期,檢查數據一致

    • 源端

    redis_loop_src_final

    • 目標端

    redis_loop_dst_final

常見問題

目前遺留的問題

  • 對於主備切換或者位點過老導致 FULL SYNC 控制還不夠精準,存在因全量遷移導致老數據覆蓋新數據問題
  • 防迴圈指令目前較有限: FULL DUMP 、 SET 、 HSET 、DEL,後續需要豐富常見指令防迴圈

總結

本文簡單介紹瞭如何使用 CloudCanal 構建 Redis 雙向同步,助力用戶實現異地多活、災備業務目標。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • ## 引言 今天在做一個設置文件夾路徑的功能,就是一個文本框,加個按鈕,點擊按鈕,彈出 `FolderBrowserDialog` 再選擇文件夾路徑,簡單做法,可以直接 `StackPanel` 橫向放置一個 `TextBox` 和一個 `Image Button`,然後點擊按鈕在 後臺代碼中給 ` ...
  • # Unity 編輯器資源導入處理函數 OnPreprocessTexture 用法 [![https://github.com/AlianBlank/download.unity.com](https://img2023.cnblogs.com/other/406187/202308/406187 ...
  • 他媽的!!!就因為這破事導致我浪費了兩天的時間!!! 都是基礎不扎實的鍋,導致我沒能第一時間想到問題的關鍵 好了,平復一下心情,快速的寫一篇博客來記錄這個叼問題 ## 解決方法 先把結論放在這裡:用`extern "C" {}`把中斷函數包起來 ```C++ // 就像這樣 extern "C" { ...
  • ansible 是用來自動化管理遠程操作系統的工具. ansible的三要素: `控制節點` , `被控節點`, `資產清單` ### 安裝 ansible 可以通過pip直接安裝 ```bash python3 -m pip install ansible --user ``` ### 快速入門 ...
  • 這裡的使用場景是在ubuntu x64上編譯arm程式,需要一個開發環境,而最省心的方式就是自己做一個arm環境的chroot鏡像,然後自由用apt-get安裝依賴,然後編譯程式。所以這裡就以製作arm鏡像為例。 在我們開始之前,我們需要瞭解一下ARM的幾種架構: armel(abi):這個是老架構 ...
  • ## Ansible的安裝及簡單使用 ## #### 一.Ubuntu安裝Ansible ```shell sudo apt update sudo apt install ansible #使用以下命令檢查安裝是否成功: ansible --version ``` ![image-20230817 ...
  • # 一、準備工作 ## 1、配置yum阿裡鏡像源 * 查看yum當前配置的倉庫,如果yum配置的不是阿裡雲源,請配置阿裡雲源。 ```shell yum repolist all ``` * 驗證是否能ping通阿裡雲 ```shell # 如果不能ping通可能是DNS沒有配置 ping mirr ...
  • 本文分享自華為雲社區《【手把手帶你玩轉HetuEngine】(三)HetuEngine資源規劃》,作者: HetuEngine九級代言 。 HetuEngine支持在服務層角色實例和計算實例兩個維度進行資源規劃,並且支持在高併發場景下通過啟動多個計算實例進行負載分擔和均衡,從而滿足各種業務場景下的資 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...