亓微微
目前,國內(nèi)外對數(shù)據(jù)庫高可用性領(lǐng)域的研究,主要還是集中在雙機(jī)集群、RAC、DATAGUARD這幾種獨(dú)立技術(shù)的研究上。而事實(shí)上,每一種單獨(dú)的技術(shù),都有其自身的弱點(diǎn),僅僅依靠一種技術(shù),是無法將數(shù)據(jù)庫的高可用性演繹得淋漓盡致的。本文主要介紹RAC和DATAGUARD兩種技術(shù)各自的特點(diǎn),然后論證結(jié)合RAC與DATAGUARD技術(shù)在高可用性領(lǐng)域的可行性方案。然后分別從主機(jī),存儲(chǔ)等各方面模擬出數(shù)據(jù)庫故障,來驗(yàn)證此高可用性方案的可靠性,證明此方案優(yōu)于目前業(yè)內(nèi)常用的一些數(shù)據(jù)庫高可用性方案。
RAC技術(shù)DATAGUARD技術(shù)雙機(jī)集群本文首先講解RAC與DATAGUARD技術(shù)的各自原理,然后研究利用ORACLE數(shù)據(jù)庫的RAC和DATAGUARD技術(shù),實(shí)現(xiàn)在企業(yè)級(jí)數(shù)據(jù)庫高可用性領(lǐng)域的應(yīng)用。
要解決的關(guān)鍵技術(shù)問題:
(1)實(shí)現(xiàn)RAC技術(shù)的failover功能
Failover功能,是RAC技術(shù)的核心功能之一。即當(dāng)RAC數(shù)據(jù)庫的某一個(gè)節(jié)點(diǎn)出現(xiàn)故障后,這個(gè)故障節(jié)點(diǎn)上運(yùn)行的所有應(yīng)用會(huì)自動(dòng)切換至其它節(jié)點(diǎn)上繼續(xù)運(yùn)行,整個(gè)切換過程對用戶而言是透明的。
(2)實(shí)現(xiàn)RAC技術(shù)和DATAGUARD技術(shù)的完美結(jié)合
RAC技術(shù),可以解決除了存儲(chǔ)故障外的所有問題。如果不巧恰恰是存儲(chǔ)出現(xiàn)故障,這時(shí),就可以借用DATAGUARD技術(shù),將數(shù)據(jù)庫系統(tǒng)切換至備用主機(jī),保持業(yè)務(wù)的正常運(yùn)行。在這個(gè)物理架構(gòu)中,DATAGUARD的主庫是一套R(shí)AC數(shù)據(jù)庫,而DATAGUARD備庫卻是一個(gè)單節(jié)點(diǎn)的數(shù)據(jù)庫,如何將RAC數(shù)據(jù)庫切換到單節(jié)點(diǎn)的備庫是需要解決的關(guān)鍵技術(shù)難題。
1 Oracle RAC透明切換特性
TAF,英文全稱:Transparent Application Failover,是net層透明故障轉(zhuǎn)移,是一種被動(dòng)的故障轉(zhuǎn)移方式,它主要依賴于VIP??梢酝ㄟ^客戶端和服務(wù)器端兩種方式配置TAF的策略。
下面主要介紹客戶端配置TAF的方式:
控制TAF策略的參數(shù)說明:
FAILOVER:
Failover控制開關(guān)(on/off),如果為off,不提供故障切換功能,但連接時(shí)會(huì)對address列表進(jìn)行依次嘗試,直到找到可用為止。它有兩種類型:session/select。
Session:
提供session級(jí)別的故障切換。會(huì)話可以正常切換到其他節(jié)點(diǎn),但查詢沒有繼續(xù)完成,也就是說查詢的結(jié)果沒有全部出來,只出來數(shù)據(jù)庫關(guān)閉前的數(shù)據(jù)。
Select:
提供select級(jí)別的故障切換。切換過程對查詢語句透明,但事物類處理需要回滾操作。
RETRIES:
故障切換時(shí)重試次數(shù)。
DELAY:
故障切換時(shí)重試間隔時(shí)間。
2 DATAGUARD技術(shù)原理
Oracle dataguard是當(dāng)前保護(hù)企業(yè)級(jí)核心數(shù)據(jù)最有效的解決方案,它能夠在7*24的基礎(chǔ)上可用,無論是否發(fā)生災(zāi)難或其他中斷,oracle dataguard技術(shù)都是實(shí)現(xiàn)企業(yè)業(yè)務(wù)連續(xù)性基礎(chǔ)架構(gòu)中的一個(gè)關(guān)鍵因素。
Oracle dataguard使備用數(shù)據(jù)庫保持為與生產(chǎn)數(shù)據(jù)庫在事務(wù)上一致的副本。這些備用數(shù)據(jù)庫可位于距生產(chǎn)數(shù)據(jù)中心數(shù)千里以外的遠(yuǎn)程災(zāi)難恢復(fù)[6]站點(diǎn)。當(dāng)生產(chǎn)數(shù)據(jù)庫由于計(jì)劃中斷或意外中斷而變得不可用時(shí),dataguard可以將任意備用數(shù)據(jù)庫切換為生產(chǎn)角色,從而使用與中斷相關(guān)的停機(jī)時(shí)間送到最小,并防止任何的數(shù)據(jù)丟失。
Dataguard技術(shù)支持兩種不同的備用數(shù)據(jù)庫,分別是物理備用數(shù)據(jù)庫(也稱重做日志應(yīng)用備庫)和邏輯備用數(shù)據(jù)庫(也稱SQL重用數(shù)備庫)。無特殊說明,本文重點(diǎn)介紹物理備用數(shù)據(jù)庫。
物理備用數(shù)據(jù)庫通過接收,應(yīng)用來自主數(shù)據(jù)庫的重做日志,實(shí)現(xiàn)與主數(shù)據(jù)庫的數(shù)據(jù)同步。它在物理上與主數(shù)據(jù)庫具有相同的數(shù)據(jù)塊,因而數(shù)據(jù)庫模式都是相同的。
3 RAC+DATAGUARD方案的理論研究
在本方案中,我們的主數(shù)據(jù)庫是一個(gè)RAC數(shù)據(jù)庫,而基于方案成本的考慮,備用數(shù)據(jù)庫是一個(gè)單節(jié)點(diǎn)的數(shù)據(jù)庫。如果可能,備用數(shù)據(jù)庫也可以是一個(gè)RAC數(shù)據(jù)庫。
在正常情況下,如圖3.1所示,所有的應(yīng)用程序都分別連接到主RAC數(shù)據(jù)庫的兩個(gè)實(shí)例上,同時(shí)開啟RAC的負(fù)載均衡和透明切換功能,應(yīng)用程序必須使用VIP來連接數(shù)據(jù)庫。應(yīng)用程序的事務(wù)產(chǎn)生的任何數(shù)據(jù)變化,都會(huì)通過dataguard機(jī)制同步至備用數(shù)據(jù)庫上,使備用數(shù)據(jù)庫始終與主RAC數(shù)據(jù)庫保持一致。
如果主RAC數(shù)據(jù)庫的某個(gè)節(jié)點(diǎn)出現(xiàn)類似應(yīng)用故障,主機(jī)故障,網(wǎng)絡(luò)故障,此時(shí),該節(jié)點(diǎn)上的VIP會(huì)自動(dòng)漂移至該RAC數(shù)據(jù)庫的其他節(jié)點(diǎn)上,已經(jīng)連接在發(fā)生故障的節(jié)點(diǎn)上的會(huì)話,會(huì)通過透明切換的功能,將這些會(huì)話轉(zhuǎn)移至其他安全的節(jié)點(diǎn)上繼續(xù)運(yùn)行。而這些錯(cuò)誤的發(fā)生,對應(yīng)用程序而言沒有任何影響,不需要做任何修改,應(yīng)用程序就可以繼續(xù)在主RAC數(shù)據(jù)庫上繼續(xù)運(yùn)行。
如果主RAC數(shù)據(jù)庫的存儲(chǔ)設(shè)備出現(xiàn)故障,此時(shí),則主RAC數(shù)據(jù)庫將完全停止,需要對主RAC數(shù)據(jù)庫的存儲(chǔ)設(shè)備進(jìn)行恢復(fù)才可以繼續(xù)使用,同時(shí),應(yīng)用程序也將全部中斷,會(huì)影響到業(yè)務(wù)的繼續(xù)運(yùn)行。這時(shí),我們可迅速激活備用數(shù)據(jù)庫(因?yàn)閭溆脭?shù)據(jù)庫的數(shù)據(jù)與主RAC數(shù)據(jù)庫的數(shù)據(jù)始終保持一致,所以激活備用數(shù)據(jù)庫,即可以恢復(fù)業(yè)務(wù)。),然后修改應(yīng)用程序的數(shù)據(jù)庫連接串,將連接串地址從以前的主RAC數(shù)據(jù)庫地址修改為現(xiàn)在的備用數(shù)據(jù)庫地址,這樣就可以在最短的時(shí)間內(nèi)恢復(fù)業(yè)務(wù)。研究結(jié)論:
當(dāng)主RAC數(shù)據(jù)庫出現(xiàn)應(yīng)用,主機(jī),網(wǎng)絡(luò)等方面的故障時(shí),此方案可以做到0業(yè)務(wù)中斷;而當(dāng)主RAC數(shù)據(jù)庫出現(xiàn)存儲(chǔ)方面的故障時(shí),此方案需要臨時(shí)中斷業(yè)務(wù)。業(yè)務(wù)中斷時(shí)間=max(備用數(shù)據(jù)庫激活時(shí)間,應(yīng)用程序的數(shù)據(jù)庫連接串修改時(shí)間)。
在極限情況下,此數(shù)據(jù)庫高可用性方案也會(huì)業(yè)務(wù)中斷,但此方案的業(yè)務(wù)中斷時(shí)間遠(yuǎn)遠(yuǎn)低于以前的高可用性方案。
4測試RAC+DATAGUARD高可用性方案的容災(zāi)能力
4.1模擬主RAC庫的主機(jī)故障測試方案的容災(zāi)能力
(1)問題提出
當(dāng)主RAC數(shù)據(jù)庫的某個(gè)節(jié)點(diǎn)主機(jī)出現(xiàn)故障,如:CPU,磁盤,內(nèi)存等故障,導(dǎo)致該節(jié)點(diǎn)停機(jī),此時(shí),連接在這個(gè)節(jié)點(diǎn)上運(yùn)行的會(huì)話是否會(huì)被中斷?
(2)解決方案
在Oracle RAC環(huán)境下,在配置TAF(Transparent Application Failover)之后,如果一個(gè)節(jié)點(diǎn)上的實(shí)例出現(xiàn)了故障,Oracle會(huì)自動(dòng)將會(huì)話漂移到另一個(gè)實(shí)例上,保持業(yè)務(wù)的正常運(yùn)行。
前面已經(jīng)介紹過,配置RAC的透明切換功能有兩種方式,在客戶端配置或在服務(wù)器配置。下面在客戶端的tnsname.ora文件中配置TAF,內(nèi)容如下:
ZYXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.100.98)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.100.99)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = zyxdb)
endprint