1、寫在前面
學習MogDB已經(jīng)有一段時間了,如果這個時候有這樣一個客戶,老業(yè)務系統(tǒng)隨著時間的推進,已經(jīng)像一個“大泥球”,每個功能都有各種各樣的補丁,導致不敢隨意修改某個功能,否則就牽一發(fā)而動千身,所有的功能只能新增代碼,這樣這個泥球越滾越大,運維人員已經(jīng)不堪重負,加上要改革創(chuàng)新以及滿足多樣化的新業(yè)務需求,新建一套基于springboot的微服務應用系統(tǒng)也就迫在眉睫,恰巧數(shù)據(jù)庫就選擇了MogDB,這個時候我該如何開展工作那?
2、數(shù)據(jù)庫設計
上圖是一個應用的簡單邏輯架構(gòu),老系統(tǒng)是一個單體的應用系統(tǒng)。新系統(tǒng)拆分出了12個系統(tǒng)。應用做了拆分解耦,各個子系統(tǒng)之間都是通過接口交互,那么數(shù)據(jù)庫設計方案會比較多。
方案一:同一個集群下的同一個數(shù)據(jù)庫多個schema,每個schema服務不同的微服務。
方案二:同一個集群下的不同數(shù)據(jù)庫,每個數(shù)據(jù)庫服務不同的微服務。
方案三:多個集群,每個集群服務不同的微服務。
基于上面三個方案做分析
方案一:運維工作量小,雖然在不同的schema下但是一個數(shù)據(jù)庫下包含了所有的表,不利于后續(xù)的擴展,比如可能系統(tǒng)A庫需要適應mysql,系統(tǒng)B需要適應Oracle,并且存在不同微服務之間的資源占用;隨著業(yè)務的積累,數(shù)據(jù)庫也會比較臃腫。
方案二:運維工作量小,不同微服務之間的資源可以通過MogDB的資源負載功能解決,也可以實現(xiàn)不同數(shù)據(jù)之間分而治之。
方案三:運維工作量大,比如每個集群都要至少一主一備,備份、監(jiān)控、等運維工作非常繁瑣。
通過上面的分析我會使用方案二,如果隨著業(yè)務的積累,數(shù)據(jù)量不斷擴大,可以把體諒最大、并發(fā)量高的數(shù)據(jù)庫剝離出來,重新搭建一個集群,數(shù)據(jù)庫設計簡單描述為下圖。
數(shù)據(jù)庫搭建一主兩備,通過MogHA軟件管理高可用。應用連接池通過配置MogHA的VIP連接數(shù)據(jù)庫。另外創(chuàng)建數(shù)據(jù)庫的時候盡量指定字符集和兼容模式,兼容模式可以跟產(chǎn)品的研發(fā)數(shù)據(jù)庫版本靠齊。數(shù)據(jù)庫參數(shù)參考官方文檔中《推薦參數(shù)設置》章節(jié),然后根據(jù)實際情況對相應參數(shù)進行調(diào)整https://docs.mogdb.io/zh/mogdb/v3.0/recommended-parameter-settings,另外生產(chǎn)需要開啟日志歸檔、閃回功能、慢sql跟蹤功能。
3、業(yè)務數(shù)據(jù)遷移方案
新老系統(tǒng)替換,存量數(shù)據(jù)過度是一個必不可少的過程,在筆記《mogdb學習-從6開始(MTK)》中已經(jīng)描述過,關于MTK的功能就不在描述,這里描述另外的手工方法。
編寫shell腳本,從老系統(tǒng)中導出按特定格式分割的文本文件,不同的數(shù)據(jù)庫方法比較多Oracle可以使用spool或者sqluldr2.bin;mysql可以使用mysqldump或者select into file;DB2可以使用db2export等。然后在MogDB中使用pg_bulkload進行數(shù)據(jù)導入,從源系統(tǒng)數(shù)據(jù)導出的時候需要注意回車換行。
并不是所有老系統(tǒng)的表都需要進行業(yè)務遷移,所以導出的時候盡量按照表進行操作,并且這樣可以適當?shù)拈_啟并行導出多張表。另外在數(shù)據(jù)遷移過程中存在一個“中間庫”的概念,中間庫可以選在MogDB也可以選擇與老系統(tǒng)一致的數(shù)據(jù)庫。我們以中間庫是MogDB為例,因為MogDB一個集群下的不同數(shù)據(jù)庫是不可以互相訪問的,所以中間庫在設計的時候為了方便從oldtable插入到不同微服務的newtable,中間庫的設計是一個微服務一個schema。
下圖是從老信貸到中間庫的邏輯架構(gòu),oldschema存放與老系統(tǒng)一模一樣的表;執(zhí)行數(shù)據(jù)加工后把表插入到不同schema的新表中。中間庫中的每個newschema對應生產(chǎn)環(huán)境MogDB集群中的一個數(shù)據(jù)庫。
中間庫數(shù)據(jù)加工完成后使用gs_dump按照newschema導出多個文件,然后使用gs_restore導入到生產(chǎn)環(huán)境中不同的庫。
4、數(shù)據(jù)庫日常運維
1、搭建MogDB Manager圖形化數(shù)據(jù)庫運維工具(后面筆記會進行測試)。
2、跟蹤分析慢sql。
3、定期檢查WDR報告。
4、定期數(shù)據(jù)全量備份+備份歸檔xlog。
5、主從健康狀態(tài)監(jiān)測。
6、定期表空間碎片清理。
5、寫在最后
這一篇的標題有點詞不達意,其實本意是我學習MogDB已經(jīng)3周了,遐想出了一個使用MobDB的新項目,根據(jù)自己目前的學習情況做了一個知識點應用歸納,在一個項目中如何開展工作。當然并不完善,還有很多優(yōu)秀的功能還沒有了解到。希望通過自己的學習可能更深入的了解MogDB。




