王 贊 劉金蘭 孟少卿
【摘要】文章通過Linux HA組件與DB2 HADR(High Availability and Disaster Recovery)組件相結合的方式實現在線教學系統的數據庫高可用性方案。首先介紹了HADR實現DB2的雙機熱備,并分析了HADR自身存在的無法自動切換問題,然后提出了結合HA和HADR實現DB2數據庫自動切換的解決方案,并對方案中出現的特別問題提出了解決辦法。為提高在線學習系統的可用性提供了數據庫保證。
【關鍵詞】在線學習系統;高可用性災難恢復;雙機熱備;實例監控;自動切換
引言
信息技術給當今社會帶來了巨大的變化,各行業通過運用IT技術可以實現減少成本、提高競爭優勢、加強溝通并幫助提高對關鍵業務流程的管理。其中,數據庫技術在信息化建設中扮演重要的角色,在各行業中都得以重要的應用。在高等教育領域也發揮了極其重要的作用,隨著網絡的發展,在線學習系統可以跨越時間、空間的限制,使得教學工作可以在更廣的范圍開展,也是網絡優勢的典型體現之一。在線學習系統主要采用Web技術、數據庫以及視頻技術相配合的方式,通過互聯網提供視頻教學、問題解答、教學評價、在線交流等功能,為課堂教學提供了有效的補充,同時也是網絡教育、繼續教育的有效教學手段。
在線教學系統的運行過程中,高可用性始終是該系統的核心問題,如何保證系統提供不間斷的信息服務是在線教學系統需要重點解決的問題。其中,大量課程及教學信息都存儲在數據庫里,數據庫作為該系統的中樞,需要得到第一位的保障。一旦數據庫出現故障,將會導致所有的功能都無法提供。導致數據庫系統故障的因素可能由各種原因引起,如設備故障、操作系統故障、軟件系統故障等等[1]。一般情況下,恢復服務器正常可能需要10分鐘、幾小時甚至幾天。但對于重要系統而言,就需要通過雙機熱備、集群等策略[2],來避免長時間的服務中斷,保證系統長期、可靠的服務。
DB2是一款大型關系型數據庫系統[3],其UDB版可通過HADR技術[4]實現數據庫的雙機熱備,當一臺服務器發生故障時,另一臺數據庫通過配置可接管服務。但是HADR本身通過重定向路由的方式實現,在切換方面無法實現數據庫的自動切換,給系統管理造成很大的不便。本文將提出通過結合Linux HA組件和DB2 HADR協同工作的方式解決上述問題,采用HA+HADR相結合的方式實現在線學習系統數據庫的自動切換。
本文共分為五個部分,第一部分為引言,第二部分簡單描述HADR的實現方式及HADR的不足,第三部分將詳細的描述如何結合HA及HADR實現完全自動切換,第四部分列出實現HA+HADR的實驗過程,并提出了部分特殊問題及解決方式。最后,對本文進行了總結。
一 DB2 HADR方案描述
1 DB2 HADR方案原理簡介
HADR是數據庫級別的高可用性數據災難恢復機制,最初被應用于Informix數據庫系統中,稱為High Availability Data Replication。IBM收購Informix之后,這項技術就應用到了新的DB2發行版中。
一個HADR環境需要兩臺數據庫服務器:主數據庫服務器(Primary)和備用數據庫服務器(Standby)(如圖1所示)。當主數據庫中發生事務操作時,系統同時將日志文件通過TCP/IP協議傳送到備用數據庫服務器,然后備用數據庫對接受到的日志文件進行重放(Replay)[4],從而保持與主數據庫的一致性。當主數據庫發生故障時(如圖2所示),備用數據庫服務器通過切換可以接管主數據庫服務器的事務處理。此時,備用數據庫服務器作為新的主數據庫服務器進行數據庫的讀寫操作,而客戶端應用程序的數據庫連接可以通過自動客戶端重新路由(Automatic Client Reroute)機制轉移到新的主服務器。當原來的主數據庫服務器被修復后,又可以作為新的備用數據庫服務器加入HADR。通過這種機制,DB2 UDB實現了數據庫的災難恢復和高可用性,最大限度的避免了數據丟失,實現了一定程度上的高可用性。
圖1正常情況下的主備服務
圖2主數據庫故障后的情況
2 HADR方案的核心問題
HADR通過如下三個方面實現數據庫高可用性:
(1)主備數據庫同步問題
主備數據庫同步問題可以認為是HADR的首要問題,DB2采用了日志傳輸(Log Shipping)的方式解決了這個問題,通過日志傳輸及日志回放,兩臺數據庫的數據保持同步。
(2)故障切換
系統管理員可在兩臺機器中的任何一臺進行切換,但HADR本身只能提供手動切換,這樣就大大降低了高可用性,本文也主要針對這一點進行了一些工作。
(3)重定向路由
在主服務器發生故障的時候,客戶機通過重新定向路由的方式連接新的數據庫,保證新數據庫接管后客戶端的應用能正常使用。
3 HADR的不足
DB2自身帶的HADR方案在很大程度上解決了雙機熱備的問題,但并不能自動的監測系統運行狀態,當主數據庫(Primary Node)出現問題發生故障的時候,系統管理員必須自己檢測并手動切換,當故障發生且管理員未能發現的情況下,系統將不可用。現有的HADR方案無法有效的解決此問題,必須采用一些其它的方案與之協同工作,實現Failover的自動切換,以保證數據庫系統的高可用性。經過一定的研究,Linux Ha(Linux的高可用性組件,目前多采用HeartBeat)[5]+ MON(Linux的Monitor組件)可以用來與Hadr一起實現系統的自動切換,從而實現系統的高可用性。
二 HA+HADR方案的實現
1 Linux HA簡介
Linux HA項目[5]歷史悠久,很多Linux自帶的HA集群都是采用HeartBeat來實現。高可用性集群的設計思想就是要最大限度地減少服務中斷時間,HeartBeat作為一類高可用性集群軟件,可以分別安裝在兩個或多個節點上,HeartBeat包括兩個最核心的部分,一是心跳監測、二是資源接管;心跳監測可以通過網絡鏈路和串口進行,它們之間相互發送報文來告訴對方自己當前的狀態,如果在指定的時間內未收到對方發送的報文,那么就認為對方癱瘓,這時需啟動資源接管模塊來接管運行在對方主機上的資源或者服務。這就使得采用HeartBeat來實現Hadr自動切換成為可能。
2 HA+HADR方案具體實現
雖然HeartBeat可以監測到系統的癱瘓,但很多時候數據庫服務由于各種原因出現故障但Linux系統并沒有宕機,在這種情況下,HeartBeat無法發揮作用,數據庫也就無法自動切換,這就在很大程度上降低了系統的高可用性。基于這些考慮,本方案將采用MON來實現應用級的監測,監測應用的運行狀態,發現問題及時告知HeartBeat,通過HeartBeat進行服務器的切換。通過這種思路,就可以完全實現DB2應用級的高可用性。具體的流程見圖3:
圖 3HA+HADR實現方案流程圖
從圖3可以看到HA、MON、HADR在此方案中分別起的作用,MON實現DB2實例的監控,HA實現雙機系統的切換,而HADR實現數據庫日志傳輸和主備切換。在這三個方面協同工作下,本方案將完全解決DB2的災難恢復,從而達到DB2的高可用性。對數據庫本身來說,DB2的HADR可通過日志傳輸(Log Shipping)的方式實現主備數據庫的數據同步,任何一臺服務器宕機后,通過上述方案保證另一臺機器提供相同的數據庫服務,用戶不會有明顯的感覺。同時,兩臺服務器都會知道并記錄消息,然后可通過多種方式告知系統管理員,管理員一旦解決宕機的服務器問題后主服務器又將新增的數據通過日志的方式寫回,以保持雙機的同步。
三 實驗描述及相關問題
1 實驗描述
(1)實驗服務器描述
本次實驗采用了兩臺相同的IBM 3850作為服務器,硬件配置相同,具體配置如表1所示:
表1實驗服務器配置表
(2)實驗步驟
1)安裝操作系統,并分別配置網卡的IP,其中Eth1用反線相連。
2)在兩臺服務器上分別按照DB2 V9.0并創建實例。兩個安裝的參數應該相同,實例名也一樣。
3)在兩臺服務器上分別配置HADR,一個為主,一個為備。
4)安裝并配置HeartBeat。Asia Linux自帶HeartBeat,但可能版本原因,需要去Linux HA網站上下載最新版本。
5)安裝并配置MON。以保證其對HADR的管理。
上述步驟中,第一步是配置網絡環境,2)3)兩步安裝了數據庫并配置HADR,在4),5)兩步用到shell編程[6],用MON檢測數據庫運行狀態,同時與HeartBeat通信,以保證故障發生的時候自動的切換。
2 實驗中遇到的重要問題及解決方案
在實驗過程中,在測試到CLOB字段的方案中發現,HADR在切換過程中丟失了CLOB類型字段的內容。而多數文章內容的字段都是CLOB型的,故此問題較嚴重。經過仔細查閱資料,發現了一篇關于“HADR and LOB replication”的文章[7],根據此文章得出“Non-logged LOB columns”將不能通過日志傳輸至備用數據庫。對于這個問題,修改表結構,將每個CLOB字段都改為“Logged”,通過這種辦法,這個問題得以解決。
四 結束語
本文結合Linux HA組件、MON以及DB2的HADR組件共同開發了一個較為完善的DB2高可用性解決方案,實現了DB2故障時的自動切換,在后續的多種測試中均能自動切換且數據保持一致。同樣對于其它的應用如Web、中間件等應用也可以采用HeartBeat、Mon以及相應的系統軟件實現其它系統的高可用性。這樣,系統將大大提高不間斷服務時間,提供更為可靠的服務。
參考文獻
[1]劉曉潔,黃永佳. 基于Linux的雙機熱備系統的實現技術[J]. 計算機應用研究,2007,24(4)255-257.
[2]申志冰,羅宇. 利用HeartBeat實現Linux上的雙機熱備系統[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