數(shù)據(jù)庫的橫向擴展已經(jīng)成為各個企業(yè)用戶的基本需求,一方面隨著企業(yè)前端業(yè)務系統(tǒng)的膨脹,后端數(shù)據(jù)庫系統(tǒng)的負載也在不斷增長,企業(yè)進行縱向擴展技術(shù)難度較大,另一方面,數(shù)據(jù)庫系統(tǒng)的關(guān)鍵性不斷提高,橫向擴展不僅提高處理性能,也極大的提高了數(shù)據(jù)庫系統(tǒng)的容錯能力。
目前,數(shù)據(jù)庫橫向擴展有多種實現(xiàn)方式,較為主流的是共享存儲(Shared Disk)技術(shù),不久前,浪潮發(fā)布的K-DB數(shù)據(jù)庫,這款產(chǎn)品就基于共享存儲技術(shù),實現(xiàn)了雙機高可用(HA)、多機集群(KRAC)等數(shù)據(jù)庫橫向擴展。
浪潮K-DB采用基于共享存儲(Shared Disk)的雙機或多機集群(KRAC)架構(gòu)。
KRAC具有兩大特點:故障轉(zhuǎn)移和負載均衡。一方面,KRAC集群技術(shù)提供高可用解決方案,為用戶提供統(tǒng)一數(shù)據(jù)服務的同時提供故障切換與恢復能力(Fail Over集群功能),避免單點故障,減少停機時間,確保系統(tǒng)全年7*24穩(wěn)定運行。另一方面,后端數(shù)據(jù)庫系統(tǒng)的負荷隨著應用系統(tǒng)壓力的上升也在不斷的增加,集群技術(shù)能夠?qū)崿F(xiàn)數(shù)據(jù)庫系統(tǒng)的橫向擴展,將數(shù)據(jù)庫的壓力平均分配在多臺數(shù)據(jù)庫服務器上。 KRAC 體系結(jié)構(gòu)
KRAC由多個節(jié)點的數(shù)據(jù)庫服務器和共享存儲組成。共享存儲上主要存放的是數(shù)據(jù)庫必需的文件,包括數(shù)據(jù)文件、日志文件及控制文件等。數(shù)據(jù)庫服務器上運行著數(shù)據(jù)庫對應的實例,多實例之間通過內(nèi)網(wǎng)進行數(shù)據(jù)的傳輸。KRAC 的各個節(jié)點可以同時對磁盤進行讀寫,實現(xiàn)了多讀多寫的真正集群技術(shù)。
KRAC具有兩大特點:故障轉(zhuǎn)移和負載均衡。
圖1 KRAC的體系結(jié)構(gòu)
特點一:故障轉(zhuǎn)移
圖2 KRAC故障轉(zhuǎn)移
KRAC 數(shù)據(jù)庫可以對數(shù)據(jù)庫系統(tǒng)中出現(xiàn)的任何單點故障節(jié)點的session 轉(zhuǎn)移到其他正常的節(jié)點上,如磁盤、網(wǎng)絡、服務器等,保障應用系統(tǒng)的不間斷,最大程度的減少用戶的損失。
特點二:負載均衡
KRAC 會將所有的用戶session平均分配到各個節(jié)點上,集群中的各個節(jié)點均能對磁盤進行讀寫,達到應用系統(tǒng)的線性擴展,從整體上提高數(shù)據(jù)庫的吞吐量。
數(shù)據(jù)庫各個節(jié)點的實例之間通過高速的內(nèi)網(wǎng)傳送數(shù)據(jù),避免了節(jié)點間訪問數(shù)據(jù)而產(chǎn)生的不必要的IO,而影響到性能。而在KRAC 集群中,由于有多個節(jié)點都具有block buffer,這就需要節(jié)點間的block buffer可以互相傳輸訪問,才能達到一致性的狀態(tài)。
要具備以上2大特點,就不得不提內(nèi)存融合技術(shù),他是實現(xiàn)KRAC功能的核心。
KRAC核心技術(shù):內(nèi)存融合
圖3 KRAC 內(nèi)存融合
KRAC 集群內(nèi)部組件
KRAC 的集群中由CCC(Cluster Cache Control)模塊和GCA(Global Cache Adapter)模塊實現(xiàn)集群間數(shù)據(jù)庫的融合。傳輸?shù)臄?shù)據(jù)塊類型根據(jù)不同場景的需要而不一樣,主要包括CR block、Global dirty block、current block。節(jié)點間數(shù)據(jù)傳輸?shù)墓δ苡赡KINC(Inter-Node Communication)服務。在節(jié)點間請求的block buffer 由 CCC 和CGA 構(gòu)造完畢后,INC 負責將對應的數(shù)據(jù)塊傳輸?shù)侥康墓?jié)點。
KRAC內(nèi)存融合主要體現(xiàn)在4大核心技術(shù)上:鎖機制、角色、PI BLOCK和GLOBAL LOCK DIRETROY。
下面,我們將為大家詳細介紹這4個核心技術(shù)點的運行機制。
鎖機制
在數(shù)據(jù)庫中,對于數(shù)據(jù)塊的block buffer的并發(fā)讀寫使用鎖機制進行保護。每一個數(shù)據(jù)塊的鎖包括三種模式,分別為NULL、 SHARED和EXCLUSIVE 。三種模式的兼容列表如下:當某一個用戶持有block buffer 的鎖時,如果其他用戶以兼容模式的鎖方式進行訪問,那么這2個用戶可以同時訪問該數(shù)據(jù)塊。
而一旦2個用戶以不兼容方式訪問同一個數(shù)據(jù)塊時,后面的用戶必須等到前一用戶釋放鎖之后才能開始操作。這種解決方案是單實例K-DB數(shù)據(jù)庫的解決方案。而在KRAC 中,K-DB數(shù)據(jù)庫在此基礎上,增加了額外了管理方式-角色和Past image Block數(shù)據(jù)塊。
角色
K-DB 對于數(shù)據(jù)塊的分配了2種角色,分別是LOCAL 和 GLOBAL,當數(shù)據(jù)block buffer只在一個節(jié)點與磁盤上的數(shù)據(jù)不一樣(臟數(shù)據(jù)),該block buffer的角色為LOCAL狀態(tài)。當在多個節(jié)點上存在“臟數(shù)據(jù)”時,block buffer 的角色為GLOBAL。
PI BLOCK
如果一個block 在某一個節(jié)點中被修改后,然后該block 傳輸?shù)搅似渌?jié)點,那么本節(jié)點存儲的block塊為PI(Past Image)block。PI BLOCK 塊在以下2個方面具有一定的優(yōu)化作用:
1、提升CR 塊構(gòu)建的速度。當本地構(gòu)建的CR塊的SCN 小于PI BLOCK 的SCN時,無需從其他節(jié)點傳輸最新的current數(shù)據(jù)庫,直接在本地使用PI BLOCK可以構(gòu)造。
2、節(jié)點宕機后,提升系統(tǒng)恢復的性能。當某一個節(jié)點宕機后,整個集群會暫時停止服務,進行內(nèi)部恢復。恢復的原理就是將宕掉節(jié)點的redo日志在其他節(jié)點進行恢復。在恢復時,對于redo日志中小于PI BLOCK的SCN無需重做,從大于等于PI BLOCK的SCN處開始恢復,從整體上減少了恢復的工作量。
GLOBAL LOCK DIRETROY
在K-DB數(shù)據(jù)庫中,所有各個節(jié)點對于buffer block 的鎖信息,都會記錄在Global Lock Directory(GLD)。各個節(jié)點在share pool 內(nèi)存中分配出一部分內(nèi)存,共同組成整個的GLD。那么一個節(jié)點會記錄哪一個數(shù)據(jù)塊的鎖和角色的相關(guān)信息呢?
在這里,KRAC 又提出了一個新的機制,就是master機制。
所有的buffer block在當前的正在運行狀態(tài)的集群中,只會對應到一個master節(jié)點,該master節(jié)點會記錄相對應的buffer block 在各個節(jié)點中鎖狀態(tài)和角色的相關(guān)信息。任何節(jié)點在訪問某一個buffer block時,都需要向他的master節(jié)點進行申請。Master 節(jié)點在收到buffer block 訪問的請求后,會確定該buffer block 塊的當前位置,然后將該buffer block塊傳送給請求用戶。所有的master中的信息,共同組成了GLR(Global Lock Directory)。為了便于大家更直觀理解內(nèi)存融合,下面通過三個場景舉例說明:
圖4 數(shù)據(jù)塊訪問流程
場景示例——內(nèi)存融合
測試參數(shù)說明:測試Block 的master 節(jié)點是C。Master節(jié)點中關(guān)于buffer block一共記錄了4個參數(shù),第一個代表的鎖模式,如S(Shared),E(Exclusive),N(Null)。第二個參數(shù)是定義的是角色,如L(Local),G(Global)。第三個參數(shù)定義的是是否為PI, 0代表否,1代表是。第四個參數(shù)是該鎖對應的instance 節(jié)點。
場景一 節(jié)點B讀取磁盤中的BLOCK塊
(1)B節(jié)點向master C節(jié)點申請讀取block(2,203),BLOCK 中的數(shù)據(jù)為21
(2)主節(jié)點master C 向B節(jié)點賦予block(2,203)的 local 角色shared 模式lock
(3)B節(jié)點從磁盤讀取block塊(2,203)場景二節(jié)點A更新節(jié)點B中緩存的buffer block
圖5 BLOCK塊
(1) A節(jié)點向Master Node C申請寫B(tài)L(2,203),將21修改為22。
(2) Master節(jié)發(fā)現(xiàn)B節(jié)點以Shared 模式持有BL(2,203)。master主節(jié)點要求B節(jié)點將當前的鎖由Shared降為Null模式。
(3) 節(jié)點B將本地的鎖降為Null模式后,將BL(2,203)發(fā)送給A節(jié)點。A節(jié)點獲取local 角色的exclusive 模式的鎖,修改BL(2,2003)中的數(shù)據(jù)為22。場景三B節(jié)點再次更新同一個Block
圖6 場景二節(jié)點A更新節(jié)點B中緩存的buffer block
(1)B節(jié)點向Master 申請X鎖,寫B(tài)lock BL(2,203)。將數(shù)據(jù)修改為23
(2)Master 節(jié)點發(fā)現(xiàn)最新版本的數(shù)據(jù)塊在A節(jié)點上,并且A 以X鎖占有該數(shù)據(jù)塊。Master 節(jié)點要求A節(jié)點的鎖降為NULL模式, 同時由于此后2個節(jié)點中都存在與磁盤中的數(shù)據(jù)不一致的數(shù)據(jù),A節(jié)點的角色升級為GLOBAL,A中當前的數(shù)據(jù)庫記為PI塊。
(3)A節(jié)點鎖降級后,將數(shù)據(jù)塊BL(2,203)傳送到B 節(jié)點,節(jié)點B將數(shù)據(jù)修改為23。好了,通過上文介紹,想必大家對浪潮K-DB數(shù)據(jù)庫的KRAC功能和運行原理有了全面認識。
圖7 場景三B節(jié)點再次更新同一個Block
總結(jié)來講,浪潮K-DB數(shù)據(jù)庫是除了Oracle以外,第二個能夠?qū)崿F(xiàn)共享存儲的集群技術(shù)的產(chǎn)品,采用KRAC多機集群架構(gòu),具有故障自動轉(zhuǎn)移、高伸縮能力和自動負載均衡特性,保障系統(tǒng)可用性的同時,大幅提升可用性和性能 ,還能實現(xiàn)系統(tǒng)性能平滑升級且接近線性的擴展。
核心關(guān)注:拓步ERP系統(tǒng)平臺是覆蓋了眾多的業(yè)務領(lǐng)域、行業(yè)應用,蘊涵了豐富的ERP管理思想,集成了ERP軟件業(yè)務管理理念,功能涉及供應鏈、成本、制造、CRM、HR等眾多業(yè)務領(lǐng)域的管理,全面涵蓋了企業(yè)關(guān)注ERP管理系統(tǒng)的核心領(lǐng)域,是眾多中小企業(yè)信息化建設首選的ERP管理軟件信賴品牌。
轉(zhuǎn)載請注明出處:拓步ERP資訊網(wǎng)http://www.guhuozai8.cn/
本文標題:淺談KRAC內(nèi)存融合技術(shù)
本文網(wǎng)址:http://www.guhuozai8.cn/html/support/11121519746.html