亓微微
目前,國內外對數據庫高可用性領域的研究,主要還是集中在雙機集群、RAC、DATAGUARD這幾種獨立技術的研究上。而事實上,每一種單獨的技術,都有其自身的弱點,僅僅依靠一種技術,是無法將數據庫的高可用性演繹得淋漓盡致的。本文主要介紹RAC和DATAGUARD兩種技術各自的特點,然后論證結合RAC與DATAGUARD技術在高可用性領域的可行性方案。然后分別從主機,存儲等各方面模擬出數據庫故障,來驗證此高可用性方案的可靠性,證明此方案優于目前業內常用的一些數據庫高可用性方案。
RAC技術DATAGUARD技術雙機集群本文首先講解RAC與DATAGUARD技術的各自原理,然后研究利用ORACLE數據庫的RAC和DATAGUARD技術,實現在企業級數據庫高可用性領域的應用。
要解決的關鍵技術問題:
(1)實現RAC技術的failover功能
Failover功能,是RAC技術的核心功能之一。即當RAC數據庫的某一個節點出現故障后,這個故障節點上運行的所有應用會自動切換至其它節點上繼續運行,整個切換過程對用戶而言是透明的。
(2)實現RAC技術和DATAGUARD技術的完美結合
RAC技術,可以解決除了存儲故障外的所有問題。如果不巧恰恰是存儲出現故障,這時,就可以借用DATAGUARD技術,將數據庫系統切換至備用主機,保持業務的正常運行。在這個物理架構中,DATAGUARD的主庫是一套RAC數據庫,而DATAGUARD備庫卻是一個單節點的數據庫,如何將RAC數據庫切換到單節點的備庫是需要解決的關鍵技術難題。
1 Oracle RAC透明切換特性
TAF,英文全稱:Transparent Application Failover,是net層透明故障轉移,是一種被動的故障轉移方式,它主要依賴于VIP。可以通過客戶端和服務器端兩種方式配置TAF的策略。
下面主要介紹客戶端配置TAF的方式:
控制TAF策略的參數說明:
FAILOVER:
Failover控制開關(on/off),如果為off,不提供故障切換功能,但連接時會對address列表進行依次嘗試,直到找到可用為止。它有兩種類型:session/select。
Session:
提供session級別的故障切換。會話可以正常切換到其他節點,但查詢沒有繼續完成,也就是說查詢的結果沒有全部出來,只出來數據庫關閉前的數據。
Select:
提供select級別的故障切換。切換過程對查詢語句透明,但事物類處理需要回滾操作。
RETRIES:
故障切換時重試次數。
DELAY:
故障切換時重試間隔時間。
2 DATAGUARD技術原理
Oracle dataguard是當前保護企業級核心數據最有效的解決方案,它能夠在7*24的基礎上可用,無論是否發生災難或其他中斷,oracle dataguard技術都是實現企業業務連續性基礎架構中的一個關鍵因素。
Oracle dataguard使備用數據庫保持為與生產數據庫在事務上一致的副本。這些備用數據庫可位于距生產數據中心數千里以外的遠程災難恢復[6]站點。當生產數據庫由于計劃中斷或意外中斷而變得不可用時,dataguard可以將任意備用數據庫切換為生產角色,從而使用與中斷相關的停機時間送到最小,并防止任何的數據丟失。
Dataguard技術支持兩種不同的備用數據庫,分別是物理備用數據庫(也稱重做日志應用備庫)和邏輯備用數據庫(也稱SQL重用數備庫)。無特殊說明,本文重點介紹物理備用數據庫。
物理備用數據庫通過接收,應用來自主數據庫的重做日志,實現與主數據庫的數據同步。它在物理上與主數據庫具有相同的數據塊,因而數據庫模式都是相同的。
3 RAC+DATAGUARD方案的理論研究
在本方案中,我們的主數據庫是一個RAC數據庫,而基于方案成本的考慮,備用數據庫是一個單節點的數據庫。如果可能,備用數據庫也可以是一個RAC數據庫。
在正常情況下,如圖3.1所示,所有的應用程序都分別連接到主RAC數據庫的兩個實例上,同時開啟RAC的負載均衡和透明切換功能,應用程序必須使用VIP來連接數據庫。應用程序的事務產生的任何數據變化,都會通過dataguard機制同步至備用數據庫上,使備用數據庫始終與主RAC數據庫保持一致。
如果主RAC數據庫的某個節點出現類似應用故障,主機故障,網絡故障,此時,該節點上的VIP會自動漂移至該RAC數據庫的其他節點上,已經連接在發生故障的節點上的會話,會通過透明切換的功能,將這些會話轉移至其他安全的節點上繼續運行。而這些錯誤的發生,對應用程序而言沒有任何影響,不需要做任何修改,應用程序就可以繼續在主RAC數據庫上繼續運行。
如果主RAC數據庫的存儲設備出現故障,此時,則主RAC數據庫將完全停止,需要對主RAC數據庫的存儲設備進行恢復才可以繼續使用,同時,應用程序也將全部中斷,會影響到業務的繼續運行。這時,我們可迅速激活備用數據庫(因為備用數據庫的數據與主RAC數據庫的數據始終保持一致,所以激活備用數據庫,即可以恢復業務。),然后修改應用程序的數據庫連接串,將連接串地址從以前的主RAC數據庫地址修改為現在的備用數據庫地址,這樣就可以在最短的時間內恢復業務。研究結論:
當主RAC數據庫出現應用,主機,網絡等方面的故障時,此方案可以做到0業務中斷;而當主RAC數據庫出現存儲方面的故障時,此方案需要臨時中斷業務。業務中斷時間=max(備用數據庫激活時間,應用程序的數據庫連接串修改時間)。
在極限情況下,此數據庫高可用性方案也會業務中斷,但此方案的業務中斷時間遠遠低于以前的高可用性方案。
4測試RAC+DATAGUARD高可用性方案的容災能力
4.1模擬主RAC庫的主機故障測試方案的容災能力
(1)問題提出
當主RAC數據庫的某個節點主機出現故障,如:CPU,磁盤,內存等故障,導致該節點停機,此時,連接在這個節點上運行的會話是否會被中斷?
(2)解決方案
在Oracle RAC環境下,在配置TAF(Transparent Application Failover)之后,如果一個節點上的實例出現了故障,Oracle會自動將會話漂移到另一個實例上,保持業務的正常運行。
前面已經介紹過,配置RAC的透明切換功能有兩種方式,在客戶端配置或在服務器配置。下面在客戶端的tnsname.ora文件中配置TAF,內容如下:
ZYXDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.100.98)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.203.100.99)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = zyxdb)
endprint