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