1. 程式人生 > >Oracle的三種高可用叢集方案

Oracle的三種高可用叢集方案

Oracle的三種高可用叢集方案

1 RAC(Real Application Clusters)

                       

多個Oracle伺服器組成一個共享的Cache,而這些Oracle伺服器共享一個基於網路的儲存。這個系統可以容忍單機/或是多機失敗。不過系統內部的多個節點需要高速網路互連,基本上也就是要全部東西放在在一個機房內,或者說一個數據中心內。如果機房出故障,比如網路不通,那就壞了。所以僅僅用RAC還是滿足不了一般網際網路公司的重要業務的需要,重要業務需要多機房來容忍單個機房的事故。

2 Data Guard.(最主要的功能是冗災)

 

Data Guard這個方案就適合多機房的。某機房一個production的資料庫,另外其他機房部署standby的資料庫。Standby資料庫分物理的和邏輯的。物理的standby資料庫主要用於production失敗後做切換。而邏輯的standby資料庫則在平時可以分擔production資料庫的讀負載。

3 MAA

 

MAA(Maximum Availability Architecture)其實不是獨立的第三種,而是前面兩種的結合,來提供最高的可用性。每個機房內部署RAC叢集,多個機房間用Data Guard同步。

RAC概述

共享儲存檔案系統(NFS),或甚至叢集檔案系統(如:OCFS2)主要被用於儲存區域網路(所有節點直接訪問共享檔案系統上儲存器),這就使得節點失效而不影響來自其他節點對檔案系統的訪問,通常,共享磁碟檔案系統用於高可用叢集。

Oracle RAC的核心是共享磁碟子系統,叢集中所有節點必須能夠訪問所有資料、重做日誌檔案、控制檔案和引數檔案,資料磁碟必須是全域性可用的,允許所有節點訪問資料庫,每個節點有它自己的重做日誌和控制檔案,但是其他節點必須能夠訪問它們以便在那個節點出現系統故障時能夠恢復。

Oracle RAC 運行於叢集之上,為 Oracle 資料庫提供了最高級別的可用性、可伸縮性和低成本計算能力。如果叢集內的一個節點發生故障,Oracle 將可以繼續在其餘的節點上執行。Oracle 的主要創新是一項稱為快取記憶體合併的技術。快取記憶體合併使得叢集中的節點可以通過高速叢集互聯高效地同步其記憶體快取記憶體,從而最大限度地低降低磁碟 I/O。快取記憶體最重要的優勢在於它能夠使叢集中所有節點的磁碟共享對所有資料的訪問。資料無需在節點間進行分割槽。Oracle 是唯一提供具備這一能力的開放系統資料庫的廠商。其它聲稱可以執行在叢集上的資料庫軟體需要對資料庫資料進行分割槽,顯得不切實際。企業網格是未來的資料中心,構建於由標準化商用元件構成的大型配置之上,其中包括:處理器、網路和儲存器。Oracle RAC 的快取記憶體合併技術提供了最高等級的可用性和可伸縮性。Oracle 資料庫 10g 和 OracleRAC 10g 顯著降低了運營成本,增強了靈活性,從而賦予了系統更卓越的適應性、前瞻性和靈活性。動態提供節點、儲存器、CPU 和記憶體可以在實現所需服務級別的同時,通過提高的利用率不斷降低成本。

RAC 整合叢集件管理

Oracle RAC 10g 在 Oracle 資料庫 10g 執行的所有平臺上提供了一個完整整合的叢集件管理解決方案。這一叢集件功能包括叢集連線、訊息處理服務和鎖定、叢集控制和恢復,以及一個工作負載管理框架(將在下文探討)。Oracle RAC 10g 的整合叢集件管理具有以下優勢:

(一) 成本低。Oracle 免費提供這一功能。

(二) 單一廠商支援。消除了相互推諉的問題。

(三) 安裝、配置和持續維護更簡單。Oracle RAC 10g 叢集件使用標準 Oracle 資料庫管理工具進行安裝、配置和維護。這一過程無須其它的整合步驟。

(四) 所有平臺,質量始終如一。與第三方產品相比,Oracle 對新軟體版本進行了更嚴格的測試。

(五) 所有平臺,功能始終如一。例如,一些第三方叢集件產品限制了叢集內可以支援的節點的數量。藉助Oracle RAC 10g,所有平臺可以支援多達 64 個節點。使用者還可以在所有平臺上獲得一致的響應體驗,從而有效解決了高可用性挑戰,包括伺服器節點故障、互連故障以及 I/O 隔離現象等。

(六) 支援高階功能。這包括整合監視和通知功能,從而在發生故障時,在資料庫和應用層之間實現快速協調的恢復。

RAC 的體系結構

RAC 是 Oracle 資料庫的一個群集解決方案,是有著兩個或者兩個以上的資料庫節點協調運作能力的。如下圖所示的 RAC 結構圖:

 

叢集管理器(Cluster Manager)在集群系統中對其他各個模組進行整合,通過高速的內連線來提供群集節點之間的通訊。各節點之間內連線使用心跳線互聯,心跳線上的資訊功能確定群集邏輯上的節點成員資訊和節點更新情況,以及節點在某個時間點的執行狀態,保證群集系統正常執行。通訊層管理節點之間的通訊。它的職責是配置,互聯群集中節點資訊,在群集管理器中使用由心跳機制產生的資訊,由通訊層負責傳輸,確保資訊的正確到達。還有一些群集監視程序不斷驗證系統的不同領域執行狀況。例如,心跳監測不斷驗證的心跳機制的運作是否良好。在一個應用環境當中,所有的伺服器使用和管理同一個資料庫,目的是分散每一臺伺服器的工作量。硬體上至少需要兩臺以上的伺服器,而且還需要一個共享儲存裝置;同時還需要兩類軟體,一類是叢集軟體,另外一類就是 Oracle 資料庫中的 RAC 元件。同時所有伺服器上的 OS 都應該是同一類 OS,根據負載均衡的配置策略,當一個客戶端傳送請求到某一臺服務的 listener 後,這臺伺服器根據負載均衡策略,會把請求傳送給本機的 RAC元件處理,也可能會發送給另外一臺伺服器的 RAC 元件處理,處理完請求後,RAC 會通過群集軟體來訪問共享儲存裝置。邏輯結構上看,每一個參加群集的節點有一個獨立的例項,這些例項訪問同一個資料庫。節點之間通過叢集軟體的通訊層(Communication Layer)來進行通訊。同時為了減少 I/O 的消耗,存在一個全域性快取服務,因此每一個數據庫的例項,都保留了一份相同的資料庫 cache。RAC 中的特點如下:

  • l   每一個節點的例項都有自己的 SGA;
  • l   每一個節點的例項都有自己的後臺程序
  • l   每一個節點的實力都有自己的 redo logs
  • l   每一個節點的例項都有自己的 undo 表空間
  • l   所有節點都共享一份 datafiles 和 controlfiles

RAC 的結構組成和機制

在 Oracle9i 之前,RAC 稱為 OPS(Oracle Parallel Server)。RAC 與 OPS 之間的一個較大區別是,RAC 採用了Cache Fusion(高快取合併)技術,節點已經取出的資料塊更新後沒有寫入磁碟前,可以被另外一個節點更新,然後以最後的版本寫入磁碟。在 OPS 中,節點間的資料請求需要先將資料寫入磁碟,然後發出請求的節點才可以讀取該資料。使用 Cache Fusion 時,RAC 的各個節點間資料緩衝區通過高速、低延遲的內部網路進行資料塊的傳輸。下圖是一個典型的 RAC 對外服務的示意圖,一個 Oracle RAC Cluster 包含了如下的部分

 

  1. 叢集的節點(Cluster node)——2 個到 N 個節點或者主機執行 Oracle Database Server。
  2. 私有網路(Network Interconnect)——RAC 之間需要一個高速互聯的私有網路來處理通訊和 Cache Fusion。
  3. 共享儲存(shared Storage)——RAC 需要共享儲存裝置讓所有的節點都可以訪問資料檔案。
  4. 對外服務的網路(Production Network)——RAC 對外服務的網路。客戶端和應用都通過這個網路來訪問。

RAC 後臺程序

Oracle RAC 有一些自己獨特的後臺程序,在單一例項中不發揮配置作用。如下圖所示,定義了一些 RAC 執行的後臺程序。這些後臺程序的功能描述如下。

 

(1)LMS(Global cache service processes 全域性快取服務程序)程序主要用來管理叢集內資料塊的訪問,並在不同例項的 Buffer Cache 中傳輸資料塊映象。直接從控制的例項的快取複製資料塊,然後傳送一個副本到請求的例項上。並保證在所有例項的 Buffer Cache 中一個數據塊的映象只能出現一次。LMS 程序靠著在例項中傳遞訊息來協調資料塊的訪問,當一個例項請求資料塊時,該例項的 LMD 程序發出一個數據塊資源的請求,該請求指向主資料塊的例項的 LMD 程序,主例項的 LMD 程序和正在使用的例項的 LMD 程序釋放該資源,這時擁有該資源的例項的 LMS 程序會建立一個數據塊映象的一致性讀然後把該資料塊傳遞到請求該資源的例項的BUFFER CACHE 中。LMS 程序保證了在每一時刻只能允許一個例項去更新資料塊,並負責保持該資料塊的映象記錄(包含更新資料塊的狀態 FLAG)。RAC 提供了 10 個 LMS 程序(0~9),該程序數量隨著節點間的訊息傳遞的資料的增加而增加。(2)LMON(Lock Monitor Process,鎖監控程序)是全域性佇列服務監控器,各個例項的 LMON 程序會定期通訊,以檢查叢集中各個節點的健康狀況,當某個節點出現故障時,負責叢集重構、GRD 恢復等操作,它提供的服務叫做 Cluster Group Service(CGS)。

LMON 主要藉助兩種心跳機制來完成健康檢查。

(一) 節點間的網路心跳(Network Heartbeat):可以想象成節點間定時的傳送 ping 包檢測節點狀態,如果能在規定時間內收到迴應,就認為對方狀態正常。

(二) 通過控制檔案的磁碟心跳(controlfile heartbeat):每個節點的 CKPT 程序每隔 3 秒鐘更新一次控制檔案的資料塊,這個資料塊叫做 Checkpoint Progress Record,控制檔案是共享的,所以例項間可以互相檢查對方是否及時更新來判斷。

(三) LMD(the global enqueue service daemon,鎖管理守護程序)是一個後臺程序,也被稱為全域性的佇列服務守護程序,因為負責對資源的管理要求來控制訪問塊和全域性佇列。在每一個例項的內部,LMD 程序管理輸入的遠端資源請求(即來自叢集中其他例項的鎖請求)。此外,它還負責死鎖檢查和監控轉換超時。

(四) LCK(the lock process,鎖程序)管理非快取融合,鎖請求是本地的資源請求。LCK 程序管理共享資源的例項的資源請求和跨例項呼叫操作。在恢復過程中它建立一個無效鎖元素的列表,並驗證鎖的元素。由於處理過程中的 LMS 鎖管理的首要職能,只有一個單一的 LCK 程序存在每個例項中。

(五) DIAG(the diagnosability daemon,診斷守護程序)負責捕獲 RAC 環境中程序失敗的相關資訊。並將跟蹤資訊寫出用於失敗分析,DIAG 產生的資訊在與 Oracle Support 技術合作來尋找導致失敗的原因方面是非常有用的。每個例項僅需要一個 DIAG 程序。

(六) GSD(the global service daemon,全域性服務程序)與 RAC 的管理工具 dbca、srvctl、oem 進行互動,用來完成例項的啟動關閉等管理事務。為了保證這些管理工具執行正常必須在所有的節點上先start gsd,並且一個 GSD 程序支援在一個節點的多個 rac.gsd 程序位ORACLE_HOME/srvm/log/gsdaemon.log。GCS 和 GES 兩個程序負責通過全域性資源目錄(Global Resource Directory GRD)維護每個資料的檔案和快取塊的狀態資訊。當某個例項訪問資料並快取了資料之後,叢集中的其他例項也會獲得一個對應的塊映象,這樣其他例項在訪問這些資料是就不需要再去讀盤了,而是直接讀取 SGA 中的快取。GRD 存在於每個活動的 instance 的記憶體結構中,這個特點造成 RAC 環境的 SGA 相對於單例項資料庫系統的 SGA 要大。其他的程序和記憶體結構都跟單例項資料庫差別不大。

RAC 共享儲存

RAC 需要有共享儲存,獨立於例項之外的資訊,如上面提到的ocr 和 votedisk 以及資料檔案都存放在這個共享儲存裡的。有OCFS、OCFS2、RAW、NFS、ASM 等這樣的一些儲存方式。OCFS(Oracle Cluster File System) 和 OCFS2 就是一個檔案系統而已,和 NFS 一樣,提供一種叢集環境中的共享儲存的檔案系統。RAW 裸裝置也是一種儲存方式,是 oracle11g 之前的版本中 RAC 支援的儲存方式,在 Oralce9i 之前,OPS/RAC的支援只能使用這樣的方式,也就是把共享儲存對映到 RAW Device,然後把 Oracle 需要的資料選擇 RAW device儲存,但是 RAW 相對於檔案系統來說不直觀,不便於管理,而且 RAW Device 有數量的限制,RAW 顯然需要有新的方案來代替,這樣就有了 OCFS 這樣的檔案系統。當然,這只是 Oracle 自己的實現的集檔案系統而已,還有其他廠商提供的檔案系統可以作為儲存的選擇方案。ASM 只是資料庫儲存的方案而已,並不是 cluster 的方案,所以這裡 ASM 應該是區別於 RAW 和 OCFS/OCFS2同一級別的概念,RAW 和 OCFS/OCFS2 不僅可以作為資料庫儲存的方案,同時也可以作為 Clusterware 裡的儲存方案,是 CRS 裡需要的 storage,而 ASM 僅作為資料庫的儲存而已,嚴格來說僅是 RAC 中的一個節點應用(nodeapps)。ASM 對於 clusterware 安裝時需要的 ocr 和 votedisk 這兩項還不支援,畢竟 ASM 本身就需要一個例項,而 CRS 是完全在架構之外的,這也就是為什麼使用了 ASM 的方案,卻總還要加上 OCFS/OCFS2 和 RAW 其中的一個原因。各種 RAC 共享儲存方式的對比如下:

  1. 叢集檔案系統——支援 windows 和 Linux 的 OCFS/OCFS2
  2. AIX 下的 GPFS 等方式——優點是管理方便,表示也很直觀,但缺點是基於檔案系統管理軟體,又要經過 OS 的 cache 處理,效能上和穩定性上都有欠缺,所以不適合在生產環境下使用。可以支援 CRS 叢集軟體檔案和資料庫檔案。
  3. RAW 裸裝置方式——通過硬體支援的共享儲存系統,直接用 RAW 裝置儲存,可以支援叢集軟體檔案和資料庫檔案。
  4. 網路檔案系統(NFS)——通過 NFS 實現共享儲存,不過需要經過 Oracle 認證的 NFS 才行,可以支援CRS 叢集軟體檔案和資料庫檔案。
  5. ASM——集合 RAW 方式 I/O 高效能和叢集檔案系統易管理等優點,Oracle10g 下推出的共享儲存方式,但是本身 ASM 就是需要 Oracle 的例項支援,所以 ASM 僅支援資料庫檔案,而不支援 CRS 檔案。

RAC 資料庫和單例項資料庫的區別

為了讓 RAC 中的所有例項能夠訪問資料庫,所有的 datafiles、control files、PFILE/Spfile 和 redo log files 必須儲存在共享磁碟上,並且要都能被所有節點同時訪問,就涉及到裸裝置和叢集檔案系統等。RAC database 在結構上與單例項的不同之處:至少為每個例項多配置一個 redo 執行緒,比如:兩個例項組成的叢集至少要 4 個 redo log group。每個例項兩個 redo group。另外要為每一個例項準備一個 UNDO 表空間。

1、redo 和 undo,每個例項在做資料庫的修改時誰用誰的 redo 和 undo 段,各自鎖定自己修改的資料,把不同例項的操作相對的獨立開就避免了資料不一致。後面就要考慮備份或者恢復時 redo log 和歸檔日誌在這種情況下的特殊考慮了。

2、記憶體和程序各個節點的例項都有自己的記憶體結構和程序結構.各節點之間結構是基本相同的.通過 Cache Fusion(快取融合)技術,RAC 在各個節點之間同步 SGA 中的快取資訊達到提高訪問速度的效果也