Oracle系列:Oracle RAC叢集體系結構

G8bao7發表於2015-09-09

 一、 Oracle叢集體系結構

Oracle RAC,全稱是Oracle Real Application Cluster,即真正的應用叢集,是oracle提供的一個並行叢集系統,整個叢集系統由Oracle Clusterware (叢集就緒軟體)和 Real Application Clusters(RAC)兩大部分組成。
 
oracle RAC的實質是位於不同作業系統的Oracle例項節點同時訪問同一個Oracle資料庫,每個節點間透過私有網路進行通訊,互相監控節點的執行狀 態,oracle資料庫所有的資料檔案、聯機日誌檔案、控制檔案等均放在叢集的共享儲存裝置上,而共享儲存裝置可以是RAW、ASM、OCFS2等,所有 叢集節點可以同時讀寫共享儲存。Oracle RAC的基本拓撲結構如下所示:

 
由拓撲結構可知:
一個 Oracle Rac資料庫有多個伺服器節點組成,每個伺服器節點上都有自己獨立的OS、ClusterWare、oracle Rac資料庫程式等,並且每個節點都有自己的網路監聽器。ClusterWare是一個叢集軟體,主要用於叢集系統管理,oracle Rac資料庫程式用於提供oracle例項程式,以供客戶端訪問叢集系統,監聽服務主要用於監控自己的網路埠資訊,所有的服務和程式透過作業系統都去訪 問一個共享儲存,最終完成資料的讀寫。共享儲存的實現方式有很多種,可以透過使用自動儲存管理(ASM)、Oracle叢集檔案系統(OCFS)、裸裝置 (Raw)、網路區域儲存(NAS)等來保證整個叢集系統資料的一致性。
從 Oracle10g起,Oracle提供了自己的叢集軟體,即Oracle clusterware,它透過CRS(即Cluster Ready Services)來實現,這個軟體是安裝oracle rac的前提,也是RAC環境穩定執行的基礎,在oracle10g之前的版本,安裝RAC時必須藉助與第三方的叢集軟體,而在oracle10g以後, 安裝oracle rac時,可以用oracle自帶的叢集軟體,也可以使用經過RAC認證的第三方叢集軟體來代替。
從oracle的執行機制來說,叢集中每臺伺服器就是一個oracle例項,多個oracle例項對應同一個oracle資料庫,組成了oracle資料庫叢集。請看下圖:
 

從圖中可以看 出,執行在兩個節點上的資料庫例項訪問同一個RAC資料庫,並且兩個節點的本地磁碟僅用來存放oracle安裝程式和ClusterWare軟體,而在共 享儲存上,存放了oracle的資料檔案、控制檔案、聯機日誌檔案、歸檔日誌檔案等,這是安裝oracle Rac時的一種資料儲存分配方式,其實,RAC提供了多種資料儲存方式,這個將在下面進行獨立介紹。
 
 
二、 Oracle Clusterware體系結構與程式介紹
 
2.1、Oracle Clusterware 簡介
Cluster Ready Services,簡稱CRS,是oracle開發的一個叢集軟體,與其它叢集軟體類似,CRS主要完成叢集成員管理、心跳監控、故障切換等功能,CRS 要求每個叢集節點的作業系統必須相同,這樣,透過CRS將多個節點的作業系統繫結到了一起,客戶端對叢集的訪問,就像訪問一臺伺服器一樣。
CRS主要有兩個叢集套件組成,分別是voting disk和Oracle Cluster Registry。
voting disk,即為表決磁碟,叢集中每個節點定期評估自身的健康情況,然後會把它的狀態資訊放入到表決磁碟上。並且節點間也會互相檢視其執行狀態,並把資訊傳 遞給其他節點進而寫入表決磁碟。當叢集節點發生故障時,還可以透過表決磁碟進行投票仲裁等,因此,表決磁碟必須放在共享儲存裝置上。以保證每個節點都能訪 問到。表決磁碟可以是一個裸磁碟分割槽,也可以是一個獨立的檔案。由於它僅記錄節點執行資訊,磁碟大小一般在10-20M左右即可。
Oracle Cluster Registry,簡稱OCR,即叢集註冊服務,OCR主要用於記錄RAC中叢集和資料庫的配置資訊。這些資訊包括了叢集節點的列表、叢集資料庫例項到節點的對映以及CRS應用程式資源資訊。
CRS使用兩 種心跳裝置來驗證節點成員的狀態,保證叢集的完整性:一個是表決磁碟,叢集同步服務程式每隔幾秒鐘都會向表決磁碟寫入一條心跳資訊,叢集透過表決磁碟即可 驗證節點的狀態,如果某個節點在指定的最大時間段內沒有向表決磁碟寫入資訊,叢集就認為此節點失效了,進而執行故障切換。另一個心跳是節點間私有乙太網的 心跳,透過這個心跳機制可以判斷節點間是否出現了網路故障。兩種心跳機制的結合,有效的增加了叢集的可靠性。
另外,CRS建議用於內部通訊的私有乙太網心跳必須與用於RAC節點間通訊的網路分開,也就是不能在同一網路中,如果RAC節點間通訊的網路與私有乙太網心跳在同一個網路內,那麼,必須保證該網路不能被非叢集系統的節點訪問到。
 
 
2.2、Oracle Clusterware 程式介紹
Oracle Clusterware 透過Cluster Ready Services來完成叢集功能,CRS包含了一組相互協作的後臺程式,下面詳細介紹下CRS中幾個很重要的後臺程式。
1 Cluster Synchronization Services
簡稱CSS,用於管理與協調叢集中各節點的關係,並用於節點間通訊,當節點在加入或離開叢集時,都由css進行通知叢集。CSS在叢集中對應的後臺程式為CSSD,該程式由oracle使用者執行和管理。當節點發生故障時,cssd會自動重啟作業系統。
2 Cluster Ready Services
簡稱CRS, 是管理群集內高可用操作的主要程式,在叢集中CRS管理所有資源,包括資料庫、服務、例項、vip地址、監聽器、應用程式等,CRS在叢集中對應的後臺進 程為CRSD,該程式可以對叢集資源進行啟動、停止、監視和容錯等操作,正常狀態下,CRSD監控節點各種資源,當某個資源發生異常時,自動重啟或者切換 該資源。
3 Process Monitor Daemon
簡稱 OPROCD,此程式被鎖定在記憶體中,用於監控叢集及提供I/O防護(I/O fencing)。OPROCD執行在每個節點上,且定期執行健康檢測,如果在超過它所希望的間隔內,仍然不能和某個節點通訊,那麼,OPROCD將會重 置處理器及重啟節點。一個OPROCD故障也將導致Clusterware重啟節點。
4 Oracle Notification Service
簡稱ONS,即oracle通告服務,主要用於釋出和訂閱Fast Application Notification事件。
5 Event Management
簡稱EVM,是一個事件檢測的後臺程式,由oracle使用者執行和管理。
 
三、 RAC資料庫體系機構與程式
 
3.1、RAC簡介
RAC是一個具有共享快取體系結構的叢集資料庫,它克服了傳統的不共享和共享磁碟方法的限制,為所有業務應用程式提供了一種具有可伸縮性和可用性的資料庫解決方案,它一般與Oracle Clusterware 或第三方叢集軟體共同組成Oracle叢集系統。
RAC是一個全共享式的體系架構,它的所有資料檔案、控制檔案、聯機日誌檔案、引數檔案等都必須存放在共享磁碟中,因為只有這樣,叢集所有節點才能訪問到,RAC支援多種儲存方式,可以使用下面幾種方式的任意一種:
(1)裸裝置(Raw devices)
也就是不經過檔案系統,將資料直接寫入磁碟中,這種方式的好處是磁碟I/O效能很高,適合寫操作頻繁的業務系統,但缺點也很明顯:資料維護和備份不方便,備份只能透過dd命令或者基於塊級別的備份裝置來完成,這無疑增加了維護成本。
(2)叢集檔案系統
為了支援共享 儲存,oracle開發出了叢集檔案系統OCFS,這個檔案系統可用於Windows、Linux和Solaris,現在已經發展到了OCFS2,透過 OCFS2檔案系統,多個叢集節點可以同時讀寫一個磁碟而不破壞資料,但對於大量讀寫的業務系統,效能不是很高。另外,oracle RAC也支援第三方的叢集檔案系統,例如Redhat的GFS等。
(3)網路檔案系統(NFS)
(4)Automated Storage Management
Automated Storage Management,簡稱ASM,是Oracle推薦的共享資料儲存方式,它是Oracle資料庫10g包含的一個特性。ASM其實就是RAW方式儲存 資料,但是加入了資料管理功能,它透過將資料直接寫入磁碟,避免了經過檔案系統而產生的I/O消耗。因而,使用ASM可以很方便地管理共享資料,並提供異 步I/O的效能。ASM還可以透過分配I/O負載來最佳化效能,免除了手動調整I/O的需要。
 
3.2、Oracle RAC的特點
透過RAC資料庫,可以構建一個高效能、高可靠的資料庫叢集系統,RAC的優勢在於:
(1)可以實現多個節點間的負載均衡
RAC資料庫叢集可以根據設定的排程策略,在叢集節點間實現負載均衡,因此,RAC資料庫每個節點都是工作的,同時也處於互相監控狀態,當某個節點出現故障時,RAC叢集自動將失敗節點從叢集隔離,並將失敗節點的請求自動轉移到其它健康節點上,從而實現服務透明切換。
(2)可以提供高可用服務
這個是Oracle Clusterware實現的功能,透過CRS可以實現節點狀態監控,故障透明轉移,這保證了oracle資料庫可以對外不間斷的提供服務。
(3)透過橫向擴充套件提高了併發連線數
RAC這個優點非常適合大型的聯機事務系統中。
(4)透過並行執行技術提高了事務響應時間
這個是RAC叢集的一大優勢,通常用於資料分享系統中。
(5)具有很好的擴充套件性
在叢集系統不能滿足繁忙的業務系統時,RAC資料庫可以很方便的新增叢集節點,且可以線上完成節點的新增,並自動加入叢集系統,不存在當機時間;同時在不需要某個叢集節點時,刪除節點也非常簡單。
RAC資料庫也有一定的缺點:
(1)與單機資料庫相比,管理維護更復雜,並對維護人員要求更高
(2)底層規劃設計不好時,系統整體效能會較差,甚至不如單機系統的效能。所以,如果對RAC資料庫不是很瞭解,不建議馬上在生產環境中使用。
(3)由於RAC叢集系統需要多個節點,那麼需要購買多臺伺服器,同時需要oracle企業級版本資料庫,這無形中也增加了軟硬體成本。
 
3.3、RAC程式管理
RAC資料庫是由多個節點構成的,每個節點就是一個資料庫例項,而每個例項都有自己的後臺程式和記憶體結構,並且在RAC叢集中,每個例項的後臺程式和記憶體結構都是相同的,從整體上看起來,就像是一個單一資料庫的映象,但是,RAC資料庫在結構上與單例項庫也有不同之處:
(1) RAC資料庫的每個例項至少擁有一個額外的重做執行緒(redo thread)
(2) RAC資料庫的每個例項都擁有自己的撤消表空間(undo tablespace) 
很顯然,這種 機制是每個例項獨立的使用自己的重做執行緒和撤消表空間,各自鎖定自己修改的資料。  RAC的這種設計方式,把多個例項的操作相對獨立的分開。那麼RAC資料庫如何實現節點資料的一致性呢,其實每個RAC例項的SGA內有一個 buffer cache(緩衝區),透過Cache Fusion(快取融合)技術,RAC在各個節點之間同步SGA中的快取資訊,從而保證了節點資料的一致性,同時也提高了叢集的訪問速度。
RAC資料庫最大的特點是共享,那麼如何實現多個節點有條不紊的資料共享呢,這就是要說的RAC的兩個程式:即Global Cache Service (GCS) 和 the Global Enqueue Service (GES)
全域性快取服務 (GCS)和全域性佇列服務(GES)是最基本的RAC程式,主要用於協調對共享資料庫和資料庫內的共享資源的同時訪問。同時,GES和GCS透過使用全域性 資源目錄(Global Resource Directory,GRD)來記錄和維護每個資料檔案的狀態資訊,而GRD儲存在記憶體中,內容分佈儲存在所有例項上。每個例項都管理部分內容。
 
      RAC中透過幾個特別的程式與GRD相結合,使得RAC可以使用快取融合技術,這幾個特別程式是:
? Global Cache Service Processes(LMSn)
LMS程式主要用來管理叢集內資料塊的訪問,並在不同例項的BUFFER CACHE中傳輸塊映象。 
? Global Enqueue Service Monitor(LMON)
LMON主要監視群集內的全域性資源和叢集間的資源互動,並管理例項和處理異常,以及叢集佇列的恢復操作。 
? Global Enqueue Service Daemon(LMD)
LMD程式主要管理對全域性佇列和全域性資源的訪問,並更新相應佇列的狀態,處理來自於其他例項的資源請求。 
? Lock Processes(LCK)
LCK程式主要用來管理例項間資源請求和跨例項呼叫操作,並管理除Cache Fusion以外的資源請求,比如library和row cache的請求等。 
? Diagnosability Daemon(DIAG)
DIAG程式主要用來捕獲例項中失敗程式的診斷資訊,並生成相應的TRACE檔案。
 
 
3.4、RAC資料庫儲存規劃
安裝RAC資料庫時涉及到的軟體有Oracle Clusterware、Oracle Rac資料庫軟體,同時還涉及到voting disk、OCR等,關於每部分需要佔用磁碟空間大小如下:
 
在瞭解了RAC每部分所需的磁碟空間大小後,就可以根據每部分的用途來規劃資料儲存了。RAC廣泛支援各種資料儲存方式,例如單一日誌檔案系統 ext2/ext3、叢集檔案系統OCFS2/GFS、網路檔案系統NFS、裸裝置RAW、自動儲存管理ASM等,下表列出了可以使用的儲存型別:

 
具體使用哪種儲存策略,要根據安裝RAC環境的不同而不同。這裡推薦三種常用的儲存方式:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26250550/viewspace-1795056/,如需轉載,請註明出處,否則將追究法律責任。

相關文章