陳 超/無(wú)錫市計(jì)量測(cè)試中心
隨著計(jì)量檢測(cè)業(yè)務(wù)的不斷發(fā)展,計(jì)量管理信息系統(tǒng)的數(shù)據(jù)庫(kù)的數(shù)據(jù)量日益龐大,計(jì)量檢測(cè)機(jī)構(gòu)正常業(yè)務(wù)的開(kāi)展對(duì)信息系統(tǒng)的依賴性越來(lái)越大,對(duì)系統(tǒng)的保護(hù)和對(duì)系統(tǒng)數(shù)據(jù)的防災(zāi)顯得越來(lái)越重要。計(jì)量信息系統(tǒng)需要不間斷為計(jì)量檢測(cè)人員提供服務(wù),即使發(fā)生短暫的業(yè)務(wù)中斷,也會(huì)導(dǎo)致很大的經(jīng)濟(jì)損失。因此保證系統(tǒng)數(shù)據(jù)庫(kù)的高可用性、安全性尤為重要。所以,本文提出了基于Oracle RAC(甲骨文數(shù)據(jù)庫(kù)實(shí)時(shí)應(yīng)用集群)的集群技術(shù)的高可用性解決方案,通過(guò)Oracle RAC的集群技術(shù)提高計(jì)量信息系統(tǒng)的可用性、可靠性。
在計(jì)算機(jī)系統(tǒng)中,可用性可定義為MTTF(平均失效前時(shí)間)/(MTTF+MTTR(平均恢復(fù)前時(shí)間))×100%,即系統(tǒng)保持正常運(yùn)行時(shí)間的百分比。按照標(biāo)準(zhǔn)劃分,可用水平為99.9%,即每年停機(jī)時(shí)間<8.8 h的系統(tǒng),稱為HA(High Availability)(高可用性)。因此,為了最大限度地保障網(wǎng)絡(luò)的服務(wù)質(zhì)量,HA架構(gòu)越來(lái)越多地得到企業(yè)的認(rèn)可和支持。HA架構(gòu)追求的就是最高的服務(wù)質(zhì)量,即高可用性、高可靠性和高安全性。
集群(Cluster)是由多個(gè)計(jì)算機(jī)(Node)組成一個(gè)整體向用戶提供某種網(wǎng)絡(luò)資源。集群技術(shù)開(kāi)始于20世紀(jì)70年代,以Linux集群的應(yīng)用最為廣泛,具有高可擴(kuò)展性、高性能和高可用性。在目前最流行的關(guān)鍵業(yè)務(wù)如數(shù)據(jù)庫(kù)的高可用性群集應(yīng)用方案中,雙機(jī)技術(shù)和Oracle RAC成為最受矚目的2個(gè)亮點(diǎn)。
Oracle提出的真正應(yīng)用集群(RAC)概念,采用服務(wù)漂移、VIP漂移和TAF透明故障切換等新技術(shù),能有效解決常見(jiàn)的軟硬件故障引起的死機(jī),如SQL(結(jié)構(gòu)化查詢語(yǔ)言)語(yǔ)句故障、用戶進(jìn)程故障、網(wǎng)絡(luò)故障、用戶錯(cuò)誤故障、實(shí)例故障和介質(zhì)故障等。在Oracle RAC中,CRS(集群就緒服務(wù))服務(wù)協(xié)調(diào)所有集群結(jié)點(diǎn)統(tǒng)一工作,并自動(dòng)根據(jù)硬件的故障情況,實(shí)時(shí)刪除或增加集群結(jié)點(diǎn)、動(dòng)態(tài)管理和維護(hù)集群的工作,具有極大的可伸縮性、低成本和高可用性。
本文提出基于RAC模式典型的兩節(jié)點(diǎn)Oracle RAC結(jié)構(gòu),結(jié)構(gòu)圖如圖1所示。
圖1 兩節(jié)點(diǎn)RAC系統(tǒng)結(jié)構(gòu)圖
數(shù)據(jù)庫(kù)服務(wù)器Server A和Server B是一套2節(jié)點(diǎn)的集群系統(tǒng),兩節(jié)點(diǎn)上分別運(yùn)行著相互獨(dú)立的數(shù)據(jù)庫(kù)實(shí)例進(jìn)程A和進(jìn)程B。兩個(gè)實(shí)例提供相同的數(shù)據(jù)庫(kù)服務(wù)名(Service Name),通過(guò)集群文件系統(tǒng)共享相同的數(shù)據(jù)文件。首先,兩個(gè)數(shù)據(jù)庫(kù)實(shí)例節(jié)點(diǎn)通過(guò)“集群心跳”彼此探測(cè)對(duì)方是否存活,維持集群狀態(tài)。其次,RAC的Cache Fusion(互聯(lián)機(jī)制訪問(wèn))技術(shù)利用“集群心跳”來(lái)同步各節(jié)點(diǎn)內(nèi)存中已經(jīng)變化的數(shù)據(jù),從而保持?jǐn)?shù)據(jù)以及服務(wù)狀態(tài)的一致性,也大大提高了數(shù)據(jù)的同步效率。這樣,當(dāng)一個(gè)節(jié)點(diǎn)停止服務(wù),應(yīng)用端會(huì)自動(dòng)連接另一個(gè)節(jié)點(diǎn)來(lái)完成剛才失敗的事務(wù)。由于各節(jié)點(diǎn)數(shù)據(jù)一致性,事務(wù)的容錯(cuò)得以成功。
在Oracle RAC中,通過(guò)虛地址(VIP)和服務(wù)的漂移完成故障切換,保證數(shù)據(jù)庫(kù)的HA特性。在每個(gè)RAC節(jié)點(diǎn)上,配置了公用地址、私有地址和虛地址VIP。當(dāng)某個(gè)節(jié)點(diǎn)發(fā)生故障時(shí),其VIP會(huì)自動(dòng)漂移到另一個(gè)節(jié)點(diǎn)上,并在該節(jié)點(diǎn)上創(chuàng)建相應(yīng)的服務(wù),保證應(yīng)用系統(tǒng)的正常服務(wù)。服務(wù)是Oracle的一個(gè)基本特征,可以在單實(shí)例中使用,也可以在RAC環(huán)境中使用。在RAC環(huán)境中,服務(wù)運(yùn)行在一個(gè)或多個(gè)實(shí)例之上,它能夠讓RAC系統(tǒng)將集群數(shù)據(jù)庫(kù)的所有資源集成為一個(gè)單一的系統(tǒng)映像,這樣可以最優(yōu)化集群的可管理性,簡(jiǎn)單化系統(tǒng)的配置、測(cè)試、災(zāi)難恢復(fù)和降低管理成本。服務(wù)實(shí)現(xiàn)了數(shù)據(jù)庫(kù)的透明連接,用戶通過(guò)服務(wù)名連接數(shù)據(jù)庫(kù),不用關(guān)心到底是哪個(gè)實(shí)例在真正執(zhí)行SQL應(yīng)用。
本文提出的RAC系統(tǒng)有2個(gè)節(jié)點(diǎn),運(yùn)行一個(gè)服務(wù)EDU(引擎可調(diào)度單元),該服務(wù)默認(rèn)運(yùn)行在主機(jī)1(Server A)和主機(jī)2(Server B)上。Oracle RAC測(cè)試環(huán)境配置如圖2所示。
圖2 Oracle RAC 測(cè)試環(huán)境配置
用戶連接RAC時(shí),通常使用tnsnames.Ora網(wǎng)絡(luò)配置文件,該文件由Oracle的net客戶端創(chuàng)建,具有連通性、可管理性、可縮放性、安全性和可訪問(wèn)性等特點(diǎn),可以通過(guò)配置某些參數(shù)來(lái)實(shí)現(xiàn)連接時(shí)故障切換、透明應(yīng)用程序故障切換、客戶端負(fù)載平衡和服務(wù)器端負(fù)載平衡等。
為了測(cè)試和分析Oracle RAC的HA性能,筆者做了一個(gè)測(cè)試。測(cè)試中,一個(gè)C/S(客戶服務(wù)模式)客戶端通過(guò)ODBC(開(kāi)放數(shù)據(jù)庫(kù)互連)方式連接一個(gè)圖2所示的2節(jié)點(diǎn)RAC系統(tǒng),進(jìn)行連續(xù)的數(shù)據(jù)插入刪除操作。同時(shí),對(duì)正在連接的節(jié)點(diǎn)進(jìn)行軟硬件測(cè)試操作,并保證同時(shí)有2個(gè)節(jié)點(diǎn)處于活動(dòng)狀態(tài),前臺(tái)通過(guò)net2 stat-an命令監(jiān)測(cè)C/S客戶端的連接狀態(tài),后臺(tái)通過(guò)srvctl status service -d test-s edu命令來(lái)監(jiān)測(cè)數(shù)據(jù)庫(kù)服務(wù)的狀態(tài)。
現(xiàn)場(chǎng)未做部分高危險(xiǎn)性測(cè)試,但后來(lái)經(jīng)過(guò)突發(fā)事件證實(shí)實(shí)驗(yàn)結(jié)果。
3.1.1 前臺(tái)測(cè)試一
C/S客戶端通過(guò)ODBC和TNSNAME(服務(wù)名)訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)名EDU。C/S客戶端連接數(shù)據(jù)庫(kù),前臺(tái)運(yùn)行netstat -an監(jiān)測(cè)結(jié)果如表1所示。
3.1.2 前臺(tái)測(cè)試二
SHELL腳本通過(guò)SQLPLUS(結(jié)構(gòu)化查詢語(yǔ)言編輯器)和TNSNAME自動(dòng)訪問(wèn)數(shù)據(jù)庫(kù)服務(wù)名EDU。
3.1.3 后臺(tái)監(jiān)測(cè)一
運(yùn)行srvctl status service-d test-s edu監(jiān)測(cè)如下:Service edu is running on instance(s) test1,test2
3.1.4 后臺(tái)監(jiān)測(cè)二
crs_stat命令監(jiān)測(cè)的服務(wù)器進(jìn)程主要分為兩類,一類是節(jié)點(diǎn)的狀態(tài),如asm、lsnr、gsd、ons、vip等進(jìn)程;另一類是集群數(shù)據(jù)庫(kù)的狀態(tài),如cs、sa、srv等進(jìn)程。服務(wù)漂移主要體現(xiàn)在節(jié)點(diǎn)的vip進(jìn)程和數(shù)據(jù)庫(kù)的srv進(jìn)程運(yùn)行的目標(biāo)上,正常運(yùn)行時(shí)主要進(jìn)程如表2所示。
表1 前臺(tái)運(yùn)行netstat-an測(cè)試結(jié)果
表2 Oracle RAC數(shù)據(jù)庫(kù)后臺(tái)監(jiān)測(cè)狀態(tài)
啟動(dòng)C/S客戶端程序,用命令監(jiān)測(cè)前臺(tái)的節(jié)點(diǎn)狀態(tài)和后臺(tái)的服務(wù)狀態(tài),Oracle RAC軟件故障測(cè)試結(jié)果如表3所示。
表3 Oracle RAC軟件故障測(cè)試結(jié)果
Oracle RAC采取了一系列措施來(lái)有效減少用戶操作故障對(duì)系統(tǒng)的影響,對(duì)于一般性的軟件故障,能做到很好的故障切換,服務(wù)正常漂移,保證應(yīng)用系統(tǒng)運(yùn)行正常、不間斷、不宕機(jī)。
與雙機(jī)熱備系統(tǒng)相比,Oracle RAC具有很好的負(fù)載均衡性能,服務(wù)所在節(jié)點(diǎn)均在工作,效率高,發(fā)生故障時(shí)應(yīng)用系統(tǒng)可以透明切換,可用性高;而熱備系統(tǒng)僅有一臺(tái)工作機(jī),另一臺(tái)工作機(jī)處于待機(jī)狀態(tài),資源浪費(fèi)大,負(fù)荷重,且數(shù)據(jù)庫(kù)發(fā)生故障時(shí)應(yīng)用程序必須人工重啟進(jìn)行干預(yù),可用性低。
總的來(lái)說(shuō),Oracle RAC雖然復(fù)雜,但對(duì)應(yīng)用系統(tǒng)而言卻是十分簡(jiǎn)單好用。Oracle RAC集群技術(shù)是網(wǎng)絡(luò)數(shù)據(jù)庫(kù)和HA架構(gòu)的最佳應(yīng)用,是一個(gè)具有自動(dòng)診斷分析和自我管理的商用數(shù)據(jù)庫(kù),足以滿足計(jì)量信息的高可用性、高可靠性需求。
[1]M.HART, S.JESSE.Oracle database 10g 高可用性實(shí)現(xiàn)方案[M].劉永健,孔令梅,譯.北京: 清華大學(xué)出版社,2005.
[2]張曉明.大話Oracle RAC集群高可用性備份與恢復(fù)[M].北京: 人民郵電出版社,2009.