國(guó)家信息中心 何國(guó)慶 王潤(rùn)宇 宿云凱
隨著信息技術(shù)的發(fā)展,信息技術(shù)不僅改變了我們的工作方式,更是我們提高工作效率的原動(dòng)力。數(shù)據(jù)庫(kù)是信息技術(shù)的核心技術(shù)之一,其直接存儲(chǔ)和管理信息數(shù)據(jù)主體,并提供數(shù)據(jù)查詢等服務(wù)。數(shù)據(jù)庫(kù)的穩(wěn)定高效運(yùn)行是業(yè)務(wù)是否穩(wěn)定的前提。然而,各種突發(fā)事件諸如網(wǎng)絡(luò)威脅、硬件故障、火災(zāi)等,都使數(shù)據(jù)庫(kù)穩(wěn)定運(yùn)行面臨著巨大挑戰(zhàn)。
為了在突發(fā)事件發(fā)生時(shí),數(shù)據(jù)庫(kù)仍然能夠高效穩(wěn)定運(yùn)行,或使突發(fā)事件產(chǎn)生的影響降低到最小。從操作系統(tǒng)到數(shù)據(jù)庫(kù)應(yīng)用都產(chǎn)生了很多高可用技術(shù)。
本文首先分析操作系統(tǒng)層面的高可用技術(shù),及其對(duì)于數(shù)據(jù)庫(kù)的局限性。然后重點(diǎn)討論目前常見的oracle數(shù)據(jù)庫(kù)和高可用性有關(guān)的兩項(xiàng)技術(shù):Real Application Cluster和Data Guard。
時(shí)至今日,服務(wù)器不僅運(yùn)算速度有了飛速提升,各種硬件的冗余技術(shù),硬盤的RAID技術(shù)及日益穩(wěn)定的操作系統(tǒng)都使其穩(wěn)定性有了質(zhì)的飛躍,但是硬件故障、操作系統(tǒng)的漏洞和bug依舊不能完全避免。為了滿足特殊服務(wù)器的高可用需求,常見的操作系統(tǒng)均推出了自己的集群技術(shù),如AIX的High Availability Cluster Multi-Processing(簡(jiǎn)稱HACMP或HA)。Windows的windows Failover Cluster(簡(jiǎn)稱WSFC)等。集群的工作模式可分為主從、互備、多點(diǎn)集群三大類。基本思路是由多個(gè)節(jié)點(diǎn)共同對(duì)外提供服務(wù)。當(dāng)一個(gè)節(jié)點(diǎn)故障時(shí),其他節(jié)點(diǎn)接替該節(jié)點(diǎn)的工作。
操作系統(tǒng)的集群技術(shù)對(duì)于其它的應(yīng)用多數(shù)可靠有效,但是對(duì)數(shù)據(jù)庫(kù)來(lái)說(shuō)雖然也可以實(shí)現(xiàn),但是卻存在著資源利用率低,不能無(wú)縫切換的缺點(diǎn)。原因很簡(jiǎn)單,數(shù)據(jù)庫(kù)中不斷變換的數(shù)據(jù)只能有一份,各個(gè)節(jié)點(diǎn)對(duì)外的結(jié)果必須一致,這就要求節(jié)點(diǎn)之間要實(shí)現(xiàn)快速數(shù)據(jù)同步。而操作系統(tǒng)僅僅是應(yīng)用的平臺(tái),無(wú)法深入到應(yīng)用中完成數(shù)據(jù)同步工作。常見的操作系統(tǒng)層面的數(shù)據(jù)庫(kù)集群是雙機(jī)主備模式。數(shù)據(jù)存放在獨(dú)立的存儲(chǔ)中,正常情況下存儲(chǔ)掛在主服務(wù)器上,當(dāng)主服務(wù)器故障后,首先主服務(wù)器停止服務(wù),然后存儲(chǔ)資源切換到備用服務(wù)器,最后備用服務(wù)器開始工作。這樣的工作模式,始終有一臺(tái)服務(wù)器處于閑置狀態(tài),并且在故障發(fā)生時(shí),必然有個(gè)切換過程,這期間數(shù)據(jù)庫(kù)服務(wù)是中斷的。
Oracle Real Application Cluster通常稱作RAC。是從oracle9i開始推出的應(yīng)用層面的集群數(shù)據(jù)庫(kù)。
通常由多個(gè)節(jié)點(diǎn)服務(wù)器(至少2個(gè)節(jié)點(diǎn))和一臺(tái)存儲(chǔ)設(shè)備組成,如圖1所示。
每個(gè)節(jié)點(diǎn)有兩個(gè)網(wǎng)卡和一個(gè)連接存儲(chǔ)的光纖卡。其中一塊網(wǎng)卡連接在由這幾臺(tái)服務(wù)器組成的私有網(wǎng)絡(luò),用于各個(gè)節(jié)點(diǎn)之間通訊和數(shù)據(jù)交換。另一個(gè)網(wǎng)卡連在公共網(wǎng)絡(luò)對(duì)外提供服務(wù)。存儲(chǔ)和所有節(jié)點(diǎn)通過光纖相連,數(shù)據(jù)庫(kù)的數(shù)據(jù)文件就存放在存儲(chǔ)中。
高可用性:RAC中的每個(gè)節(jié)點(diǎn)均為數(shù)據(jù)庫(kù)的一個(gè)實(shí)例,這些節(jié)點(diǎn)同時(shí)對(duì)外服務(wù),避免單節(jié)點(diǎn)故障造成數(shù)據(jù)庫(kù)服務(wù)中斷。
可擴(kuò)展性:RAC集群中的節(jié)點(diǎn)可以根據(jù)業(yè)務(wù)的繁忙程度,動(dòng)態(tài)的增加或減少。資源利用率高:RAC集群中的所有節(jié)點(diǎn)均在線服務(wù),沒有閑置節(jié)點(diǎn)。另外,根據(jù)不同業(yè)務(wù)高峰期的差別。動(dòng)態(tài)調(diào)整不用業(yè)務(wù)的服務(wù)資源范圍,如在一個(gè)4節(jié)點(diǎn)的集群中,白天可以分配3個(gè)節(jié)點(diǎn)為銷售業(yè)務(wù)提供服務(wù),1個(gè)節(jié)點(diǎn)為統(tǒng)計(jì)分析提供服務(wù)。夜里分配三個(gè)節(jié)點(diǎn)為統(tǒng)計(jì)分析提供服務(wù),1個(gè)節(jié)點(diǎn)為銷售業(yè)務(wù)提供服務(wù)。
節(jié)約成本:可以用多臺(tái)廉價(jià)的PC代替昂貴的小型機(jī)或大型機(jī)。同時(shí)節(jié)約相應(yīng)的維護(hù)成本。
圖1
圖2
對(duì)系統(tǒng)規(guī)劃要求高,如果系統(tǒng)規(guī)劃設(shè)計(jì)不合理,可能使集群的性能還不如一個(gè)節(jié)點(diǎn)的性能高。如頻繁出現(xiàn)多個(gè)節(jié)點(diǎn)對(duì)同一個(gè)數(shù)據(jù)塊寫操作時(shí),出現(xiàn)各個(gè)節(jié)點(diǎn)之間相互等待,并且使節(jié)點(diǎn)之間出現(xiàn)大量的內(nèi)存拷貝,從而在集群的私有網(wǎng)絡(luò)上引發(fā)所謂的網(wǎng)絡(luò)風(fēng)暴。
雖然多節(jié)點(diǎn)同時(shí)提供服務(wù)避免了單節(jié)點(diǎn)故障引起的服務(wù)中斷,但并非節(jié)點(diǎn)故障對(duì)業(yè)務(wù)沒有影響,對(duì)于非連接池的應(yīng)用來(lái)說(shuō),新的連接均可以連接到正常的節(jié)點(diǎn)。但對(duì)于采用連接池的應(yīng)用來(lái)說(shuō),已經(jīng)連接在故障節(jié)點(diǎn)的連接并不會(huì)立刻刷新,應(yīng)用在使用故障連接時(shí)會(huì)報(bào)數(shù)據(jù)庫(kù)連接異常的錯(cuò)誤,直到所有到故障節(jié)點(diǎn)的連接被刷新。
由于集群需要訪問共同的存儲(chǔ)設(shè)備,集群中各個(gè)節(jié)點(diǎn)的物理距離不會(huì)太遠(yuǎn),這樣雖然集群可以避免由于軟硬件故障引起的服務(wù)中斷,但對(duì)于火災(zāi)、地震等重大災(zāi)難事故,RAC集群數(shù)據(jù)庫(kù)無(wú)能為力。
Datagurad是從oracle7i時(shí)就推出的一種數(shù)據(jù)庫(kù)高可用技術(shù)。通常由多臺(tái)(至少兩臺(tái))位于不同城市的數(shù)據(jù)庫(kù)服務(wù)器組成。其中一臺(tái)為主數(shù)據(jù)庫(kù)角色,其它數(shù)據(jù)庫(kù)稱為standby數(shù)據(jù)庫(kù),如圖2所示。
基本原理是將主數(shù)據(jù)產(chǎn)生的聯(lián)機(jī)日志隨時(shí)傳送給各個(gè)standby數(shù)據(jù)庫(kù),standby數(shù)據(jù)庫(kù)再重做這些日志。當(dāng)主數(shù)據(jù)庫(kù)發(fā)生重大故障或當(dāng)?shù)匕l(fā)生火災(zāi)、地震等災(zāi)難事件時(shí),任意一個(gè)standby數(shù)據(jù)可以快速轉(zhuǎn)換為主數(shù)據(jù)庫(kù)角色。
Dataguard技術(shù)最大價(jià)值就在于災(zāi)備。最多9個(gè)standby數(shù)據(jù)庫(kù),分布在不同的城市??梢宰畲笙薅冉档突馂?zāi)、地震等重大災(zāi)難事件的影響。其次standby數(shù)據(jù)庫(kù)可以以只讀模式打開,提供數(shù)據(jù)查詢服務(wù),standby數(shù)據(jù)庫(kù)也可用于數(shù)據(jù)庫(kù)備份,這兩項(xiàng)能力均可減輕主數(shù)據(jù)庫(kù)的壓力。
Dataguard的不足是基礎(chǔ)設(shè)施(機(jī)房、人員、軟硬件成本)投入較大。另外和操作系統(tǒng)集群類似,資源利用率低,故障切換時(shí)服務(wù)會(huì)中斷[3]。
以上三種技術(shù)均可用于部署高可用oracle數(shù)據(jù)庫(kù),各有利弊。操作系統(tǒng)集群由于自身的不足,目前逐漸退出主流,但由于其投資少,一些要求不高的小型用戶還在使用。RAC由于其資源利用率高,調(diào)配靈活,在oracle高可用數(shù)據(jù)庫(kù)市場(chǎng)上占據(jù)主流。而Dataguard從出現(xiàn)到現(xiàn)在乃至可見未來(lái),由于其不可替代的災(zāi)備功能,不會(huì)退出市場(chǎng),但是由于其基礎(chǔ)設(shè)施投入大,其主要用戶是跨地域的大型用戶,
這三種高可用技術(shù)并不完全是競(jìng)爭(zhēng)關(guān)系,而是可以配合使用更好以取長(zhǎng)補(bǔ)短。實(shí)際上許多大型用戶由于業(yè)務(wù)量大,且需要7*24小時(shí)服務(wù),他們更多的情況是主數(shù)據(jù)庫(kù)和standby數(shù)據(jù)庫(kù)均為集群數(shù)據(jù)庫(kù)。
[1]張曉明著.大話oracle RAC[M].人民郵電出版社,2009.
[2]http://doc.mbalib.com/view/7f15d6af436571f0628d3 7212aebbbdc.html(2012年7月).
[3]http://blog.csdn.net/zengmuansha/article/details/3725939(2012年7月).