◆王 丹 滕 達(dá) 束愛華
(中國電子科技集團(tuán)公司第二十八研究所 江蘇 210007)
一種基于Oracle RAC集群與高級復(fù)制的數(shù)據(jù)可靠存儲的方法
◆王 丹 滕 達(dá) 束愛華
(中國電子科技集團(tuán)公司第二十八研究所 江蘇 210007)
本文說明了一種基于Oracle RAC集群與高級復(fù)制的數(shù)據(jù)可靠存儲的方法,用于為指揮信息系統(tǒng)提供穩(wěn)定高效的數(shù)據(jù)庫支撐。
Oracle RAC集群;高級復(fù)制;指揮信息系統(tǒng)
針對指揮信息系統(tǒng)大容量(TB級)業(yè)務(wù)數(shù)據(jù)高穩(wěn)定性存儲、調(diào)用的技術(shù)特點,我們采用Oracle RAC集群技術(shù)與高級復(fù)制技術(shù)結(jié)合使用的方法,完成對業(yè)務(wù)數(shù)據(jù)的冗余備份和數(shù)據(jù)同步,能夠極大提高整套指揮信息系統(tǒng)的可用性。指揮信息系統(tǒng)采用三機集群方式,即三臺核心處理服務(wù)器同時為前臺客戶端提供服務(wù)。Oracle RAC集群技術(shù)為其中兩臺服務(wù)器提供統(tǒng)一的共享數(shù)據(jù),高級復(fù)制技術(shù)負(fù)責(zé)將第三臺服務(wù)器上的數(shù)據(jù)進(jìn)行同步,形成一個高可用系統(tǒng)體系,確保數(shù)據(jù)實時性和一致性,有效地降低了服務(wù)器負(fù)載過大的風(fēng)險,提高了客戶端數(shù)據(jù)訪問的響應(yīng)速度。
1.1 指揮信息系統(tǒng)
指揮信息系統(tǒng)最重要的一個作用就是存儲那些龐大且珍貴的數(shù)據(jù)信息,這些數(shù)據(jù)支撐著那些復(fù)雜密集的運算,支撐系統(tǒng)美麗多彩的動態(tài)畫面,還有在后臺默默地記錄系統(tǒng)運轉(zhuǎn)過程中的一點一滴。數(shù)據(jù)如此重要,所以數(shù)據(jù)的存儲安全是重中之重。多年以來,一直選用ORACLE 數(shù)據(jù)庫作為數(shù)據(jù)的存儲平臺,它功能強大并且穩(wěn)定可靠。
指揮信息系統(tǒng)傳統(tǒng)的Oracle數(shù)據(jù)庫使用方式為,三臺應(yīng)用服務(wù)器上分別部署單實例數(shù)據(jù)庫軟件,三個數(shù)據(jù)庫之間使用高級復(fù)制,達(dá)到數(shù)據(jù)同步的目的。然而近年來,伴隨著網(wǎng)絡(luò)帶寬迅速提升、網(wǎng)絡(luò)存儲技術(shù)的迅速發(fā)展,越來越多的共享存儲技術(shù)在信息系統(tǒng)中得到應(yīng)用。尤其是指揮信息系統(tǒng)的三維顯示技術(shù)的發(fā)展,使得傳統(tǒng)的數(shù)據(jù)庫方案不能滿足系統(tǒng)需求;現(xiàn)在需要更加龐大的數(shù)據(jù)存儲量,來支持海量的三維地理信息數(shù)據(jù),還有更加安全、高效的數(shù)據(jù)訪問能力。這時,Oracle的一個高端產(chǎn)品“RAC集群數(shù)據(jù)庫”映入了開發(fā)者們的眼簾。
1.2 RAC
RAC,全稱Real Application Cluster,特點是將多臺計算機組織在一起、多個實例共享網(wǎng)絡(luò)存儲設(shè)備、同時對外提供服務(wù),強項在于解決了單點故障和負(fù)載均衡[1]。

圖1 Oracle RAC軟件拓?fù)鋱D
然而RAC也有它致命的一面,RAC環(huán)境中所有節(jié)點共享一個網(wǎng)絡(luò)存儲設(shè)備,一旦網(wǎng)絡(luò)存儲設(shè)備出現(xiàn)故障,數(shù)據(jù)庫就面臨全面癱瘓,也就是說網(wǎng)絡(luò)存儲設(shè)備存在單點故障隱患。所以還需要尋求另外的方法與RAC結(jié)合使用,來提高系統(tǒng)整體的可用性。
目前Oracle提供有高級復(fù)制、Data Guard和流復(fù)制等多種數(shù)據(jù)備份方案。經(jīng)過了大量實驗對比,最終選定采用高級復(fù)制技術(shù)與RAC技術(shù)相結(jié)合,來提高系統(tǒng)整體可用性。
2.1 構(gòu)建Oracle RAC集群與高級復(fù)制環(huán)境
目前,指揮信息系統(tǒng)多數(shù)采用服務(wù)器三機集群方式,即三臺核心處理服務(wù)器同時為前臺客戶端提供服務(wù)。如圖2,Oracle RAC集群技術(shù)為其中兩臺服務(wù)器提供統(tǒng)一的共享數(shù)據(jù),高級復(fù)制技術(shù)負(fù)責(zé)將第三臺服務(wù)器上的數(shù)據(jù)進(jìn)行同步,形成一個高可用系統(tǒng)體系,確保數(shù)據(jù)實時性和一致性。并且通過建立數(shù)據(jù)庫健康狀態(tài)捕獲機制,實現(xiàn)了RAC數(shù)據(jù)庫和單實例數(shù)據(jù)庫之間無縫切換,為客戶端訪問提供了更加穩(wěn)定高效的數(shù)據(jù)支撐。

圖2 Oracle RAC集群技術(shù)與高級復(fù)制技術(shù)結(jié)合使用結(jié)構(gòu)圖
構(gòu)建RAC與高級復(fù)制結(jié)合方法如下:
(1)部署RAC數(shù)據(jù)庫軟件環(huán)境:在一號服務(wù)器和二號服務(wù)器上部署RAC數(shù)據(jù)庫雙節(jié)點集群軟件環(huán)境。
①確定RAC雙節(jié)點名稱分別為server1和server2、以及Public NIC名和Private NIC名;
②選用ASM作為數(shù)據(jù)庫存儲技術(shù);
③確定CRS集群件軟件安裝路徑名為$CRS_HOME;
④確定RAC數(shù)據(jù)庫軟件安裝路徑名為$ORACLE_HOME、數(shù)據(jù)庫服務(wù)名為RACDB;確定Voting 盤大小為1000MB、OCR盤大小為1000MB;
⑤確定系統(tǒng)運行所需的關(guān)鍵數(shù)據(jù)的物理文件存儲路徑為+DATAoradata、大小為3TB,海量三維地理信息數(shù)據(jù)的物理文件存儲路徑為+DATA1gworld、大小為20TB。
(2)部署單實例數(shù)據(jù)庫軟件環(huán)境。
①確定單實例數(shù)據(jù)庫節(jié)點名稱為server3;
②確定單實例數(shù)據(jù)庫軟件安裝路徑名為$ORACLE_HOME、數(shù)據(jù)庫服務(wù)名為ora11;
③確定系統(tǒng)運行所需的關(guān)鍵數(shù)據(jù)的物理文件存儲路徑為/ora data。
(3)RAC數(shù)據(jù)庫和單實例數(shù)據(jù)庫之間部署高級復(fù)制。
①高級復(fù)制采用異步多主復(fù)制方案,參與復(fù)制的數(shù)據(jù)表在R AC數(shù)據(jù)庫和單實例數(shù)據(jù)庫之間對稱復(fù)制,任一節(jié)點復(fù)制對象的更新都會被傳播并被直接應(yīng)用到另外一個節(jié)點的復(fù)制對象中,如果某一節(jié)點出現(xiàn)數(shù)據(jù)庫故障,不影響另外一個健康節(jié)點的數(shù)據(jù)更新操作,在故障節(jié)點恢復(fù)之前,健康節(jié)點會將所有“復(fù)制事務(wù)”保存在本地def$_aqcall隊列中,待故障節(jié)點恢復(fù)工作后,再執(zhí)行[2]。
②高級復(fù)制搭建過程中,關(guān)閉RAC數(shù)據(jù)庫server2節(jié)點數(shù)據(jù)庫實例,只保留server1數(shù)據(jù)庫實例單獨運行,并將初始化參數(shù)cluster_database設(shè)置為false,這樣能夠有效提高高級復(fù)制對象的復(fù)制支持的生成速度。
至此,RAC數(shù)據(jù)庫和單實例數(shù)據(jù)庫之間部署高級復(fù)制完畢。
Oracle RAC集群與高級復(fù)制技術(shù)相結(jié)合,使得RAC數(shù)據(jù)庫和單實例數(shù)據(jù)庫互為備份[3],既避免了單純RAC環(huán)境下由于網(wǎng)絡(luò)存儲設(shè)備發(fā)生故障而導(dǎo)致的系統(tǒng)全面癱瘓的隱患,又解決了單實例數(shù)據(jù)庫的單點故障隱患;同時,將原系統(tǒng)中三節(jié)點高級復(fù)制降階為兩節(jié)點高級復(fù)制,降低了高級復(fù)制的耦合性,有效降低了數(shù)據(jù)同步過程中出錯概率。
2.2 數(shù)據(jù)庫健康狀態(tài)捕獲機制
為實現(xiàn)RAC數(shù)據(jù)庫和單實例數(shù)據(jù)庫之間無縫切換,使系統(tǒng)滿足高可用性要求,我們還建立了數(shù)據(jù)庫健康狀態(tài)捕獲機制。
如圖3,系統(tǒng)運行時,數(shù)據(jù)庫健康狀態(tài)監(jiān)控進(jìn)程(DBMON)捕獲數(shù)據(jù)庫健康狀態(tài)。當(dāng)RAC數(shù)據(jù)庫健康時,DBMON優(yōu)先選擇RAC數(shù)據(jù)庫為客戶端提供數(shù)據(jù)讀寫服務(wù);一旦RAC數(shù)據(jù)庫故障即RAC數(shù)據(jù)庫健康心跳失效時,DBMON則選擇單實例數(shù)據(jù)庫為客戶端提供數(shù)據(jù)讀寫服務(wù);如此時單實例數(shù)據(jù)庫也發(fā)生故障,則表明數(shù)據(jù)庫系統(tǒng)全面癱瘓,程序警告退出。