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