ORACLE RAC叢集的體系結構
RAC是一個完整的叢集應用環境,它不僅實現了叢集的功能,而且提供了執行在叢集之上的應用程式,即Oracle資料庫。無論與普通的叢集相比,還是與普通的Oracle資料庫相比,RAC都有一些獨特之處。
RAC由至少兩個節點組成,節點之間通過公共網路和私有網路連線,其中私有網路的功能是實現節點之間的通訊,而公共網路的功能是提供使用者的訪問。在每個節點上分別執行一個Oracle資料庫例項和一個監聽器,分別監聽一個IP地址上的使用者請求,這個地址稱為VIP(Virtual IP)。使用者可以向任何一個VIP所在的資料庫伺服器發出請求,通過任何一個數據庫例項訪問資料庫。Clusterware負責監視每個節點的狀態,如果發現某個節點出現故障,便把這個節點上的資料庫例項和它所對應的VIP以及其他資源切換到另外一個節點上,這樣可以保證使用者仍然可通過這個VIP訪問資料庫。
在普通的Oracle資料庫中,一個數據庫例項只能訪問一個數據庫,而一個數據庫只能被一個數據庫例項開啟。在RAC環境中,多個數據庫例項同時訪問同一個資料庫,每個資料庫例項分別在不同的節點上執行,而資料庫存放在共享的儲存裝置上。
通過RAC,不僅可以實現資料庫的併發訪問,而且可以實現使用者訪問的負載均衡。使用者可以通過任何一個數據庫例項訪問資料庫,例項之間通過內部通訊來保證事務的一致性。例如,當用戶在一個例項修改資料時,需要對資料加鎖。當另一個使用者在其他例項中修改同樣的資料時,便需要等待鎖的釋放。當前一個使用者提交事務時,後一個使用者立即可以得到修改之後的資料。
RAC叢集環境的基本結構如圖2.1所示。
在建立RAC叢集時,一般來說,Clusterware軟體和Oracle資料庫軟體安裝在每個節點的本地檔案系統中,而那些要被所有節點訪問的檔案則存放在共享的儲存裝置中。在安裝Clusterware軟體時,需要在共享儲存裝置中建立OCR和Voting檔案。其中,在OCR檔案中記錄RAC叢集的配置資訊,在Voting檔案記錄每個節點的成員資格資訊。每個節點中的RAC叢集在啟動時,都需要讀這兩個檔案,以確定當前節點的成員資格,並獲得整個叢集的配置資訊。在建立資料庫時,資料庫檔案、重做日誌檔案、控制檔案、引數檔案也存放在共享的儲存裝置中。對於共享儲存裝置,RAC有以下幾種使用方式:
圖2.1 RAC的基本結構 |
在共享儲存裝置中建立叢集檔案系統,如Linux中的OCFS、AIX中的GPFS等。
在共享儲存裝置中建立檔案系統,然後在NFS服務中將這些檔案系統設定為共享檔案系統。
建立ASM磁碟組,將共享儲存裝置放在ASM磁碟組中。
無論以什麼樣的方式使用共享儲存裝置,多個節點需要能夠同時訪問儲存於這種裝置中的檔案。因此,與單機中的儲存裝置相比,共享儲存裝置需要向多個節點提供併發訪問。
從11.2版本開始,Oracle已經完全取消了對裸裝置的支援,這就意味著,無論是OCR和Voting檔案,還是資料庫檔案,都不能儲存在裸裝置中了。Oracle目前強力推薦使用的儲存技術是ASM。在安裝Grid Infrastructure軟體時,同時安裝了Clusterware軟體和ASM軟體,這時就可以建立ASM例項和ASM磁碟組,並把OCR和Voting檔案儲存在ASM磁碟組中。在建立資料庫時,還可以再建立其他的ASM磁碟組,把資料庫檔案和快速恢復區(Flash recovery area)也存放在ASM磁碟組中。
為了訪問ASM磁碟組中的檔案,在每個節點上需要執行一個ASM例項。ASM例項的功能是對ASM磁碟組進行管理和控制。在一個RAC叢集環境中,可以建立多個ASM磁碟組,在不同的磁碟組可以存放不同型別的檔案。
使用ASM磁碟組的RAC如圖2.2所示。
(點選檢視大圖)圖2.2 使用ASM磁碟組的RAC |
在單例項資料庫中,一個例項只能訪問一個數據庫,一個數據庫只能被一個例項開啟。例項是記憶體中的結構,包括SGA(System Global Area)和後臺程序兩部分。其中SGA是記憶體中一些緩衝區的集合。以下幾種緩衝區是每個例項都需要的:
資料庫快取記憶體 存放使用者最近所訪問的資料。
重做日誌緩衝區 存放與使用者事務有關的重做日誌。
共享池 包括庫緩衝區和資料字典緩衝區。其中,在庫緩衝區中存放使用者最近所執行過的SQL語句以及它們的分析程式碼和執行計劃。在資料字典緩衝區中存放使用者最近所訪問過的資料庫物件的資料字典資訊。
在啟動例項時,系統在記憶體中分配SGA,同時啟動若干後臺程序。後臺程序的主要功能是在例項和資料庫之間交換資料。以下後臺程序是每個例項都需要的:
DBWR 用於把資料庫快取記憶體中的髒緩衝區寫入資料檔案。
LGWR 用於把重做日誌緩衝區中的重做日誌寫入重做日誌檔案。
SMON 用於進行例項恢復。
PMON 用於監視使用者程序的狀態,如果發現使用者程序意外終止,便回收相關的資源,回滾沒有提交的事務,並釋放使用者程序對資料所加的鎖。
CKPT 用於發出檢查點,對資料檔案、控制檔案和重做日誌檔案進行同步。
ARCH 用於對重做日誌檔案進行歸檔。
資料庫表現為磁碟上的檔案,使用者通過例項訪問這些檔案中的資料。資料庫中的檔案可以存放在計算機的內建磁碟上,也可以存放在外接的儲存裝置中。以下檔案是每個資料庫都需要的:
資料檔案 用於存放使用者所關心的業務資料。
控制檔案 用於存放資料庫的結構資訊。
重做日誌檔案 用於存放與使用者事務有關的重做日誌。
除了上述三種檔案以外,在資料庫中還有歸檔日誌檔案、口令檔案、跟蹤檔案、警告檔案、引數檔案等各種型別的檔案。
單例項資料庫的結構如圖2.3所示。
圖2.3 單例項資料庫的結構 |
在RAC叢集資料庫中,每個資料庫例項都具有資料庫快取記憶體等幾種記憶體結構,以及SMON等後臺程序,這一點與單例項資料庫是相同的。然而,多個例項需要同時訪問資料庫中的資料,這就要求RAC保證資料的一致性。RAC通過“快取融合”(Cache Fusion)技術來保證資料在多個例項之間的一致性。
利用“快取融合”技術,RAC把每個資料庫例項中的資料庫快取記憶體,在邏輯上虛擬為一個大的快取,每個資料庫例項在處理資料時,就好像是處於自己的快取中一樣。在每個資料庫例項中還有另外兩個後臺程序GCS(Global Cache Service)和GES(Global Enqueue Service),用來維護每個資料檔案的狀態,以及那些已經被讀到資料庫快取記憶體中的資料塊的狀態,這些狀態資訊記錄在一個稱為GRD(Global Resource Directory)的記憶體資料結構中。當一個數據庫例項訪問資料時,資料所在的資料塊被讀到這個例項的資料庫快取記憶體中,其他資料庫例項將從前一個例項中得到這個資料塊的映像。如果資料塊的內容被修改,其他例項也將得到被修改之後的映像。由此可見,當多個數據庫例項同時訪問同樣的資料時,資料直接在這些例項的資料庫快取記憶體之間傳輸,而不需要重複地從資料檔案中讀取。為了實現“快取融合”,在不同的例項之間需要進行相互通訊,這種通訊是通過私有網路來完成的。
從上述內容可以看出,私有網路在整個RAC叢集環境中起著非常重要的作用:一方面,Clusterware通過私有網路傳送心跳訊號,探測每個節點的狀態;另一方面,資料庫例項通過私有網路實現“快取融合”。為了避免對私有網路的通訊帶來干擾,建議大家不要通過私有網路實現使用者的訪問。
在RAC叢集環境中,GCS和GES程序表現為例項中的以下後臺程序:
LMON
LMD
LMS
LCK
ACMS
這些後臺程序相互合作,保證了資料在多個數據庫例項之間的一致性,一旦資料在一個例項中被修改,在其他例項中可以得到相同的資料。
在RAC叢集環境中,由於多個節點同時訪問資料庫,所以資料庫中的檔案都存放在共享的儲存裝置中。由於每個例項都獨立地處理自己的事務,所以每個例項都有自己的重做日誌組和UNDO表空間,臨時表空間和業務資料所在的表空間以及控制檔案都是多個節點共享的。為了對重做日誌組進行切換和歸檔,每個資料庫例項至少需要兩個重做日誌組。
RAC資料庫伺服器的結構如圖2.4所示(在圖中只列出部分後臺程序)。
圖2.4 RAC資料庫的結構 |