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