天天看點

Oracle的三種高可用叢集方案

轉載自:

http://www.cnblogs.com/baiboy/p/orc2.html#_label1

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 包含了如下的部分

叢集的節點(Cluster node)——2 個到 N 個節點或者主機運作 Oracle Database Server。

私有網絡(Network Interconnect)——RAC 之間需要一個高速互聯的私有網絡來處理通信和 Cache Fusion。

共享存儲(shared Storage)——RAC 需要共享儲存設備讓所有的節點都可以通路資料檔案。

對外服務的網絡(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 共享存儲方式的對比如下:

叢集檔案系統——支援 windows 和 Linux 的 OCFS/OCFS2

AIX 下的 GPFS 等方式——優點是管理友善,表示也很直覺,但缺點是基于檔案系統管理軟體,又要經過 OS 的 cache 處理,性能上和穩定性上都有欠缺,是以不适合在生産環境下使用。可以支援 CRS 叢集軟體檔案和資料庫檔案。

RAW 裸裝置方式——通過硬體支援的共享存儲系統,直接用 RAW 裝置存儲,可以支援叢集軟體檔案和資料庫檔案。

網絡檔案系統(NFS)——通過 NFS 實作共享存儲,不過需要經過 Oracle 認證的 NFS 才行,可以支援CRS 叢集軟體檔案和資料庫檔案。

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 中的緩存資訊達到提高通路速度的效果也保證了一緻性。