簡介 CloudCanal 推出 跨互聯網安全數據同步 方案之後,有一些商業客戶落地,效果良好,不過客戶也反饋了一些改進和新需求,其中最大的一個需求即雙向同步防迴圈。 近期 CloudCanal 版本支持了這個特性,整體方案進一步升級,最大特點包括: 兩端資料庫完全不開放公網埠 兩端資料庫可雙向同 ...
簡介
CloudCanal 推出 跨互聯網安全數據同步 方案之後,有一些商業客戶落地,效果良好,不過客戶也反饋了一些改進和新需求,其中最大的一個需求即雙向同步防迴圈。
近期 CloudCanal 版本支持了這個特性,整體方案進一步升級,最大特點包括:
- 兩端資料庫完全不開放公網埠
- 兩端資料庫可雙向同步,無迴圈
- 兩端資料庫元數據可映射
- 具備傳輸安全和鑒權
- 不依賴消息等軟體
技術點
防迴圈
我們復用了 CloudCanal 處理 MySQL 雙向同步防迴圈邏輯, 寫入對端時, SQL 自動帶上 /*ccw*/ 標記。
再打開 MySQL binlog_rows_query_log_events 參數, 將 binlog DML 事件順序變成 QueryEvent(TxBegin)、TableMapEvent、RowsQueryLogEvent、WriteRowEvent(IUD)、QueryEvent(TxEnd)。
其中 RowsQueryLogEvent 中的 SQL 如果帶有 /*ccw*/ ,則為迴圈事件, 進行過濾。從而達到防迴圈目的。
操作示例
數據源準備
-
使用阿裡雲杭州和上海 RDS for MySQL
- 打開 binlog_rows_query_log_events 參數,binlog 事件帶上原始 SQL
- 資料庫不開公網埠
- 數據走互聯網, 採用 HTTPS 傳輸和用戶名密碼認證。
-
初始化兩邊資料庫表結構(如需要)
CloudCanal 準備
-
杭州環境部署 CloudCanal ,併購買 RDS for MySQL
-
上海環境部署 CloudCanal , 併購買 RDS for MySQL
-
CloudCanal docker 安裝包解壓後 ,需 修改 docker-compose.yml 埠映射再安裝/升級,以 18443 埠為例
-
開放 ECS 安全組相關埠,以便遠程連接,以 18443 埠為例
添加 Tunnel 數據源
-
分別在 杭州 和 上海 CloudCanal 配置 Tunnel 數據源
-
因為雙向同步,所以兩個環境需要配置各自內網的 Tunnel 數據源和對方公網 Tunnel 數據源
-
杭州數據源列表
-
上海數據源列表
為 Tunnel 初始化元數據
-
杭州 創建兩個 MySQL -> Tunnel 結構遷移,並完成
-
上海 創建兩個 MySQL -> Tunnel 結構遷移,並完成
任務創建
-
使用 4 條同步任務進行雙向同步,任務列表和能力如下
任務 數據源 任務參數 杭州任務 A 杭州 Tunnel(公網) -> 杭州 MySQL 杭州任務 B 杭州 MySQL -> 上海 Tunnel(公網) deCycle=true, 過濾迴環事件 上海任務 C 上海 Tunnel(公網) -> 上海 MySQL 上海任務 D 上海 MySQL -> 杭州 Tunnel(公網) deCycle=true, 過濾迴環事件
杭州任務 A 創建
-
選擇 Tunnel(杭州) 和 MySQL資料庫(杭州)
-
選擇表、列、映射略
-
任務正常運行,監聽埠並準備接收數據
上海任務 C 創建
-
選擇 Tunnel(上海) 和 MySQL資料庫(上海)
-
選擇表、列、映射略
-
任務正常運行,監聽埠並準備接收數據
杭州任務 B 創建
-
選擇 MySQL (杭州) 和 Tunnel 數據源(上海)
-
選擇數據同步,並 關閉任務自動啟動
-
選擇表、列、映射略
-
任務正常創建
-
任務詳情 > 更多功能 > 參數設置,目標端數據源配置,deCycle 參數設置為 true
-
啟動任務,正常運行
上海任務 D 創建
-
選擇 MySQL (上海) 和 Tunnel 數據源(杭州)
-
選擇數據同步,並 關閉任務自動啟動
-
選擇表、列、映射略
-
任務正常創建
-
任務詳情 > 更多功能 > 參數設置,目標端數據源配置,deCycle 參數設置為 true
-
啟動任務,正常運行
功能驗證
杭州 MySQL 造增量數據
-
使用 CloudDM 在杭州 MySQL 上造增量數據
-
杭州寫入上海 Tunnel 任務 有流量
-
上海接收數據任務 有流量
-
杭州接收數據任務 無流量
-
上海寫入杭州 Tunnel 任務 無流量
上海 MySQL 造增量數據
-
使用 CloudDM 在上海 MySQL 上造增量數據
-
上海寫入杭州 Tunnel 任務 有流量
-
杭州接收數據任務 有流量
-
杭州寫入上海 Tunnel 任務 無流量
-
上海接收數據任務無流量
-
以上兩者說明防迴圈生效
總結
本文主要介紹 CloudCanal 進行跨互聯網數據雙向同步,具備 兩端資料庫完全不開放公網埠,可雙向同步無迴圈 等特點。