基于Maxwell的MySQL數據傳輸服務整體設計
最近對整體的DTS(數據傳輸系統)做了整體的開發設計,目前在做的是從數據庫到大數據庫側的數據傳輸對接,先放出來一部分拋磚引玉。
數據傳輸服務(DTS)支持關系型數據庫、NoSQL、大數據等數據源間的數據傳輸。它是一種集數據遷移、數據同步及數據訂閱于一體的數據傳輸服務。
本次主要圍繞MySQL到Kudu的數據同步進行建設,采用基于 MySQL Binlog進行數據同步的解決方案,覆蓋全量、增量、全量+增量三種同步模型,支持數據同步的秒級延遲,任務異常的斷點續傳,以及數據的不丟、不亂、不重;
1.系統整體設計
系統的整體設計圖如下:
其中DTS為平臺前端,可以采用專業前端團隊支持。
數據傳輸系統DTS為獨立的業務系統,目前為重新構建,為實現初步初版,基線版本為數據庫運維系統的當前版本,后續只維護DTS側相關邏輯。
其中DTS為了考慮后續的擴展性和可維護性,會基于reader,write,service三個大體的模塊來構建,reader,writer可以根據具體的技術方向進行細分。
關聯系統為數據庫運維系統,任務系統,大數據管理系統,對于這些關聯系統的元數據和部分邏輯功能會有相關調用。
整個數據傳輸服務流程中,一個基礎的屬性是task_code,這是在DTS任務新建,中端數據傳輸,后端服務集成中的共同屬性,task_code的含義即為client_id,格式為:dts_[idc]_[maxwell_ip]_[maxwell_code],后端服務的topic會基于client_id附加數據庫和表信息組合而成。
當在DTS前端頁面中輸入了基礎信息(如數據庫IP,端口等)后,會調用中端的服務接口生成相應的client_id,后端服務會根據DTS任務列表中的task_code為基準進行任務管理,而中端服務會根據client_id進行相應的同步對象配置管理/服務啟停等操作。
相關的數據傳輸流如下:
2.中端管理設計
中端管理主要是基于Maxwell的部署管理,配置管理,同步對象列表變更,服務管理(啟動,停止),服務自管理和監控報警,目前的實現主要基于API,初步實現本地前端。
2.1. 部署管理
部署管理主要是對Maxwell服務部署實現平臺化管理,目前Maxwell應用服務器有2臺,分別是130.200和130.201,檔案數據庫為Maxwell服務基礎配置數據和Maxwell啟動初始化的數據庫基礎元數據。
通過平臺化部署能夠實現如下的幾個功能:
1)能夠實現自動尋址,為Maxwell新增同步任務匹配相應的應用服務器,在后續新增應用服務器的情況下能夠快速調整和適配
2)如果已在服務器A上部署了實例B的maxwell服務,則新增數據同步任務時,需要復用已有的maxwell服務配置,不需要在新的服務器中重新配置。
3)服務配置的基礎準備工作,如Maxwell相關的賬號和防火墻開通等工作,需要通過腳本化管理方式支持,以API形式提供接入,目前統一的maxwell接入賬戶為:dba_maxwell_repl
① 數據庫主庫Master端開通防火墻權限,創建相應的數據庫賬戶
② 數據庫從庫Slave端開通防火墻權限
4)MySQL服務的拓撲管理基于數據庫運維管理系統,需要封裝相應的API得到Slave信息,同時需要在Maxwell配置列表中維護管理。
補充:
前置任務:
在130.201服務器上面部署Maxwell修正版服務
基于測試環境完成Maxwell的接入測試,producer為stdout
后續的開發可以參考如下的實現點:
① 完成Maxwell模板化配置
② 可以配置模板生成定制化配置,封裝統一的啟停腳本
③ Maxwell自動尋址邏輯,同一個實例只能復用一個Maxwell進程服務
④ Client_id生成邏輯
⑤ Maxwell code生成邏輯
⑥ 基于運維系統封裝DTS側的接口,實現防火墻開通管理和新建復制用戶功能,新建用戶在Master,權限開通在Master和Slave端
⑦ 對于stdout和Kafka配置,實現互斥邏輯
2.2. 配置管理
配置管理包含maxwell基礎的配置文件,如config配置,日志配置和監控配置。目錄規劃設計如下:
可以在這個基礎上進行服務的相應擴展。
Maxwell的基礎配置依賴于client_id
ü client_id元數據命名
dts_[idc]_[maxwell_ip]_[maxwell_code]
如Maxwell部署在服務器 121.240,
Maxwell001為業務編碼,可以映射到相應的數據庫服務(如Slave),為了方便標識和 解析,不允許包含特殊符號,如下劃線等
命名示例則為:dts_xxxx_121_240_maxwell001
對于實現細節可以整理為如下的部分:
1)支持根據模板配置化生成相應的maxwell配置文件,配置文件命名以client_id元數據命名,格式為:dts_[idc]_[maxwell_ip]_[maxwell_code].properties,配置文件部署在app_config目錄下。
如Maxwell部署在服務器 130.200,
Maxwell001為業務編碼,可以映射到相應的數據庫服務(如Slave),為了方便標識和 解析,不允許包含特殊符號,如下劃線等
命名示例則為:dts_xxxx_130_200_maxwell001.properties
2)對于Maxwell基礎信息的配置,因為基于client_id,不便于顯示源端的關聯關系,該配置信息的管理需要統一在maxwell檔案庫中維護。
3)基礎配置信息包括源端服務信息,源服務端口,復制賬戶信息,client_id,歸屬maxwell應用服務器,監控端口,過濾列表,bootstrap_type(sync,async), kafka配置信息等
4)基礎配置管理需要實現本地前端
補充:
完成Maxwell服務列表和服務配置的平臺化管理,后端均為API實現
如果任務配置發生變更時,服務列表和詳情列表為一對多的關系,即需要保留已有的配置文件記錄,然后將原記錄狀態置為失效,使得在出現異常回退的時候,該任務依然可以保證服務可用。
2.3. 同步對象列表變更
同步對象列表為數據傳輸中的重點管理對象,需要實現如下的功能:
1)對已有的maxwell服務新增表時,需要在已有的maxwell服務下進行擴展,修改同步對象列表,列表的修改模式為追加,暫不支持修改,刪除等其他模式。
2)修改同步列表后,需要對maxwell服務進行重新啟動,需要保證啟動過程相對是平滑可控。
3)如同步列表刷新失敗,需要能夠快速回退,快速恢復數據傳輸服務。
4)配置文件版本管理和歸檔,對象變更前,需要對配置文件先做備份,并規范備份文件命名。
補充:
主要實現同步對象的修改和管理,添加相應的正則配置,調用明細管理的方法/接口
2.4. 服務管理
能夠實現maxwell的啟停管理功能,包含三個子選項;start,stop,restart
通過API模式進行服務狀態檢查,目前可以復用已有的開放接口
2.5. 服務自啟動
在傳輸鏈路中,如果因為源端服務異常,maxwell側異常或者后端傳輸服務異常,會導致Maxwell服務異常終止,需要通過探測的模式進行檢查復核,確認后重新拉起服務,保證maxwell服務的持續性。
補充:
開發相應的腳本,能夠進行服務狀態檢測,并復用已有監控的API進行數據傳輸狀態的檢測。
3.6. 監控報警
監控報警為maxwell基礎保障功能,需要完成對Maxwell服務的數據傳輸監控,解析binlog的吞吐量,下推Kafka的吞吐量等,并對數據傳輸異常,服務異常等異常場景進行報警提示。
補充:
配置相應的報警明細項目,設定閾值,進行報警配置
本文轉載自微信公眾號「楊建榮的學習筆記」,可以通過以下二維碼關注。轉載本文請聯系楊建榮的學習筆記公眾號。