知識分享:Oracle的三種高可用集群方案
Oracle的三種高可用集群方案
1 RAC(Real Application Clusters)
多個Oracle服務(wù)器組成一個共享的Cache,而這些Oracle服務(wù)器共享一個基于網(wǎng)絡(luò)的存儲。這個系統(tǒng)可以容忍單機(jī)/或是多機(jī)失敗。不過系統(tǒng)內(nèi)部的多個節(jié)點(diǎn)需要高速網(wǎng)絡(luò)互連,基本上也就是要全部東西放在在一個機(jī)房內(nèi),或者說一個數(shù)據(jù)中心內(nèi)。如果機(jī)房出故障,比如網(wǎng)絡(luò)不通,那就壞了。所以僅僅用RAC還是滿足不了一般互聯(lián)網(wǎng)公司的重要業(yè)務(wù)的需要,重要業(yè)務(wù)需要多機(jī)房來容忍單個機(jī)房的事故。
2 Data Guard.(最主要的功能是冗災(zāi))
Data Guard這個方案就適合多機(jī)房的。某機(jī)房一個production的數(shù)據(jù)庫,另外其他機(jī)房部署standby的數(shù)據(jù)庫。Standby數(shù)據(jù)庫分物理的和邏輯的。物理的standby數(shù)據(jù)庫主要用于production失敗后做切換。而邏輯的standby數(shù)據(jù)庫則在平時可以分擔(dān)production數(shù)據(jù)庫的讀負(fù)載。
3 MAA
MAA(Maximum Availability Architecture)其實(shí)不是獨(dú)立的第三種,而是前面兩種的結(jié)合,來提供***的可用性。每個機(jī)房內(nèi)部署RAC集群,多個機(jī)房間用Data Guard同步。
RAC概述
共享存儲文件系統(tǒng)(NFS),或甚至集群文件系統(tǒng)(如:OCFS2)主要被用于存儲區(qū)域網(wǎng)絡(luò)(所有節(jié)點(diǎn)直接訪問共享文件系統(tǒng)上存儲器),這就使得節(jié)點(diǎn)失效而不影響來自其他節(jié)點(diǎn)對文件系統(tǒng)的訪問,通常,共享磁盤文件系統(tǒng)用于高可用集群。
Oracle RAC的核心是共享磁盤子系統(tǒng),集群中所有節(jié)點(diǎn)必須能夠訪問所有數(shù)據(jù)、重做日志文件、控制文件和參數(shù)文件,數(shù)據(jù)磁盤必須是全局可用的,允許所有節(jié)點(diǎn)訪問數(shù)據(jù)庫,每個節(jié)點(diǎn)有它自己的重做日志和控制文件,但是其他節(jié)點(diǎn)必須能夠訪問它們以便在那個節(jié)點(diǎn)出現(xiàn)系統(tǒng)故障時能夠恢復(fù)。
Oracle RAC 運(yùn)行于集群之上,為 Oracle 數(shù)據(jù)庫提供了***級別的可用性、可伸縮性和低成本計算能力。如果集群內(nèi)的一個節(jié)點(diǎn)發(fā)生故障,Oracle 將可以繼續(xù)在其余的節(jié)點(diǎn)上運(yùn)行。Oracle 的主要創(chuàng)新是一項(xiàng)稱為高速緩存合并的技術(shù)。高速緩存合并使得集群中的節(jié)點(diǎn)可以通過高速集群互聯(lián)高效地同步其內(nèi)存高速緩存,從而***限度地低降低磁盤 I/O。高速緩存最重要的優(yōu)勢在于它能夠使集群中所有節(jié)點(diǎn)的磁盤共享對所有數(shù)據(jù)的訪問。數(shù)據(jù)無需在節(jié)點(diǎn)間進(jìn)行分區(qū)。Oracle 是唯一提供具備這一能力的開放系統(tǒng)數(shù)據(jù)庫的廠商。其它聲稱可以運(yùn)行在集群上的數(shù)據(jù)庫軟件需要對數(shù)據(jù)庫數(shù)據(jù)進(jìn)行分區(qū),顯得不切實(shí)際。企業(yè)網(wǎng)格是未來的數(shù)據(jù)中心,構(gòu)建于由標(biāo)準(zhǔn)化商用組件構(gòu)成的大型配置之上,其中包括:處理器、網(wǎng)絡(luò)和存儲器。Oracle RAC 的高速緩存合并技術(shù)提供了***等級的可用性和可伸縮性。Oracle 數(shù)據(jù)庫 10g 和 OracleRAC 10g 顯著降低了運(yùn)營成本,增強(qiáng)了靈活性,從而賦予了系統(tǒng)更卓越的適應(yīng)性、前瞻性和靈活性。動態(tài)提供節(jié)點(diǎn)、存儲器、CPU 和內(nèi)存可以在實(shí)現(xiàn)所需服務(wù)級別的同時,通過提高的利用率不斷降低成本。
RAC 集成集群件管理
Oracle RAC 10g 在 Oracle 數(shù)據(jù)庫 10g 運(yùn)行的所有平臺上提供了一個完整集成的集群件管理解決方案。這一集群件功能包括集群連接、消息處理服務(wù)和鎖定、集群控制和恢復(fù),以及一個工作負(fù)載管理框架(將在下文探討)。Oracle RAC 10g 的集成集群件管理具有以下優(yōu)勢:
(一) 成本低。Oracle 免費(fèi)提供這一功能。
(二) 單一廠商支持。消除了相互推諉的問題。
(三) 安裝、配置和持續(xù)維護(hù)更簡單。Oracle RAC 10g 集群件使用標(biāo)準(zhǔn) Oracle 數(shù)據(jù)庫管理工具進(jìn)行安裝、配置和維護(hù)。這一過程無須其它的集成步驟。
(四) 所有平臺,質(zhì)量始終如一。與第三方產(chǎn)品相比,Oracle 對新軟件版本進(jìn)行了更嚴(yán)格的測試。
(五) 所有平臺,功能始終如一。例如,一些第三方集群件產(chǎn)品限制了集群內(nèi)可以支持的節(jié)點(diǎn)的數(shù)量。借助Oracle RAC 10g,所有平臺可以支持多達(dá) 64 個節(jié)點(diǎn)。用戶還可以在所有平臺上獲得一致的響應(yīng)體驗(yàn),從而有效解決了高可用性挑戰(zhàn),包括服務(wù)器節(jié)點(diǎn)故障、互連故障以及 I/O 隔離現(xiàn)象等。
(六) 支持高級功能。這包括集成監(jiān)視和通知功能,從而在發(fā)生故障時,在數(shù)據(jù)庫和應(yīng)用層之間實(shí)現(xiàn)快速協(xié)調(diào)的恢復(fù)。
RAC 的體系結(jié)構(gòu)
RAC 是 Oracle 數(shù)據(jù)庫的一個群集解決方案,是有著兩個或者兩個以上的數(shù)據(jù)庫節(jié)點(diǎn)協(xié)調(diào)運(yùn)作能力的。如下圖所示的 RAC 結(jié)構(gòu)圖:
集群管理器(Cluster Manager)在集群系統(tǒng)中對其他各個模塊進(jìn)行整合,通過高速的內(nèi)連接來提供群集節(jié)點(diǎn)之間的通信。各節(jié)點(diǎn)之間內(nèi)連接使用心跳線互聯(lián),心跳線上的信息功能確定群集邏輯上的節(jié)點(diǎn)成員信息和節(jié)點(diǎn)更新情況,以及節(jié)點(diǎn)在某個時間點(diǎn)的運(yùn)行狀態(tài),保證群集系統(tǒng)正常運(yùn)行。通信層管理節(jié)點(diǎn)之間的通信。它的職責(zé)是配置,互聯(lián)群集中節(jié)點(diǎn)信息,在群集管理器中使用由心跳機(jī)制產(chǎn)生的信息,由通信層負(fù)責(zé)傳輸,確保信息的正確到達(dá)。還有一些群集監(jiān)視進(jìn)程不斷驗(yàn)證系統(tǒng)的不同領(lǐng)域運(yùn)行狀況。例如,心跳監(jiān)測不斷驗(yàn)證的心跳機(jī)制的運(yùn)作是否良好。在一個應(yīng)用環(huán)境當(dāng)中,所有的服務(wù)器使用和管理同一個數(shù)據(jù)庫,目的是分散每一臺服務(wù)器的工作量。硬件上至少需要兩臺以上的服務(wù)器,而且還需要一個共享存儲設(shè)備;同時還需要兩類軟件,一類是集群軟件,另外一類就是 Oracle 數(shù)據(jù)庫中的 RAC 組件。同時所有服務(wù)器上的 OS 都應(yīng)該是同一類 OS,根據(jù)負(fù)載均衡的配置策略,當(dāng)一個客戶端發(fā)送請求到某一臺服務(wù)的 listener 后,這臺服務(wù)器根據(jù)負(fù)載均衡策略,會把請求發(fā)送給本機(jī)的 RAC組件處理,也可能會發(fā)送給另外一臺服務(wù)器的 RAC 組件處理,處理完請求后,RAC 會通過群集軟件來訪問共享存儲設(shè)備。邏輯結(jié)構(gòu)上看,每一個參加群集的節(jié)點(diǎn)有一個獨(dú)立的實(shí)例,這些實(shí)例訪問同一個數(shù)據(jù)庫。節(jié)點(diǎn)之間通過集群軟件的通信層(Communication Layer)來進(jìn)行通信。同時為了減少 I/O 的消耗,存在一個全局緩存服務(wù),因此每一個數(shù)據(jù)庫的實(shí)例,都保留了一份相同的數(shù)據(jù)庫 cache。RAC 中的特點(diǎn)如下:
- 每一個節(jié)點(diǎn)的實(shí)例都有自己的 SGA;
- 每一個節(jié)點(diǎn)的實(shí)例都有自己的后臺進(jìn)程
- 每一個節(jié)點(diǎn)的實(shí)力都有自己的 redo logs
- 每一個節(jié)點(diǎn)的實(shí)例都有自己的 undo 表空間
所有節(jié)點(diǎn)都共享一份 datafiles 和 controlfiles
RAC 的結(jié)構(gòu)組成和機(jī)制
在 Oracle9i 之前,RAC 稱為 OPS(Oracle Parallel Server)。RAC 與 OPS 之間的一個較大區(qū)別是,RAC 采用了Cache Fusion(高緩存合并)技術(shù),節(jié)點(diǎn)已經(jīng)取出的數(shù)據(jù)塊更新后沒有寫入磁盤前,可以被另外一個節(jié)點(diǎn)更新,然后以***的版本寫入磁盤。在 OPS 中,節(jié)點(diǎn)間的數(shù)據(jù)請求需要先將數(shù)據(jù)寫入磁盤,然后發(fā)出請求的節(jié)點(diǎn)才可以讀取該數(shù)據(jù)。使用 Cache Fusion 時,RAC 的各個節(jié)點(diǎn)間數(shù)據(jù)緩沖區(qū)通過高速、低延遲的內(nèi)部網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)塊的傳輸。下圖是一個典型的 RAC 對外服務(wù)的示意圖,一個 Oracle RAC Cluster 包含了如下的部分
集群的節(jié)點(diǎn)(Cluster node)——2 個到 N 個節(jié)點(diǎn)或者主機(jī)運(yùn)行 Oracle Database Server。
私有網(wǎng)絡(luò)(Network Interconnect)——RAC 之間需要一個高速互聯(lián)的私有網(wǎng)絡(luò)來處理通信和 Cache Fusion。
共享存儲(shared Storage)——RAC 需要共享存儲設(shè)備讓所有的節(jié)點(diǎn)都可以訪問數(shù)據(jù)文件。
對外服務(wù)的網(wǎng)絡(luò)(Production Network)——RAC 對外服務(wù)的網(wǎng)絡(luò)。客戶端和應(yīng)用都通過這個網(wǎng)絡(luò)來訪問。
RAC 后臺進(jìn)程
Oracle RAC 有一些自己獨(dú)特的后臺進(jìn)程,在單一實(shí)例中不發(fā)揮配置作用。如下圖所示,定義了一些 RAC 運(yùn)行的后臺進(jìn)程。這些后臺進(jìn)程的功能描述如下。
(1)LMS(Global cache service processes 全局緩存服務(wù)進(jìn)程)進(jìn)程主要用來管理集群內(nèi)數(shù)據(jù)塊的訪問,并在不同實(shí)例的 Buffer Cache 中傳輸數(shù)據(jù)塊鏡像。直接從控制的實(shí)例的緩存復(fù)制數(shù)據(jù)塊,然后發(fā)送一個副本到請求的實(shí)例上。并保證在所有實(shí)例的 Buffer Cache 中一個數(shù)據(jù)塊的鏡像只能出現(xiàn)一次。LMS 進(jìn)程靠著在實(shí)例中傳遞消息來協(xié)調(diào)數(shù)據(jù)塊的訪問,當(dāng)一個實(shí)例請求數(shù)據(jù)塊時,該實(shí)例的 LMD 進(jìn)程發(fā)出一個數(shù)據(jù)塊資源的請求,該請求指向主數(shù)據(jù)塊的實(shí)例的 LMD 進(jìn)程,主實(shí)例的 LMD 進(jìn)程和正在使用的實(shí)例的 LMD 進(jìn)程釋放該資源,這時擁有該資源的實(shí)例的 LMS 進(jìn)程會創(chuàng)建一個數(shù)據(jù)塊鏡像的一致性讀然后把該數(shù)據(jù)塊傳遞到請求該資源的實(shí)例的BUFFER CACHE 中。LMS 進(jìn)程保證了在每一時刻只能允許一個實(shí)例去更新數(shù)據(jù)塊,并負(fù)責(zé)保持該數(shù)據(jù)塊的鏡像記錄(包含更新數(shù)據(jù)塊的狀態(tài) FLAG)。RAC 提供了 10 個 LMS 進(jìn)程(0~9),該進(jìn)程數(shù)量隨著節(jié)點(diǎn)間的消息傳遞的數(shù)據(jù)的增加而增加。(2)LMON(Lock Monitor Process,鎖監(jiān)控進(jìn)程)是全局隊列服務(wù)監(jiān)控器,各個實(shí)例的 LMON 進(jìn)程會定期通信,以檢查集群中各個節(jié)點(diǎn)的健康狀況,當(dāng)某個節(jié)點(diǎn)出現(xiàn)故障時,負(fù)責(zé)集群重構(gòu)、GRD 恢復(fù)等操作,它提供的服務(wù)叫做 Cluster Group Service(CGS)。
LMON 主要借助兩種心跳機(jī)制來完成健康檢查。
(一) 節(jié)點(diǎn)間的網(wǎng)絡(luò)心跳(Network Heartbeat):可以想象成節(jié)點(diǎn)間定時的發(fā)送 ping 包檢測節(jié)點(diǎn)狀態(tài),如果能在規(guī)定時間內(nèi)收到回應(yīng),就認(rèn)為對方狀態(tài)正常。
(二) 通過控制文件的磁盤心跳(controlfile heartbeat):每個節(jié)點(diǎn)的 CKPT 進(jìn)程每隔 3 秒鐘更新一次控制文件的數(shù)據(jù)塊,這個數(shù)據(jù)塊叫做 Checkpoint Progress Record,控制文件是共享的,所以實(shí)例間可以互相檢查對方是否及時更新來判斷。
(三) LMD(the global enqueue service daemon,鎖管理守護(hù)進(jìn)程)是一個后臺進(jìn)程,也被稱為全局的隊列服務(wù)守護(hù)進(jìn)程,因?yàn)樨?fù)責(zé)對資源的管理要求來控制訪問塊和全局隊列。在每一個實(shí)例的內(nèi)部,LMD 進(jìn)程管理輸入的遠(yuǎn)程資源請求(即來自集群中其他實(shí)例的鎖請求)。此外,它還負(fù)責(zé)死鎖檢查和監(jiān)控轉(zhuǎn)換超時。
(四) LCK(the lock process,鎖進(jìn)程)管理非緩存融合,鎖請求是本地的資源請求。LCK 進(jìn)程管理共享資源的實(shí)例的資源請求和跨實(shí)例調(diào)用操作。在恢復(fù)過程中它建立一個無效鎖元素的列表,并驗(yàn)證鎖的元素。由于處理過程中的 LMS 鎖管理的首要職能,只有一個單一的 LCK 進(jìn)程存在每個實(shí)例中。
(五) DIAG(the diagnosability daemon,診斷守護(hù)進(jìn)程)負(fù)責(zé)捕獲 RAC 環(huán)境中進(jìn)程失敗的相關(guān)信息。并將跟蹤信息寫出用于失敗分析,DIAG 產(chǎn)生的信息在與 Oracle Support 技術(shù)合作來尋找導(dǎo)致失敗的原因方面是非常有用的。每個實(shí)例僅需要一個 DIAG 進(jìn)程。
(六) GSD(the global service daemon,全局服務(wù)進(jìn)程)與 RAC 的管理工具 dbca、srvctl、oem 進(jìn)行交互,用來完成實(shí)例的啟動關(guān)閉等管理事務(wù)。為了保證這些管理工具運(yùn)行正常必須在所有的節(jié)點(diǎn)上先start gsd,并且一個 GSD 進(jìn)程支持在一個節(jié)點(diǎn)的多個 rac.gsd 進(jìn)程位ORACLEHOME/bin目錄下,其log文件為ORACLEHOME/bin目錄下,其log文件為ORACLE_HOME/srvm/log/gsdaemon.log。GCS 和 GES 兩個進(jìn)程負(fù)責(zé)通過全局資源目錄(Global Resource Directory GRD)維護(hù)每個數(shù)據(jù)的文件和緩存塊的狀態(tài)信息。當(dāng)某個實(shí)例訪問數(shù)據(jù)并緩存了數(shù)據(jù)之后,集群中的其他實(shí)例也會獲得一個對應(yīng)的塊鏡像,這樣其他實(shí)例在訪問這些數(shù)據(jù)是就不需要再去讀盤了,而是直接讀取 SGA 中的緩存。GRD 存在于每個活動的 instance 的內(nèi)存結(jié)構(gòu)中,這個特點(diǎn)造成 RAC 環(huán)境的 SGA 相對于單實(shí)例數(shù)據(jù)庫系統(tǒng)的 SGA 要大。其他的進(jìn)程和內(nèi)存結(jié)構(gòu)都跟單實(shí)例數(shù)據(jù)庫差別不大。
RAC 共享存儲
RAC 需要有共享存儲,獨(dú)立于實(shí)例之外的信息,如上面提到的ocr 和 votedisk 以及數(shù)據(jù)文件都存放在這個共享存儲里的。有OCFS、OCFS2、RAW、NFS、ASM 等這樣的一些存儲方式。OCFS(Oracle Cluster File System) 和 OCFS2 就是一個文件系統(tǒng)而已,和 NFS 一樣,提供一種集群環(huán)境中的共享存儲的文件系統(tǒng)。RAW 裸設(shè)備也是一種存儲方式,是 oracle11g 之前的版本中 RAC 支持的存儲方式,在 Oralce9i 之前,OPS/RAC的支持只能使用這樣的方式,也就是把共享存儲映射到 RAW Device,然后把 Oracle 需要的數(shù)據(jù)選擇 RAW device存儲,但是 RAW 相對于文件系統(tǒng)來說不直觀,不便于管理,而且 RAW Device 有數(shù)量的限制,RAW 顯然需要有新的方案來代替,這樣就有了 OCFS 這樣的文件系統(tǒng)。當(dāng)然,這只是 Oracle 自己的實(shí)現(xiàn)的集文件系統(tǒng)而已,還有其他廠商提供的文件系統(tǒng)可以作為存儲的選擇方案。ASM 只是數(shù)據(jù)庫存儲的方案而已,并不是 cluster 的方案,所以這里 ASM 應(yīng)該是區(qū)別于 RAW 和 OCFS/OCFS2同一級別的概念,RAW 和 OCFS/OCFS2 不僅可以作為數(shù)據(jù)庫存儲的方案,同時也可以作為 Clusterware 里的存儲方案,是 CRS 里需要的 storage,而 ASM 僅作為數(shù)據(jù)庫的存儲而已,嚴(yán)格來說僅是 RAC 中的一個節(jié)點(diǎn)應(yīng)用(nodeapps)。ASM 對于 clusterware 安裝時需要的 ocr 和 votedisk 這兩項(xiàng)還不支持,畢竟 ASM 本身就需要一個實(shí)例,而 CRS 是完全在架構(gòu)之外的,這也就是為什么使用了 ASM 的方案,卻總還要加上 OCFS/OCFS2 和 RAW 其中的一個原因。各種 RAC 共享存儲方式的對比如下:
集群文件系統(tǒng)——支持 windows 和 Linux 的 OCFS/OCFS2
AIX 下的 GPFS 等方式——優(yōu)點(diǎn)是管理方便,表示也很直觀,但缺點(diǎn)是基于文件系統(tǒng)管理軟件,又要經(jīng)過 OS 的 cache 處理,性能上和穩(wěn)定性上都有欠缺,所以不適合在生產(chǎn)環(huán)境下使用??梢灾С?CRS 集群軟件文件和數(shù)據(jù)庫文件。
RAW 裸設(shè)備方式——通過硬件支持的共享存儲系統(tǒng),直接用 RAW 設(shè)備存儲,可以支持集群軟件文件和數(shù)據(jù)庫文件。
網(wǎng)絡(luò)文件系統(tǒng)(NFS)——通過 NFS 實(shí)現(xiàn)共享存儲,不過需要經(jīng)過 Oracle 認(rèn)證的 NFS 才行,可以支持CRS 集群軟件文件和數(shù)據(jù)庫文件。
ASM——集合 RAW 方式 I/O 高性能和集群文件系統(tǒng)易管理等優(yōu)點(diǎn),Oracle10g 下推出的共享存儲方式,但是本身 ASM 就是需要 Oracle 的實(shí)例支持,所以 ASM 僅支持?jǐn)?shù)據(jù)庫文件,而不支持 CRS 文件。
RAC 數(shù)據(jù)庫和單實(shí)例數(shù)據(jù)庫的區(qū)別
為了讓 RAC 中的所有實(shí)例能夠訪問數(shù)據(jù)庫,所有的 datafiles、control files、PFILE/Spfile 和 redo log files 必須保存在共享磁盤上,并且要都能被所有節(jié)點(diǎn)同時訪問,就涉及到裸設(shè)備和集群文件系統(tǒng)等。RAC database 在結(jié)構(gòu)上與單實(shí)例的不同之處:至少為每個實(shí)例多配置一個 redo 線程,比如:兩個實(shí)例組成的集群至少要 4 個 redo log group。每個實(shí)例兩個 redo group。另外要為每一個實(shí)例準(zhǔn)備一個 UNDO 表空間。
1、redo 和 undo,每個實(shí)例在做數(shù)據(jù)庫的修改時誰用誰的 redo 和 undo 段,各自鎖定自己修改的數(shù)據(jù),把不同實(shí)例的操作相對的獨(dú)立開就避免了數(shù)據(jù)不一致。后面就要考慮備份或者恢復(fù)時 redo log 和歸檔日志在這種情況下的特殊考慮了。
2、內(nèi)存和進(jìn)程各個節(jié)點(diǎn)的實(shí)例都有自己的內(nèi)存結(jié)構(gòu)和進(jìn)程結(jié)構(gòu).各節(jié)點(diǎn)之間結(jié)構(gòu)是基本相同的.通過 Cache Fusion(緩存融合)技術(shù),RAC 在各個節(jié)點(diǎn)之間同步 SGA 中的緩存信息達(dá)到提高訪問速度的效果也保證了一致性。