王 贊 劉金蘭 孟少卿
【摘要】文章通過Linux HA組件與DB2 HADR(High Availability and Disaster Recovery)組件相結(jié)合的方式實現(xiàn)在線教學系統(tǒng)的數(shù)據(jù)庫高可用性方案。首先介紹了HADR實現(xiàn)DB2的雙機熱備,并分析了HADR自身存在的無法自動切換問題,然后提出了結(jié)合HA和HADR實現(xiàn)DB2數(shù)據(jù)庫自動切換的解決方案,并對方案中出現(xiàn)的特別問題提出了解決辦法。為提高在線學習系統(tǒng)的可用性提供了數(shù)據(jù)庫保證。
【關鍵詞】在線學習系統(tǒng);高可用性災難恢復;雙機熱備;實例監(jiān)控;自動切換
引言
信息技術給當今社會帶來了巨大的變化,各行業(yè)通過運用IT技術可以實現(xiàn)減少成本、提高競爭優(yōu)勢、加強溝通并幫助提高對關鍵業(yè)務流程的管理。其中,數(shù)據(jù)庫技術在信息化建設中扮演重要的角色,在各行業(yè)中都得以重要的應用。在高等教育領域也發(fā)揮了極其重要的作用,隨著網(wǎng)絡的發(fā)展,在線學習系統(tǒng)可以跨越時間、空間的限制,使得教學工作可以在更廣的范圍開展,也是網(wǎng)絡優(yōu)勢的典型體現(xiàn)之一。在線學習系統(tǒng)主要采用Web技術、數(shù)據(jù)庫以及視頻技術相配合的方式,通過互聯(lián)網(wǎng)提供視頻教學、問題解答、教學評價、在線交流等功能,為課堂教學提供了有效的補充,同時也是網(wǎng)絡教育、繼續(xù)教育的有效教學手段。
在線教學系統(tǒng)的運行過程中,高可用性始終是該系統(tǒng)的核心問題,如何保證系統(tǒng)提供不間斷的信息服務是在線教學系統(tǒng)需要重點解決的問題。其中,大量課程及教學信息都存儲在數(shù)據(jù)庫里,數(shù)據(jù)庫作為該系統(tǒng)的中樞,需要得到第一位的保障。一旦數(shù)據(jù)庫出現(xiàn)故障,將會導致所有的功能都無法提供。導致數(shù)據(jù)庫系統(tǒng)故障的因素可能由各種原因引起,如設備故障、操作系統(tǒng)故障、軟件系統(tǒng)故障等等[1]。一般情況下,恢復服務器正??赡苄枰?0分鐘、幾小時甚至幾天。但對于重要系統(tǒng)而言,就需要通過雙機熱備、集群等策略[2],來避免長時間的服務中斷,保證系統(tǒng)長期、可靠的服務。
DB2是一款大型關系型數(shù)據(jù)庫系統(tǒng)[3],其UDB版可通過HADR技術[4]實現(xiàn)數(shù)據(jù)庫的雙機熱備,當一臺服務器發(fā)生故障時,另一臺數(shù)據(jù)庫通過配置可接管服務。但是HADR本身通過重定向路由的方式實現(xiàn),在切換方面無法實現(xiàn)數(shù)據(jù)庫的自動切換,給系統(tǒng)管理造成很大的不便。本文將提出通過結(jié)合Linux HA組件和DB2 HADR協(xié)同工作的方式解決上述問題,采用HA+HADR相結(jié)合的方式實現(xiàn)在線學習系統(tǒng)數(shù)據(jù)庫的自動切換。
本文共分為五個部分,第一部分為引言,第二部分簡單描述HADR的實現(xiàn)方式及HADR的不足,第三部分將詳細的描述如何結(jié)合HA及HADR實現(xiàn)完全自動切換,第四部分列出實現(xiàn)HA+HADR的實驗過程,并提出了部分特殊問題及解決方式。最后,對本文進行了總結(jié)。
一 DB2 HADR方案描述
1 DB2 HADR方案原理簡介
HADR是數(shù)據(jù)庫級別的高可用性數(shù)據(jù)災難恢復機制,最初被應用于Informix數(shù)據(jù)庫系統(tǒng)中,稱為High Availability Data Replication。IBM收購Informix之后,這項技術就應用到了新的DB2發(fā)行版中。
一個HADR環(huán)境需要兩臺數(shù)據(jù)庫服務器:主數(shù)據(jù)庫服務器(Primary)和備用數(shù)據(jù)庫服務器(Standby)(如圖1所示)。當主數(shù)據(jù)庫中發(fā)生事務操作時,系統(tǒng)同時將日志文件通過TCP/IP協(xié)議傳送到備用數(shù)據(jù)庫服務器,然后備用數(shù)據(jù)庫對接受到的日志文件進行重放(Replay)[4],從而保持與主數(shù)據(jù)庫的一致性。當主數(shù)據(jù)庫發(fā)生故障時(如圖2所示),備用數(shù)據(jù)庫服務器通過切換可以接管主數(shù)據(jù)庫服務器的事務處理。此時,備用數(shù)據(jù)庫服務器作為新的主數(shù)據(jù)庫服務器進行數(shù)據(jù)庫的讀寫操作,而客戶端應用程序的數(shù)據(jù)庫連接可以通過自動客戶端重新路由(Automatic Client Reroute)機制轉(zhuǎn)移到新的主服務器。當原來的主數(shù)據(jù)庫服務器被修復后,又可以作為新的備用數(shù)據(jù)庫服務器加入HADR。通過這種機制,DB2 UDB實現(xiàn)了數(shù)據(jù)庫的災難恢復和高可用性,最大限度的避免了數(shù)據(jù)丟失,實現(xiàn)了一定程度上的高可用性。
圖1正常情況下的主備服務
圖2主數(shù)據(jù)庫故障后的情況
2 HADR方案的核心問題
HADR通過如下三個方面實現(xiàn)數(shù)據(jù)庫高可用性:
(1)主備數(shù)據(jù)庫同步問題
主備數(shù)據(jù)庫同步問題可以認為是HADR的首要問題,DB2采用了日志傳輸(Log Shipping)的方式解決了這個問題,通過日志傳輸及日志回放,兩臺數(shù)據(jù)庫的數(shù)據(jù)保持同步。
(2)故障切換
系統(tǒng)管理員可在兩臺機器中的任何一臺進行切換,但HADR本身只能提供手動切換,這樣就大大降低了高可用性,本文也主要針對這一點進行了一些工作。
(3)重定向路由
在主服務器發(fā)生故障的時候,客戶機通過重新定向路由的方式連接新的數(shù)據(jù)庫,保證新數(shù)據(jù)庫接管后客戶端的應用能正常使用。
3 HADR的不足
DB2自身帶的HADR方案在很大程度上解決了雙機熱備的問題,但并不能自動的監(jiān)測系統(tǒng)運行狀態(tài),當主數(shù)據(jù)庫(Primary Node)出現(xiàn)問題發(fā)生故障的時候,系統(tǒng)管理員必須自己檢測并手動切換,當故障發(fā)生且管理員未能發(fā)現(xiàn)的情況下,系統(tǒng)將不可用。現(xiàn)有的HADR方案無法有效的解決此問題,必須采用一些其它的方案與之協(xié)同工作,實現(xiàn)Failover的自動切換,以保證數(shù)據(jù)庫系統(tǒng)的高可用性。經(jīng)過一定的研究,Linux Ha(Linux的高可用性組件,目前多采用HeartBeat)[5]+ MON(Linux的Monitor組件)可以用來與Hadr一起實現(xiàn)系統(tǒng)的自動切換,從而實現(xiàn)系統(tǒng)的高可用性。
二 HA+HADR方案的實現(xiàn)
1 Linux HA簡介
Linux HA項目[5]歷史悠久,很多Linux自帶的HA集群都是采用HeartBeat來實現(xiàn)。高可用性集群的設計思想就是要最大限度地減少服務中斷時間,HeartBeat作為一類高可用性集群軟件,可以分別安裝在兩個或多個節(jié)點上,HeartBeat包括兩個最核心的部分,一是心跳監(jiān)測、二是資源接管;心跳監(jiān)測可以通過網(wǎng)絡鏈路和串口進行,它們之間相互發(fā)送報文來告訴對方自己當前的狀態(tài),如果在指定的時間內(nèi)未收到對方發(fā)送的報文,那么就認為對方癱瘓,這時需啟動資源接管模塊來接管運行在對方主機上的資源或者服務。這就使得采用HeartBeat來實現(xiàn)Hadr自動切換成為可能。
2 HA+HADR方案具體實現(xiàn)
雖然HeartBeat可以監(jiān)測到系統(tǒng)的癱瘓,但很多時候數(shù)據(jù)庫服務由于各種原因出現(xiàn)故障但Linux系統(tǒng)并沒有宕機,在這種情況下,HeartBeat無法發(fā)揮作用,數(shù)據(jù)庫也就無法自動切換,這就在很大程度上降低了系統(tǒng)的高可用性。基于這些考慮,本方案將采用MON來實現(xiàn)應用級的監(jiān)測,監(jiān)測應用的運行狀態(tài),發(fā)現(xiàn)問題及時告知HeartBeat,通過HeartBeat進行服務器的切換。通過這種思路,就可以完全實現(xiàn)DB2應用級的高可用性。具體的流程見圖3:
圖 3HA+HADR實現(xiàn)方案流程圖
從圖3可以看到HA、MON、HADR在此方案中分別起的作用,MON實現(xiàn)DB2實例的監(jiān)控,HA實現(xiàn)雙機系統(tǒng)的切換,而HADR實現(xiàn)數(shù)據(jù)庫日志傳輸和主備切換。在這三個方面協(xié)同工作下,本方案將完全解決DB2的災難恢復,從而達到DB2的高可用性。對數(shù)據(jù)庫本身來說,DB2的HADR可通過日志傳輸(Log Shipping)的方式實現(xiàn)主備數(shù)據(jù)庫的數(shù)據(jù)同步,任何一臺服務器宕機后,通過上述方案保證另一臺機器提供相同的數(shù)據(jù)庫服務,用戶不會有明顯的感覺。同時,兩臺服務器都會知道并記錄消息,然后可通過多種方式告知系統(tǒng)管理員,管理員一旦解決宕機的服務器問題后主服務器又將新增的數(shù)據(jù)通過日志的方式寫回,以保持雙機的同步。
三 實驗描述及相關問題
1 實驗描述
(1)實驗服務器描述
本次實驗采用了兩臺相同的IBM 3850作為服務器,硬件配置相同,具體配置如表1所示:
表1實驗服務器配置表
(2)實驗步驟
1)安裝操作系統(tǒng),并分別配置網(wǎng)卡的IP,其中Eth1用反線相連。
2)在兩臺服務器上分別按照DB2 V9.0并創(chuàng)建實例。兩個安裝的參數(shù)應該相同,實例名也一樣。
3)在兩臺服務器上分別配置HADR,一個為主,一個為備。
4)安裝并配置HeartBeat。Asia Linux自帶HeartBeat,但可能版本原因,需要去Linux HA網(wǎng)站上下載最新版本。
5)安裝并配置MON。以保證其對HADR的管理。
上述步驟中,第一步是配置網(wǎng)絡環(huán)境,2)3)兩步安裝了數(shù)據(jù)庫并配置HADR,在4),5)兩步用到shell編程[6],用MON檢測數(shù)據(jù)庫運行狀態(tài),同時與HeartBeat通信,以保證故障發(fā)生的時候自動的切換。
2 實驗中遇到的重要問題及解決方案
在實驗過程中,在測試到CLOB字段的方案中發(fā)現(xiàn),HADR在切換過程中丟失了CLOB類型字段的內(nèi)容。而多數(shù)文章內(nèi)容的字段都是CLOB型的,故此問題較嚴重。經(jīng)過仔細查閱資料,發(fā)現(xiàn)了一篇關于“HADR and LOB replication”的文章[7],根據(jù)此文章得出“Non-logged LOB columns”將不能通過日志傳輸至備用數(shù)據(jù)庫。對于這個問題,修改表結(jié)構(gòu),將每個CLOB字段都改為“Logged”,通過這種辦法,這個問題得以解決。
四 結(jié)束語
本文結(jié)合Linux HA組件、MON以及DB2的HADR組件共同開發(fā)了一個較為完善的DB2高可用性解決方案,實現(xiàn)了DB2故障時的自動切換,在后續(xù)的多種測試中均能自動切換且數(shù)據(jù)保持一致。同樣對于其它的應用如Web、中間件等應用也可以采用HeartBeat、Mon以及相應的系統(tǒng)軟件實現(xiàn)其它系統(tǒng)的高可用性。這樣,系統(tǒng)將大大提高不間斷服務時間,提供更為可靠的服務。
參考文獻
[1]劉曉潔,黃永佳. 基于Linux的雙機熱備系統(tǒng)的實現(xiàn)技術[J]. 計算機應用研究,2007,24(4)255-257.
[2]申志冰,羅宇. 利用HeartBeat實現(xiàn)Linux上的雙機熱備系統(tǒng)[J].計算機工程與應用,2002,38(19)126-128.
[3] 龔濤 等編著.DB2程序員成長攻略[M].北京:中國水利水電出版社.2007.
[4] IBM InfoCenter.高可用性災難恢復概述[EB/OL].
[5] Robertson, A. L. Linux-HA Heartbeat Design[C]. Proceedings of the 4th International Linux Showcase and Conference. Atlanta, October 10-14 2000.
[6] Neil Matthew,Richard Stones.Linux程序設計[M]. 陳健,宋健建,譯. 北京:人民郵電出版社.2007.
[7] IBM Software Group .HADR and LOB replication [EB/OL].
Application Research of High Availability for database of Online Learning System
WANG Zan1,LIU Jin-lanMENG Shao-qing
(1.Schoole of Management, Tianjin University, Tianjin 300072, China; 2. Information and Network Center, Tianjin University, Tianjin 300072, China)
Abstract: A new solution of high availability for database of OLS (Online Learning System) was issued in this paper and its main idea is to combine Linux HA and DB2 HADR to resolve the problem that single HADR cannot failover automatically. Firstly, the basic theory of HADR was introduced and the problem mentioned above was explained, then the solution was suggested to offer a high availability DB2 Database service. At last, the experiment was processed and some crucial problems in the process were described. The solution monitored the status of both servers at instance, so it is a much deeper strategy of high availability for DB2. This will ensure the high availability of the OLS.
Keywords: OLS (Online Learning System); HADR (High Availability and Disaster Recovery); Hot Standby; Instance Monitor; Failover Automatically