1. 程式人生 > >【多資料中心】分散式資料同步設計方案

【多資料中心】分散式資料同步設計方案

介紹

       JD_databus是為滿足多資料中心專案的mysql在資料中心間複製的需求所產生的。最開始JD_databus是在LinkedIn的databus的基礎上開發的,本次設計考慮到可維護性、程式碼的簡潔、需求的快速迭代,決定重新開發。設計和開發過程中參考了Databus、Canal/Otter的一些好的思路,對於Binlog解析部分則直接使用了她的dbsync模組。

特性

  • 基於MySQL的ROW Binlog進行雙向複製,可以實現MySQL的雙主、多主模式;
  • 自動負載均衡、故障切換;
  • 基於Binlog日誌位置或時間點回滾/重做;
  • 可指定跳過阻塞複製的SQL;
  • 可批量合併SQL、優先並行入庫,失敗自動降級為序列入庫;
  • 複製延遲監控報警;
  • 內建豐富的視覺化節點狀態、metrics;
  • 和UMP、JONE整合;

架構總述

Pipeline

複製管道由SDBI(源資料庫例項)、RS(Relay Server,縮寫下同)、RC(Replicator Client,縮寫下同)、TDBI(目標資料庫例項)這四個元件組成。RS通過mysql的複製協議拉取SDBI的binlog增量變更事件,RC通過自定義RPC協議從RS拉取事件,然後使用JDBC協議寫入TDBI。

Group

若干同類pipeline的集合。最主要用於在多資料中心時區分pipeline的方向。方向之所以重要是因為跨資料中心時要優先考慮將RS和SDBI就近部署、RC和TDBI就近部署。

Scheduler

排程器將一個Group範圍內的各個pipeline分配到可用的Relay Containers和Replicator Containers。一個Group下只有一個Active的排程器例項。目前預設基於Zookeeper來實現排程器的Active/Standby。

Checkpoint Store

RC拉取並處理完事件後ACK給RS,後者會將本管道SDBI的合適的事件位置(事務頭尾、DDL事件前後)寫入Checkpoint Store,以便故障重啟時自身或其他RS從該位置繼續拉取增量事件。目前預設在Zookeeper上存放。

Domain

同一業務域的多個group的集合。在Jingobus管理系統中,業務域會關聯起JONE中的應用,獲取到應用負責人和成員資訊。業務域可以有自己獨立隔離的Meta Service/Metrics Service/Coordinator/Config Service,也可以使用公共的服務。

Meta Service

元資料服務為RS/RC提供相關Pipeline的元資料資訊,比如SDBI、TDBI等連線資訊,以及庫表的Schema資訊(Schema服務第二期未實現,TODO)。

Metrics Service

Metrics Service為各個管道的效能指標提供儲存、查詢、統計服務。目前採用了Kairosdb(+Cassandra)這個時間序列資料庫來實現。

Monitor Service

Monitor Service通過worker定期掃描各個管道的關鍵效能指標(複製延遲、心跳時間),超過閾值則報警。目前預設使用UMP的自定義報警傳送給業務域相關人員,只需要在業務域中配置相應的UMP自定義報警Key即可。

Coordinator

目前通過Zookeeper來實現Group範圍內Relay Containers/Replicator Containers的註冊、故障切換、負載均衡。

Config Service

為 Relay Containers/Replicator Containers提供統一配置服務。(二期未實現,考慮整合交易的TPConfig,TODO)

Relay Container

最小部署單元(程序)。一個Relay Container為一個Group服務,啟動後在Coordinator上註冊,被Scheduler分配/取消一個Pipeline後,則內部啟動/停止一個RS,並註冊/反註冊到Coordinator上。

Replicator Container

最小部署單元(程序)。一個Replicator Container為一個Group服務,啟動後在Coordinator上註冊,被Scheduler分配一個Pipeline後,則內部啟動一個RC,從Coordinator上發現相應的RS,並將RC註冊到Coordinator上。

Metrics Reporter

Relay Container/Replicator Container通過dropwizard的metrics庫採集的各種效能指標,通過Metrcis Reporter定期上報給Metrics Service。目前直接採用Http協議。

Restful Interface

Relay Container/Replicator Container通過內建的http server(使用vertx)暴露Restful API供管理端呼叫,檢視相關pipeline上RS/RC的各種實時狀態,或重啟、回滾等操作。

RR

在雙向複製中,Relay Container和Replicator Container經常成對出現,為簡化部署,RR組合了Relay Container和Replicator Container的功能,作為另一種最小部署單元。