問題引出
客戶需要將華為雲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環境配置雙向同步
本次環境架構圖如下:
準備環境
購買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。
image-20210902170707389
配置otter
修改Node
選擇機器管理的node管理:
由於ECS和2臺rds通訊只能使用外網IP,所以,這裡啟用外部IP, 如上圖。
啟動node
啟動命令:
管理介面顯示節點狀態已經啟動:
image-20210902171428339
新增資料來源
新增2個rds的資料來源:填寫正確的資料庫連線資訊。
這裡填寫的mysql使用者不一定要用root,只要有操作需同步資料的庫表的相關許可權即可。
新增需要同步的資料表
image-20210812184504456image-20210903084409117
注意:如果同步整個資料庫的表,則將schema name和table name都設定成“。*”,不建議對整個庫同步,因為有系統庫不建議同步。
image-20210902171629408
配置雙向同步
雙向同步可以理解為兩個單向同步的組合,但需要額外處理避免迴環同步。 迴環同步演算法:Otter雙向迴環控制 。
同時,因為雙向迴環控制演算法會依賴一些系統表,需要在需要做雙向同步的資料庫上初始化所需的系統表,也可以直接從介面獲取(可以點選使用文件-》資料庫初始化頁面),獲取初始sql:
介面獲取:
配置上相比於單向同步有一些不同,操作步驟:
首先配置一個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即可。
image-20210831164514441
新增channel、pipline以及對映關係
若是單向同步,則可以不開啟資料一致性!
image-20210902172354705
注意這裡的選項:
2個Pipeline都需要新增對映關係:
image-20210902172814580
啟動channel
驗證
驗證是否同步:
雙向同步配置完成。
新增監控
壓測
使用mysqlslap
建立了一個簡單的表使用mysqlslap進行測試。
測試100w條插入:
image-20210902115810043
延遲、tps等如下:
image-20210902120655442
image-20210902120640374
使用sysbench
由於DDL是單向同步,所以,在華為雲rds需要做建表操作,然後可以在天翼雲rds做壓測:
image-20210902141815244
image-20210902141538161
image-20210902141709234
總體來說,如果不做太多的欄位重新命名、二次處理,otter效能本身還是不錯的。
本文結束。
若有侵權請聯絡小麥苗刪除