系統(tǒng)優(yōu)化利器:達(dá)夢讀寫分離集群
隨著各行業(yè)業(yè)務(wù)數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)復(fù)雜程度的不斷攀升,數(shù)據(jù)庫的訪問壓力正不斷增強(qiáng)。在大型應(yīng)用系統(tǒng)中往往存在上百萬的用戶,有上千萬的數(shù)據(jù)量,產(chǎn)生眾多的數(shù)據(jù)庫查詢操作,也有較多的數(shù)據(jù)庫寫操作。如果能將數(shù)據(jù)庫的讀寫操作分離,無疑能大幅提升系統(tǒng)性能。
一、 系統(tǒng)概述
在一個高并發(fā)的事務(wù)型系統(tǒng)中,當(dāng)寫事務(wù)占的比例相對讀事務(wù)相對較小時,可以借助DM7的主備系統(tǒng)備機(jī)可讀的特點,將讀事務(wù)轉(zhuǎn)移到備機(jī)執(zhí)行,減少單節(jié)點的并發(fā)壓力,通過增加備機(jī)節(jié)點資源,提高系統(tǒng)的并發(fā)能力,增強(qiáng)系統(tǒng)性能。
DM7提供一種獨具創(chuàng)新的主備方案,即時歸檔主備系統(tǒng),該系統(tǒng)可通過客戶端來實現(xiàn)讀寫事務(wù)的自動分離,讀事務(wù)在備機(jī)執(zhí)行,寫事務(wù)在主機(jī)執(zhí)行,減輕主機(jī)的負(fù)載。備機(jī)可以配置多個,備機(jī)配置的越多,更能分擔(dān)主機(jī)的壓力,系統(tǒng)整體并發(fā)效率越高。
二、 讀寫分離流程
DM7使用JDBC驅(qū)動與服務(wù)器結(jié)合的方式實現(xiàn)讀寫分離,大致流程如下:
1) 用戶登錄后,客戶端首先連接到主機(jī),主機(jī)根據(jù)即時歸檔的配置,獲取一個有效的備機(jī)信息,并返回給客戶端。
2) 客戶端根據(jù)主機(jī)返回的備機(jī)IP和端口,建立與該備機(jī)的連接。
3) 客戶端執(zhí)行語句時先在備機(jī)上執(zhí)行,如果是只讀事務(wù),則只在備機(jī)上執(zhí)行。
4) 如果系統(tǒng)收到客戶端試圖在備機(jī)模式下修改數(shù)據(jù)等錯誤,則說明該事務(wù)是寫事務(wù),則轉(zhuǎn)移到主機(jī)上執(zhí)行。
5) 一旦主機(jī)上執(zhí)行的寫事務(wù)提交,則下次繼續(xù)從備機(jī)開始執(zhí)行。
6) 為了實現(xiàn)負(fù)載均衡,防止出現(xiàn)讀事務(wù)過多占用備機(jī)資源、主機(jī)空閑的情況,客戶端采用一定的算法進(jìn)行均衡,主機(jī)上也會執(zhí)行一部分讀事務(wù)。
圖1 讀寫分離流程
三、 即時歸檔
DM7支持多種歸檔類型,本地歸檔、實時歸檔、同步歸檔、異步歸檔等類型。為了實現(xiàn)讀寫分離,新增一種即時歸檔(Timely archive)類型,以區(qū)別實時歸檔。
實時歸檔是實時發(fā)送日志到備機(jī),備機(jī)收到日志不會等待日志APPLY完成,立即響應(yīng)給主機(jī),主機(jī)收到響應(yīng)后才刷本地日志。
即時歸檔是一種比實時歸檔更加嚴(yán)格的遠(yuǎn)程歸檔方式,先刷本地日志,然后發(fā)送到備機(jī),并且等待備機(jī)APPLY完成,之所以要這么做,原因有2個:
首先,即時歸檔主備系統(tǒng)不會發(fā)生主備切換,在主機(jī)發(fā)送完日志到備機(jī)后刷日志前主機(jī)崩潰的情況下,不能讓備機(jī)多一段日志,確保主機(jī)數(shù)據(jù)是完整且***的。
其次,需要保證主備機(jī)的數(shù)據(jù)一致性,避免從備機(jī)讀的數(shù)據(jù)到主機(jī)進(jìn)行更新時數(shù)據(jù)已經(jīng)不一致了。
在某些不需要保證嚴(yán)格一致性的情況下,可以通過dmarch.ini中的ARCH_WAIT_APPLY配置項,來配置不需要等待備機(jī)重做完日志的主備系統(tǒng),類似于實時歸檔,可以進(jìn)一步提高系統(tǒng)性能。
四、 事務(wù)一致性
若事務(wù)全為讀操作,則全部在備機(jī)上執(zhí)行。
若事務(wù)全為寫操作,則全部在主機(jī)上執(zhí)行。
若事務(wù)既有讀又有寫,備機(jī)會將寫操作返回給主機(jī)執(zhí)行,該事務(wù)中從寫操作開始以后所有操作均在主機(jī)上執(zhí)行,保證事務(wù)一致性。
五、 數(shù)據(jù)同步
配置讀寫分離集群之前,必須先同步主備機(jī)數(shù)據(jù),確保兩者保持完全一致;主數(shù)據(jù)庫可以是新初始化的數(shù)據(jù),也可以是正在生產(chǎn)、使用中的數(shù)據(jù)。DM7提供了兩種方式初始化同步主備機(jī)數(shù)據(jù),數(shù)據(jù)文件拷貝以及備份還原方式。
不能使用分別初始化庫的方法,原因如下:
1) 每個庫都有一個***魔數(shù)(permenant_magic),主備機(jī)傳送日志時會判斷這個值是否一樣,確保來自同一個庫,不同的庫傳送不了日志
2) 由于dminit初始化數(shù)據(jù)庫時,會生成隨機(jī)密鑰用于加密,每次生成的密鑰都不相同,備機(jī)無法解析采用主機(jī)密鑰加密的數(shù)據(jù)
1. 數(shù)據(jù)文件拷貝
如果搭建系統(tǒng)之前,數(shù)據(jù)庫系統(tǒng)已經(jīng)上線運(yùn)行了,可通過拷貝數(shù)據(jù)文件的方式實現(xiàn)主備數(shù)據(jù)庫的同步。具體步驟包括:
1) 正常關(guān)閉數(shù)據(jù)庫。
2) 嚴(yán)格按照數(shù)據(jù)文件在主機(jī)上的分布,拷貝數(shù)據(jù)文件到備機(jī)的對應(yīng)目錄。
3) 如果數(shù)據(jù)文件統(tǒng)一存放在一個目錄下,則直接拷貝整個目錄即可。
2. 備份還原方式
用戶也可以通過脫機(jī)備份、脫機(jī)還原的方式同步主備機(jī)數(shù)據(jù),更詳細(xì)的說明可以參考備份恢復(fù)相關(guān)文檔。具體步驟包括:
1) 正常關(guān)閉數(shù)據(jù)庫
2) 進(jìn)行脫機(jī)備份
3) 拷貝備份文件到備機(jī)
4) 執(zhí)行脫機(jī)數(shù)據(jù)庫恢復(fù)
六、 讀寫分離效果
搭建1主2備系統(tǒng),***情況可提升吞吐量250%。
圖2 讀寫分離測試效果
達(dá)夢高性能讀寫分離集群已成功應(yīng)用于世界500強(qiáng)、大型央企財務(wù)核心系統(tǒng)建設(shè)中,欲知詳情,請密切關(guān)注2014年4月10即將在北京舉辦的2014中國數(shù)據(jù)庫技術(shù)大會。屆時,武漢達(dá)夢數(shù)據(jù)庫有限公司將在本次大會的數(shù)據(jù)庫性能調(diào)優(yōu)專場為大家?guī)砭恃葜v,敬請期待!