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