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