陳 超/無錫市計量測試中心
隨著計量檢測業務的不斷發展,計量管理信息系統的數據庫的數據量日益龐大,計量檢測機構正常業務的開展對信息系統的依賴性越來越大,對系統的保護和對系統數據的防災顯得越來越重要。計量信息系統需要不間斷為計量檢測人員提供服務,即使發生短暫的業務中斷,也會導致很大的經濟損失。因此保證系統數據庫的高可用性、安全性尤為重要。所以,本文提出了基于Oracle RAC(甲骨文數據庫實時應用集群)的集群技術的高可用性解決方案,通過Oracle RAC的集群技術提高計量信息系統的可用性、可靠性。
在計算機系統中,可用性可定義為MTTF(平均失效前時間)/(MTTF+MTTR(平均恢復前時間))×100%,即系統保持正常運行時間的百分比。按照標準劃分,可用水平為99.9%,即每年停機時間<8.8 h的系統,稱為HA(High Availability)(高可用性)。因此,為了最大限度地保障網絡的服務質量,HA架構越來越多地得到企業的認可和支持。HA架構追求的就是最高的服務質量,即高可用性、高可靠性和高安全性。
集群(Cluster)是由多個計算機(Node)組成一個整體向用戶提供某種網絡資源。集群技術開始于20世紀70年代,以Linux集群的應用最為廣泛,具有高可擴展性、高性能和高可用性。在目前最流行的關鍵業務如數據庫的高可用性群集應用方案中,雙機技術和Oracle RAC成為最受矚目的2個亮點。
Oracle提出的真正應用集群(RAC)概念,采用服務漂移、VIP漂移和TAF透明故障切換等新技術,能有效解決常見的軟硬件故障引起的死機,如SQL(結構化查詢語言)語句故障、用戶進程故障、網絡故障、用戶錯誤故障、實例故障和介質故障等。在Oracle RAC中,CRS(集群就緒服務)服務協調所有集群結點統一工作,并自動根據硬件的故障情況,實時刪除或增加集群結點、動態管理和維護集群的工作,具有極大的可伸縮性、低成本和高可用性。
本文提出基于RAC模式典型的兩節點Oracle RAC結構,結構圖如圖1所示。

圖1 兩節點RAC系統結構圖
數據庫服務器Server A和Server B是一套2節點的集群系統,兩節點上分別運行著相互獨立的數據庫實例進程A和進程B。兩個實例提供相同的數據庫服務名(Service Name),通過集群文件系統共享相同的數據文件。首先,兩個數據庫實例節點通過“集群心跳”彼此探測對方是否存活,維持集群狀態。其次,RAC的Cache Fusion(互聯機制訪問)技術利用“集群心跳”來同步各節點內存中已經變化的數據,從而保持數據以及服務狀態的一致性,也大大提高了數據的同步效率。這樣,當一個節點停止服務,應用端會自動連接另一個節點來完成剛才失敗的事務。由于各節點數據一致性,事務的容錯得以成功。
在Oracle RAC中,通過虛地址(VIP)和服務的漂移完成故障切換,保證數據庫的HA特性。在每個RAC節點上,配置了公用地址、私有地址和虛地址VIP。當某個節點發生故障時,其VIP會自動漂移到另一個節點上,并在該節點上創建相應的服務,保證應用系統的正常服務。服務是Oracle的一個基本特征,可以在單實例中使用,也可以在RAC環境中使用。在RAC環境中,服務運行在一個或多個實例之上,它能夠讓RAC系統將集群數據庫的所有資源集成為一個單一的系統映像,這樣可以最優化集群的可管理性,簡單化系統的配置、測試、災難恢復和降低管理成本。服務實現了數據庫的透明連接,用戶通過服務名連接數據庫,不用關心到底是哪個實例在真正執行SQL應用。
本文提出的RAC系統有2個節點,運行一個服務EDU(引擎可調度單元),該服務默認運行在主機1(Server A)和主機2(Server B)上。Oracle RAC測試環境配置如圖2所示。

圖2 Oracle RAC 測試環境配置
用戶連接RAC時,通常使用tnsnames.Ora網絡配置文件,該文件由Oracle的net客戶端創建,具有連通性、可管理性、可縮放性、安全性和可訪問性等特點,可以通過配置某些參數來實現連接時故障切換、透明應用程序故障切換、客戶端負載平衡和服務器端負載平衡等。
為了測試和分析Oracle RAC的HA性能,筆者做了一個測試。測試中,一個C/S(客戶服務模式)客戶端通過ODBC(開放數據庫互連)方式連接一個圖2所示的2節點RAC系統,進行連續的數據插入刪除操作。同時,對正在連接的節點進行軟硬件測試操作,并保證同時有2個節點處于活動狀態,前臺通過net2 stat-an命令監測C/S客戶端的連接狀態,后臺通過srvctl status service -d test-s edu命令來監測數據庫服務的狀態。
現場未做部分高危險性測試,但后來經過突發事件證實實驗結果。
3.1.1 前臺測試一
C/S客戶端通過ODBC和TNSNAME(服務名)訪問數據庫服務名EDU。C/S客戶端連接數據庫,前臺運行netstat -an監測結果如表1所示。
3.1.2 前臺測試二
SHELL腳本通過SQLPLUS(結構化查詢語言編輯器)和TNSNAME自動訪問數據庫服務名EDU。

3.1.3 后臺監測一
運行srvctl status service-d test-s edu監測如下:Service edu is running on instance(s) test1,test2
3.1.4 后臺監測二
crs_stat命令監測的服務器進程主要分為兩類,一類是節點的狀態,如asm、lsnr、gsd、ons、vip等進程;另一類是集群數據庫的狀態,如cs、sa、srv等進程。服務漂移主要體現在節點的vip進程和數據庫的srv進程運行的目標上,正常運行時主要進程如表2所示。

表1 前臺運行netstat-an測試結果

表2 Oracle RAC數據庫后臺監測狀態
啟動C/S客戶端程序,用命令監測前臺的節點狀態和后臺的服務狀態,Oracle RAC軟件故障測試結果如表3所示。

表3 Oracle RAC軟件故障測試結果
Oracle RAC采取了一系列措施來有效減少用戶操作故障對系統的影響,對于一般性的軟件故障,能做到很好的故障切換,服務正常漂移,保證應用系統運行正常、不間斷、不宕機。
與雙機熱備系統相比,Oracle RAC具有很好的負載均衡性能,服務所在節點均在工作,效率高,發生故障時應用系統可以透明切換,可用性高;而熱備系統僅有一臺工作機,另一臺工作機處于待機狀態,資源浪費大,負荷重,且數據庫發生故障時應用程序必須人工重啟進行干預,可用性低。
總的來說,Oracle RAC雖然復雜,但對應用系統而言卻是十分簡單好用。Oracle RAC集群技術是網絡數據庫和HA架構的最佳應用,是一個具有自動診斷分析和自我管理的商用數據庫,足以滿足計量信息的高可用性、高可靠性需求。
[1]M.HART, S.JESSE.Oracle database 10g 高可用性實現方案[M].劉永健,孔令梅,譯.北京: 清華大學出版社,2005.
[2]張曉明.大話Oracle RAC集群高可用性備份與恢復[M].北京: 人民郵電出版社,2009.