【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

問題引出

客戶需要將華為雲rds for MySQL和天翼雲rds for MySQL做一個,當華為雲rds宕機的時候,可以切換到天翼雲繼續提供服務,而且此時,天翼雲的資料也可以自動同步到華為雲rds,平時只使用華為雲的rds,和雙A方案有點差異,需要注意的是rds環境不能安裝任何的軟體,所以,我目前想到的方案有:

1、用MySQL自帶的主從複製。這個方案最簡單,但是不可行,因為華為雲和天翼雲都禁用了super許可權,在執行的時候會報許可權不足的錯誤,“”。

2、使用華為雲或天翼雲自帶的資料同步功能。這個也不可行,翻閱了一下文件,同步只能同步,這對於雙向同步來說不可行。

3、使用ogg遠端捕獲投遞。ogg for MySQL從MySQL 5。7和ogg 19c開始支援遠端捕獲(Remote Capture)和遠端投遞(Remote Delivery),所以配置雙向同步,該方案經過驗證也是可行的!

OGG用於跨雲RDS之間配置雙主實時同步(遠端捕獲和投遞):https://www。xmmup。com/oggyongyukuayunrdszhijianpeizhishuangzhushishitongbuyuanchengbuhuohetoudi。html

4、使用阿里的開源工具otter,這個方案經過驗證是可行的。阿里資料同步工具Otter和Canal簡介請參考:https://www。xmmup。com/alishujutongbugongjuotterhecanaljianjie。html

otter用於跨雲RDS之間配置雙主實時同步參考:https://www。xmmup。com/otteryongyukuayunrdszhijianpeizhishuangzhushishitongbu。html

otter和ogg優缺點

1、otter不能同步無主鍵的表(會導致同步任務停止),而ogg可以

2、otter可以單向同步ddl語句,而ogg對於MySQL 5。7不可以,ogg對MySQL 8。0支援DDL同步

3、otter有圖形介面操作,OGG只有命令列操作

搭建otter環境配置雙向同步

本次環境架構圖如下:

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

準備環境

購買2臺RDS for MySQL環境

這裡,我做測試直接買了2臺華為雲的rds,大家把rds-3388-0001當做華為雲rds,另一臺當做天翼雲rds吧:

購買1臺ECS環境作為otter環境

這裡,我做測試直接買了1臺華為雲的ecs:

開放埠:8088,web頁面使用

開放埠:2088,2089,2090,這幾個埠對rds開放,同時2個rds的3306需要對這臺ecs開放。

下面開始配置:

啟動成功後瀏覽器訪問 http://139。9。130。227:8088/login。htm,出現otter的頁面,使用者名稱和密碼都是admin。

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902170707389

配置otter

修改Node

選擇機器管理的node管理:

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

由於ECS和2臺rds通訊只能使用外網IP,所以,這裡啟用外部IP, 如上圖。

啟動node

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

啟動命令:

管理介面顯示節點狀態已經啟動:

image-20210902171428339

新增資料來源

新增2個rds的資料來源:填寫正確的資料庫連線資訊。

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

這裡填寫的mysql使用者不一定要用root,只要有操作需同步資料的庫表的相關許可權即可。

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

新增需要同步的資料表

image-20210812184504456image-20210903084409117

注意:如果同步整個資料庫的表,則將schema name和table name都設定成“。*”,不建議對整個庫同步,因為有系統庫不建議同步。

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902171629408

配置雙向同步

雙向同步可以理解為兩個單向同步的組合,但需要額外處理避免迴環同步。 迴環同步演算法:Otter雙向迴環控制 。

同時,因為雙向迴環控制演算法會依賴一些系統表,需要在需要做雙向同步的資料庫上初始化所需的系統表,也可以直接從介面獲取(可以點選使用文件-》資料庫初始化頁面),獲取初始sql:

介面獲取:

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

配置上相比於單向同步有一些不同,操作步驟:

首先配置一個channel

然後新增兩個pipeline

注意:兩個單向的canal和對映配置,在一個channel下配置為兩個pipeline。如果是兩個channel,每個channel一個pipeline,將不會使用雙向迴環控制演算法,也就是會有重複迴環同步。

每個pipeline各自配置canal,定義對映關係

雙向需要注意:

一個channel 新增兩個 pipeline ,

兩個為雙向同步,如果要用DDL同步,一個pipeline開啟ddl同步,另一個不要開啟,且建議開啟跳過ddl異常,DryRun模式 不要開啟

同時在配置雙向同步的時候,建議執行otter-system-ddl-mysql。sql增加同步控制庫,若是單向同步,則不需要執行該指令碼。

雙向同步建議在需要同步的兩個資料庫中新建retl資料庫。

新增canal

Otter使用canal開源產品獲取資料庫增量日誌資料,可以把cannal看作是源庫的一個偽slave。

原理:canal模擬mysql slave的互動協議,偽裝自己為mysql slave,向mysql master傳送dump協議,mysql master收到dump請求,開始推送binarylog給slave(也就是canal), canal解析binary log物件(原始為byte流)。

若要配置雙向同步,則必須新增2個canal,若配置單向同步,則配置一個canal即可。

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210831164514441

新增channel、pipline以及對映關係

若是單向同步,則可以不開啟資料一致性!

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902172354705

注意這裡的選項:

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

2個Pipeline都需要新增對映關係:

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902172814580

啟動channel

驗證

驗證是否同步:

雙向同步配置完成。

新增監控

壓測

使用mysqlslap

建立了一個簡單的表使用mysqlslap進行測試。

測試100w條插入:

image-20210902115810043

延遲、tps等如下:

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902120655442

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902120640374

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

使用sysbench

由於DDL是單向同步,所以,在華為雲rds需要做建表操作,然後可以在天翼雲rds做壓測:

image-20210902141815244

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902141538161

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

image-20210902141709234

【DB寶78】otter用於跨雲RDS之間配置雙主實時同步

總體來說,如果不做太多的欄位重新命名、二次處理,otter效能本身還是不錯的。

本文結束。

若有侵權請聯絡小麥苗刪除

TAG: 同步RDS雙向otterIMAGE