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