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