搭建Oracle高可用數(shù)據(jù)庫(kù)環(huán)境
??? 24*7(有些叫法也為24*7*365)的高可用系統(tǒng)越來越多的受到廣泛重視與應(yīng)用,那是因?yàn)樵趯?shí)際環(huán)境中,不間斷的系統(tǒng)代表的就是不間斷的義務(wù)收入。但是
??? ◆怎么樣搭建與管理24*7的高可用環(huán)境?
??? ◆各種各樣的高可用環(huán)境之間到底有什么差別?
??? ◆我們是否適合于哪種環(huán)境?
??? ◆現(xiàn)在高可用環(huán)境的主要方式以及以后的發(fā)展趨勢(shì)是什么?
??? 這些話題,都是決策者與實(shí)施者都應(yīng)當(dāng)考慮的,也是本文所探討的,我們需要搭建一個(gè)怎么樣的高可用環(huán)境,才能真正做到最適合。
?
一、什么是高可用(High Availability)
??? 在高可用的解釋方面,有人給出了如下的詮釋:
??? (1)系統(tǒng)失敗或崩潰 (system faults and crashes)
??? (2)應(yīng)用層或者中間層錯(cuò)誤 (application and middleware failures)
??? (3)網(wǎng)絡(luò)失敗 (network failures)
??? (4)介質(zhì)失敗,一般指存放數(shù)據(jù)的媒體故障 (media failures)
??? (5)人為失誤 (Human Error)
??? (6)容災(zāi) (Disasters and extended outages)
??? (7)計(jì)劃宕機(jī)與維護(hù) (Planned downtime, maintenance and management tasks)
??? 可見,高可用不僅僅包含了系統(tǒng)本身故障,應(yīng)用層的錯(cuò)誤,人為錯(cuò)誤等等,還應(yīng)當(dāng)包括數(shù)據(jù)冗余、容災(zāi)以及計(jì)劃的維護(hù)時(shí)間,也就是說,一個(gè)真正的高可用環(huán)境,不僅僅是能避免系統(tǒng)本身的問題,還應(yīng)當(dāng)能防止天災(zāi)人禍,以及有一個(gè)簡(jiǎn)單可靠的系統(tǒng)維護(hù)方法(如微碼升級(jí)、軟件升級(jí)等等計(jì)劃停機(jī)維護(hù))。
??? 現(xiàn)在高可用的計(jì)算方法一般以年在線率來計(jì)算,如規(guī)定一年之中的可用環(huán)境要達(dá)到99.95%,那么24*365*(1-99.95%)=4.38小時(shí)(包括維護(hù)時(shí)間)。那么假定一個(gè)系統(tǒng)本身一年之中故障時(shí)間是1小時(shí),但是計(jì)劃維護(hù)時(shí)間卻花了20小時(shí),那么這個(gè)系統(tǒng)也不能算是一個(gè)滿足設(shè)計(jì)要求的高可用環(huán)境。
??? 現(xiàn)階段使用環(huán)境中,基本沒有真正的100%的在線環(huán)境,或者說,如果達(dá)到100%的在線能力,將花費(fèi)非常多的代價(jià),所以一般能達(dá)到99.95%以上的可用性的環(huán)境,一般都可以認(rèn)為是高可用環(huán)境。
??? 對(duì)于高可用性在線效率的計(jì)算,我們可以參考如下方法:
圖1
|
??? 在公司收益與投入成本計(jì)算方面取得一個(gè)平衡,則是我們所希望的在線效率,但是收益與成本的計(jì)算方法則是決策者與實(shí)施者需要著重考慮的問題了,也是我們下面希望能試圖解釋的問題。
?
二、Oracle高可用相關(guān)功能的產(chǎn)品概述
??? 因?yàn)楦呖捎玫姆秶x太廣泛,本文我們只討論與Oracle數(shù)據(jù)庫(kù)有關(guān)系的高可用設(shè)計(jì),如數(shù)據(jù)庫(kù)主機(jī)的錯(cuò)誤,數(shù)據(jù)所在的存儲(chǔ)錯(cuò)誤,介質(zhì)損壞以及主機(jī)與數(shù)據(jù)的冗余保護(hù)等等,并不討論應(yīng)用層的設(shè)計(jì),Oracle 提供支持high availability 相關(guān)產(chǎn)品主要有下面幾種:
??? (1) Oracle Parallel Server(8i)/ Real Application Cluster(9i/10g)
??? (2) Oracle Standby Database(8i)/Oracle Data Guard(9i/10g)
??? (3) Oralce Advanced Replication(8i)/Oracle Stream(9i/10g)
??? (4) Oracle Server HA
??? (5) Other: Mv/RMAN/Oracle Log Miner/Oracle Flashback Query(9/10gi)
??? 等等,還有其他很多小的功能,如在線表的重定義,新的安全審計(jì)功能等,也都是為在線系統(tǒng)而設(shè)計(jì)的,但是,我們這里主要只考慮構(gòu)架方面的高可用設(shè)計(jì),也就是與成本有關(guān)系的高可用設(shè)計(jì),怎么樣達(dá)到成本與收益的最大平衡。
??? 所以,我們將主要討論的是Oracle OPS/RAC、Standby/Ddata guard、Advanced Replocation/Stream以及與Oracle Server相關(guān)的OS HA(雙機(jī))。
1、OPS /RAC
??? OPS/RAC 最原始的設(shè)計(jì)初衷就是system/application high availability。與其他產(chǎn)品相比較: OPS/RAC 是多個(gè)服務(wù)器的cluster,組成具有更大計(jì)算處理能力與故障處理能力的集群。cluster 里面不同的 node 使用一個(gè)(一般是一個(gè))或多個(gè)oracle instances 與一個(gè)database 連接(Shared Storage)。
??? 主要的技術(shù)特點(diǎn):
??? (1) database 所有的data files 是建立在共享存儲(chǔ)(Shared Storage)上面的,一般可以采用raw設(shè)備,共享文件系統(tǒng)或者是ASM(10g提供),因此在技術(shù)方面對(duì)OS 的設(shè)置有很高的依賴性,需要有OS支持的cluster軟件。
??? (2) OPS/RAC在共享存儲(chǔ)方面并沒有冗余保護(hù),不具備在共享存儲(chǔ)陣列損壞的情況下具有切換的能力,因此 media failure 方面,要依靠RAID (redundant array of inexpensive disk) Subsystem、LV鏡相(LV Mirror)、卷復(fù)制(Volume Replication)或者是Standby/Data guard來實(shí)現(xiàn)數(shù)據(jù)的冗余保護(hù)。
??? (3)該技術(shù)是Oracle近來主推的技術(shù),特別是10g以后的網(wǎng)格計(jì)算與線型擴(kuò)展能力,在電信、移動(dòng)、銀行行業(yè)使用廣泛。如果還是老的OPS,則不建議再使用,但是9i以后的Rac技術(shù)逐漸成熟,可以使用在高可用環(huán)境下,但是其管理成本與技術(shù)的復(fù)雜性,則也是需要考慮的。
2、Advanced Replication /Stream
??? Advanced Replication 的設(shè)計(jì)初是分散異地的application access database locally。這種技術(shù)可以將一個(gè)數(shù)據(jù)庫(kù)中的objects復(fù)制到另一數(shù)據(jù)庫(kù)中。如果是整個(gè)數(shù)據(jù)庫(kù)的復(fù)制,也可用于高可用環(huán)境。
??? 從Oracle 9i開始,Oracle更傾向使用Stream的技術(shù),通過對(duì)歸檔日志的挖掘,可以在對(duì)主系統(tǒng)沒有任何壓力的情況下,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的objects甚至整個(gè)數(shù)據(jù)庫(kù)的同步。
??? 主要的技術(shù)特點(diǎn):
??? (1)技術(shù)相對(duì)靈活,可以對(duì)單獨(dú)的object,或者是整個(gè)數(shù)據(jù)庫(kù)進(jìn)行復(fù)制,而且作為stream,復(fù)制的壓力更小,對(duì)主庫(kù)沒有壓力,著名的復(fù)制軟件share plex就是采用類似的技術(shù)進(jìn)行數(shù)據(jù)的復(fù)制的。
??? (2)可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)主機(jī)以及共享存儲(chǔ)的完全冗余保護(hù),甚至是跨地域的容災(zāi)保護(hù),在很多比較大型的在線系統(tǒng)中,可以用該技術(shù)實(shí)現(xiàn)系統(tǒng)的讀寫分離,通過該技術(shù)把寫站點(diǎn)的數(shù)據(jù)復(fù)制到多個(gè)讀站點(diǎn),大大提高系統(tǒng)的可用性與安全性。
??? (3)因?yàn)锳dvanced Replication與Stream的不成熟性與技術(shù)復(fù)雜性,該技術(shù)沒有被廣泛的使用,但是其對(duì)應(yīng)軟件share plex使用還是瞞廣泛的,不過因?yàn)槠浒嘿F的價(jià)格,則是需要考慮其搭建成本的。
3、Standby/Data Guard
??? Standby database/Data guard是ORACLE推出的一種高可用性數(shù)據(jù)庫(kù)方案,在主節(jié)點(diǎn)與備用節(jié)點(diǎn)間通過日志同步來保證數(shù)據(jù)的同步,備用節(jié)點(diǎn)作為主節(jié)點(diǎn)的備份,可以實(shí)現(xiàn)快速切換與災(zāi)難性恢復(fù)。
??? Oracle從7.3才開始支持standby database。在9i開始,發(fā)展為data guard,并支持MAXIMIZE PROTECTION、MAXIMIZE AVAILABILITY、MAXIMIZE PERFORMANCE的三種保護(hù)模式,可以實(shí)現(xiàn)自由的手工主備切換,實(shí)現(xiàn)高可用的條件,如果配置合理,可以實(shí)現(xiàn)部分的自動(dòng)切換。
??? 從Oracle 9i開始,也開始支持邏輯standby,邏輯standby的原理跟Stream復(fù)制相差不大,可以歸結(jié)到Stream中。
??? 主要的技術(shù)特點(diǎn):
??? (1)可以實(shí)現(xiàn)數(shù)據(jù)庫(kù)主機(jī)以及共享存儲(chǔ)的完全冗余保護(hù),該冗余甚至可以跨地域,做成容災(zāi)保護(hù),另外,主節(jié)點(diǎn)必須運(yùn)行在歸檔模式下,并且可能要force logging,保證備用節(jié)點(diǎn)的數(shù)據(jù)正確性。
??? (2)主備用節(jié)點(diǎn)對(duì)OS的環(huán)境要求比較高,必須要是相同的OS環(huán)境(相差一定的beta版本一般關(guān)系不大),而且數(shù)據(jù)庫(kù)環(huán)境最好也一致。
??? (3)除了最大保護(hù)模式外,其它模式下如果主站點(diǎn)的存儲(chǔ)損壞而導(dǎo)致備用站點(diǎn)進(jìn)行失敗切換的時(shí)候,需要注意數(shù)據(jù)的丟失問題,務(wù)必同步完主站點(diǎn)當(dāng)前的聯(lián)機(jī)日志。
??? (4)備用節(jié)點(diǎn)的主機(jī)與存儲(chǔ)基本不能提供訪問,僅僅能提供只讀查詢,所以該技術(shù)也有嚴(yán)重的資源浪費(fèi),不過該技術(shù)因?yàn)槌杀颈容^低,管理方便,技術(shù)成熟,所以被廣泛使用。
4、OS相關(guān)HA
??? Oracle Server HA是基于OS的技術(shù),采用OS支持的Cluster Soft來保證主機(jī)的冗余保護(hù),跟Rac一樣,不能保證共享存儲(chǔ)的高可靠性。
??? 它的基本架構(gòu)共分兩種模式:雙機(jī)互備援(Dual Active)模式和雙機(jī)熱備份(Hot Standby)模式,對(duì)于Dual Active模式,雙機(jī)都是正常工作的,但是工作業(yè)務(wù)不同,在一個(gè)主機(jī)故障時(shí),切換到另外一個(gè)主機(jī)上;Hot Standby模式則只有一個(gè)機(jī)器工作,另外一個(gè)機(jī)器處于接管狀態(tài)。
??? 不管是哪種模式,Cluster都可以正確的檢測(cè)到系統(tǒng)異常并自動(dòng)進(jìn)行失敗切換,如果是Dual Active模式,則需要注意當(dāng)兩個(gè)業(yè)務(wù)都切換到一個(gè)server上的時(shí)候,該機(jī)器是否能承載雙份的壓力。
??? 主要的技術(shù)特點(diǎn):
??? (1)與Rac一樣,database 所有的data files 是建立在共享存儲(chǔ)上面的,存儲(chǔ)的冗余保護(hù)則需要依賴其它技術(shù)。
??? (2)HA的技術(shù)簡(jiǎn)單成熟,所以在實(shí)際使用中,也能被廣泛采用,但是,對(duì)主機(jī)資源的浪費(fèi)也最為嚴(yán)重,基本上要保證有對(duì)等的資源處于等待狀態(tài)。
?
三、Oracle高可用相關(guān)功能的詳細(xì)說明
1、OPS/RAC
??? OPS/RAC通過兩個(gè)或多個(gè)節(jié)點(diǎn)的cluster,多個(gè)節(jié)點(diǎn)之間,采用高速通信鏈路連接,來解決數(shù)據(jù)庫(kù)的高可用性,在OPS/RAC中,每個(gè)節(jié)點(diǎn)都可以被應(yīng)用端訪問并可以自動(dòng)負(fù)載平衡。
??? 如果其中一個(gè)節(jié)點(diǎn)發(fā)生故障,所有的節(jié)點(diǎn)將自動(dòng)切換到另外一個(gè)(或幾個(gè))節(jié)點(diǎn)上。可以實(shí)現(xiàn)動(dòng)態(tài)應(yīng)用的切換以及數(shù)據(jù)庫(kù)服務(wù)器及時(shí)的失敗處理,在server的高可用方面提供最高保護(hù)。
??? 但是OPS/RAC并不對(duì)磁盤,陣列提供保護(hù)的特性,如果發(fā)生介質(zhì)的物理?yè)p壞,將可能導(dǎo)致服務(wù)器的宕機(jī)。所以我們可以對(duì)OPS/RAC進(jìn)行進(jìn)一步的保護(hù),如采用好的RAID方式(如RAID 10),也可以在OS層面上對(duì)邏輯卷做鏡相或者復(fù)制,甚至采用RAC+DATA GUARD雙重保護(hù)。
??? Rac已經(jīng)被廣泛使用在高可用環(huán)境,但是,除了硬件成本,cluster軟件成本,我們還需要考慮管理成本。
??? 如以下的一個(gè)4節(jié)點(diǎn)的Rac結(jié)構(gòu)中,4個(gè)節(jié)點(diǎn)可以同時(shí)被訪問,如果其中一個(gè)出現(xiàn)故障,該節(jié)點(diǎn)上的應(yīng)用將被自動(dòng)切換到其它3個(gè)節(jié)點(diǎn)上,另外,通過SAN的存儲(chǔ)網(wǎng)絡(luò),實(shí)現(xiàn)數(shù)據(jù)的冗余保護(hù)。
![]() |
圖2 |
?
2、Advanced Replication /Stream
??? Advanced Replication/Stream用于高可用,一般是指對(duì)數(shù)據(jù)庫(kù)的整個(gè)復(fù)制,如果數(shù)據(jù)庫(kù)在異地,也還可以用于容災(zāi),所以,如果該技術(shù)用的好,是一個(gè)非常不錯(cuò)的選擇。
![]() |
圖3 |
??? 如上圖的結(jié)構(gòu)中,主站點(diǎn)可以在城東,被復(fù)制站點(diǎn)可以在城西或者更遠(yuǎn)的地方,數(shù)據(jù)通過城市網(wǎng)絡(luò)傳向被復(fù)制站點(diǎn),在stream中,傳送的可以是被分析過的LCR anydata數(shù)據(jù)結(jié)構(gòu),到目標(biāo)數(shù)據(jù)庫(kù)的時(shí)候再解析成對(duì)應(yīng)的DML語(yǔ)句實(shí)現(xiàn)同步。
??? 這樣的話,主站點(diǎn)與被復(fù)制的站點(diǎn)可以分別的被應(yīng)用訪問,雖然被復(fù)制站點(diǎn)可能比主站點(diǎn)的數(shù)據(jù)要延遲一些。
??? 正因?yàn)锳dvanced Replication/Stream既實(shí)現(xiàn)了高可用,又實(shí)現(xiàn)了容災(zāi),在大型的在線電子商務(wù)網(wǎng)站中,一般使用成熟的share plex軟件實(shí)現(xiàn)讀寫分離,讀的站點(diǎn)可以分布在世界各地,既大大提高了網(wǎng)站系統(tǒng)的可用性,又大大提高了數(shù)據(jù)的安全性。
3、Standby/Data Guard
??? Standby/Data guard因?yàn)榧夹g(shù)簡(jiǎn)單成熟,成本低廉(Oracle自帶的功能,不需要單獨(dú)購(gòu)買),是廣泛采用的一種數(shù)據(jù)庫(kù)的高性能與容災(zāi)方案,如果采用不同保護(hù)級(jí)別可能會(huì)有不同的性能結(jié)果,如想不丟失數(shù)據(jù),則可能會(huì)影響性能,如果想最好的性能,則一定注意保證在主節(jié)點(diǎn)完全故障的時(shí)候,備用節(jié)點(diǎn)不會(huì)丟失數(shù)據(jù)。
![]() |
圖4 |
??? 備用數(shù)據(jù)庫(kù)可以認(rèn)為是一個(gè)主數(shù)據(jù)庫(kù)的鏡相,一個(gè)處于不斷恢復(fù)日志中的主數(shù)據(jù)庫(kù)。從9i開始,備用數(shù)據(jù)庫(kù)又分為物理備用數(shù)據(jù)庫(kù)與邏輯備用數(shù)據(jù)庫(kù),我們這里只討論物理備用數(shù)據(jù)庫(kù)。
??? Standby/Data guard實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的高可用以及數(shù)據(jù)的異地容災(zāi),與Advanced Replication/Stream不一樣的是,備用站點(diǎn)不能實(shí)時(shí)的被訪問,降低了資源的利用程度,而且如果主站點(diǎn)故障,一般需要手工切換。
??? 但是,正因?yàn)槠浞奖愕墓芾恚墒斓募夹g(shù),低廉的價(jià)格,所以也被廣泛的使用在數(shù)據(jù)的容災(zāi)上面,如果與RAC結(jié)合,RAC+Data Guard可以實(shí)現(xiàn)一個(gè)良好的高可用,高性能的數(shù)據(jù)庫(kù)。
4、OS相關(guān)HA
??? HA很類似于RAC,兩種方式,都需要兩個(gè)Server,一個(gè)閑置。 在主機(jī)crash 的情況下,都可以提供某種程度的恢復(fù),保持系統(tǒng)可用。 不過一個(gè)是OS Vendor的solution,一個(gè)是Oracle的solution,如,在一個(gè) 一備三 的系統(tǒng)結(jié)構(gòu)中:
![]() |
圖5 |
??? 在以上的結(jié)構(gòu)中,正在被使用的數(shù)據(jù)庫(kù)服務(wù)器有3臺(tái),其中3臺(tái)中任何一臺(tái)發(fā)生故障,可以被一臺(tái)備用主機(jī)接管,等待發(fā)生故障的機(jī)器修復(fù),再手工切換會(huì)原來的結(jié)構(gòu)。
??? HA的最好好處就是可以解決服務(wù)器的單點(diǎn)故障的問題,如機(jī)器故障,與Rac一樣,并不能解決磁盤故障問題或者是陣列故障問題。所以HA也必須采用附加的備份機(jī)制如LV鏡相與卷復(fù)制,或配套使用oracle standby。
??? HA的機(jī)制起源比較早,發(fā)展到現(xiàn)在已經(jīng)日趨成熟,在實(shí)際安例中,使用還是比較廣泛的,但是它必須有一半的資源處于等待狀態(tài),所以資源浪費(fèi)跟standby一樣,比較嚴(yán)重。
?
四、Oracle高可用相關(guān)功能的對(duì)比說明與方案選擇
??? 通過以上的詳細(xì)說明,我們描繪了Oracle數(shù)據(jù)庫(kù)在高可用性方面可以達(dá)到的效果以及特性,并且從原理上與構(gòu)架上,我們也可以分析到其成本(包括管理成本),再加上其技術(shù)的成熟程度以及使用程度,我們以一張表格來對(duì)照一下:
![]() |
圖六 |
??? ①:這里指單獨(dú)的使用該功能,但是如果與LV Mirror/ Volume Replication/Data guard等功能結(jié)合起來,是可以實(shí)現(xiàn)數(shù)據(jù)保護(hù)與容災(zāi)功能的,如果設(shè)計(jì)合理,在災(zāi)難切換時(shí),也可以保證不丟失任何數(shù)據(jù),但是也需要為以上功能付出更多的成本。
??? ②:對(duì)于Advanced Replication /Stream,現(xiàn)階段的確不太成熟,還沒有廣泛的使用起來,但是類似這樣功能的軟件,如Share plex已經(jīng)比較成熟了,在全球范圍內(nèi)還是被廣泛驗(yàn)證過了的。
??? ③:在一定條件下,可以配置成自動(dòng)切換。
??? ④:如果主站點(diǎn)完全故障,可能會(huì)導(dǎo)致數(shù)據(jù)丟失(主要是當(dāng)前聯(lián)機(jī)日志),不過可以考慮把當(dāng)前聯(lián)機(jī)日志分布到各地地點(diǎn)的方法避免該問題的出現(xiàn)。
??? ⑤:如果在非最大保護(hù)模式下,與④有相同的結(jié)果與預(yù)防處理方式。
??? 我們通過該表格的對(duì)比可以發(fā)現(xiàn),沒有最好,只有看我們自己的最適合了,每一種方式都有自己的缺陷有優(yōu)點(diǎn)。而且,在實(shí)際的使用中,真正的高可用環(huán)境也很少單獨(dú)來使用這些技術(shù)的,一般都是結(jié)合來使用,如:
??? 1、有的電子商務(wù)使用Rac + Share plex (或Stream)的技術(shù)實(shí)現(xiàn)讀寫分離的技術(shù),可以實(shí)現(xiàn)高可用+容災(zāi)。
??? 2、有的電信行業(yè)用遠(yuǎn)程Rac +遠(yuǎn)程 LV Mirror,可以實(shí)現(xiàn)本地與遠(yuǎn)程應(yīng)用的動(dòng)態(tài)切換,實(shí)現(xiàn)主機(jī)的異地冗余保護(hù)與數(shù)據(jù)的異地容災(zāi)
??? 3、有的電子商務(wù)采用本地HA+遠(yuǎn)程Standby,實(shí)現(xiàn)數(shù)據(jù)庫(kù)服務(wù)器與存儲(chǔ)的雙重冗余,分別實(shí)現(xiàn)不同級(jí)別的主機(jī)冗余與數(shù)據(jù)的異地容災(zāi)。
??? 4、有的銀行行業(yè)采用本地Rac+ 遠(yuǎn)程vvr(Veritas Volume Replication),實(shí)現(xiàn)本地系統(tǒng)的主機(jī)冗余與遠(yuǎn)程系統(tǒng)數(shù)據(jù)的異地容災(zāi)。
?
總結(jié)
??? 該文詳細(xì)描敘了oracle在高可用環(huán)境中可能用到的技術(shù),以及該技術(shù)的詳細(xì)描述,并且通過其構(gòu)架分析,原理了解,技術(shù)成熟度分析,我們可以大致估算到其成本。
??? 而且,在實(shí)際的使用環(huán)境中,沒有最好的技術(shù),只有最適合于自己的技術(shù),使自己的成本與收益能達(dá)到一個(gè)最合適的平衡,這個(gè),就是我們最終需要達(dá)到的目的。
??? 以上的技術(shù)與方案,僅供參考。