1. 程式人生 > >mysql跨機房異地區的主從資料庫同步備份業務實現解決方案

mysql跨機房異地區的主從資料庫同步備份業務實現解決方案

mysql跨機房異地區的主從資料庫同步備份業務實現解決方案

2018年11月14日 17:16:02 南通SEO 閱讀數 1857  

mysql跨機房異地區的主從資料庫同步備份業務實現解決方案

 

背景

早期,阿里巴巴B2B公司因為存在杭州和美國雙機房部署,存在跨機房同步的業務需求。不過早期的資料庫同步業務,主要是基於trigger的方式獲取增量變更,不過從2010年開始,阿里系公司開始逐步的嘗試基於資料庫的日誌解析,獲取增量變更進行同步,由此衍生出了增量訂閱&消費的業務,從此開啟了一段新紀元。

ps. 目前內部版本已經支援mysql和oracle部分版本的日誌解析,當前的canal開源版本支援5.7及以下的版本(阿里內部mysql 5.7.13, 5.6.10, mysql 5.5.18和5.1.40/48)

 

基於日誌增量訂閱&消費支援的業務:

  1. 資料庫映象
  2. 資料庫實時備份
  3. 多級索引 (賣家和買家各自分庫索引)
  4. search build
  5. 業務cache重新整理
  6. 價格變化等重要業務訊息

專案介紹

名稱:canal [kə'næl]

譯意: 水道/管道/溝渠

語言: 純java開發

定位: 基於資料庫增量日誌解析,提供增量資料訂閱&消費,目前主要支援了mysql

關鍵詞: mysql binlog parser / real-time / queue&topic

 

工作原理

mysql主備複製實現


從上層來看,複製分成三步:

  1. master將改變記錄到二進位制日誌(binary log)中(這些記錄叫做二進位制日誌事件,binary log events,可以通過show binlog events進行檢視);
  2. slave將master的binary log events拷貝到它的中繼日誌(relay log);
  3. slave重做中繼日誌中的事件,將改變反映它自己的資料。

canal的工作原理:

原理相對比較簡單:

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

重要版本更新說明

canal 1.1.x系列,參考release文件:版本釋出資訊

  1. 整體效能測試&優化,提升了150%. #726 參考: 【Performance
  2. 原生支援prometheus監控 #765 【Prometheus QuickStart
  3. 原生支援kafka訊息投遞 #695 【Canal Kafka/RocketMQ QuickStart
  4. 原生支援aliyun rds的binlog訂閱 (解決自動主備切換/oss binlog離線解析) 參考: 【Aliyun RDS QuickStart
  5. 原生支援docker映象 #801 參考: 【Docker QuickStart

相關文件

See the wiki page for : wiki文件

wiki文件列表

多語言業務

  1. canal整體互動協議設計上使用了protobuf3.0,理論上可以支援絕大部分的多語言場景,歡迎大家提交多客戶端的PR
  2. canal作為MySQL binlog的增量獲取工具,可以將資料投遞到MQ系統中,比如Kafka/RocketMQ,可以藉助於MQ的多語言能力

相關資料

相關開源

  1. 阿里巴巴分散式資料庫同步系統(解決中美異地機房):http://github.com/alibaba/otter
  2. 阿里巴巴去Oracle資料遷移同步工具(目標支援MySQL/DRDS):http://github.com/alibaba/yugong

相關產品

  1. 阿里雲分散式資料庫DRDS
  2. 阿里雲資料傳輸服務DTS
  3. 阿里雲資料庫備份服務DBS
  4. 阿里雲資料管理服務DMS