曹文琴,朱海燕,劉映球
(1.華東交通大學(xué) 機(jī)電學(xué)院,南昌 330013;2.華東交通大學(xué) 軌道交通學(xué)院,南昌 330013;3.上海盛大在線 技術(shù)運(yùn)維中心,上海 201203)
鑒于數(shù)據(jù)庫對于企業(yè)運(yùn)作的重要性,除了要求高可用外,同時也要求數(shù)據(jù)庫可以容災(zāi),當(dāng)數(shù)據(jù)庫系統(tǒng)遭遇雷擊、地震、火災(zāi)、水災(zāi)等自然災(zāi)害或者黑客、戰(zhàn)爭、恐怖襲擊等人為災(zāi)難而無法繼續(xù)提供服務(wù)時,數(shù)據(jù)庫災(zāi)備系統(tǒng)能夠及時接管業(yè)務(wù),從而保證業(yè)務(wù)持續(xù)性。
事實(shí)上,數(shù)據(jù)庫系統(tǒng)的容災(zāi)環(huán)境就是當(dāng)前對外服務(wù)的生產(chǎn)數(shù)據(jù)庫環(huán)境的一個備份,基于此,本文著重研究了企業(yè)生產(chǎn)環(huán)境中Oracle數(shù)據(jù)庫系統(tǒng)的容災(zāi)技術(shù)以及各自應(yīng)用的場景、優(yōu)缺點(diǎn),希望能對后續(xù)的生產(chǎn)實(shí)踐提供有價值的參考。
備份是保證數(shù)據(jù)庫可用性的重要措施。根據(jù)備份對象的不同,可以分為物理備份和邏輯備份,兩者的比較如表1所示;根據(jù)備份的時間特點(diǎn),又可分為靜態(tài)備份和動態(tài)備份,兩者的比較如表2所示。
表1 物理備份與邏輯備份比較
表2 靜態(tài)備份與動態(tài)備份比較
容災(zāi)環(huán)境一般離主站點(diǎn)較遠(yuǎn),至少也是跨機(jī)房。所以,在兩個站點(diǎn)之間同步數(shù)據(jù)的網(wǎng)絡(luò)帶寬不容忽視。
在對數(shù)據(jù)實(shí)時性要求很嚴(yán)格的環(huán)境中(或稱實(shí)時容災(zāi)),要求網(wǎng)絡(luò)帶寬能夠滿足業(yè)務(wù)峰值時的數(shù)據(jù)傳輸;如果允許數(shù)據(jù)同步過程有一個延時范圍(或稱異步容災(zāi)),則必須保證帶寬大于或等于一個數(shù)據(jù)同步周期(如一天時間)內(nèi)的平均數(shù)據(jù)傳輸量。比較典型的例子有Oracle Data Guard容災(zāi)中的最大保護(hù)模式與最大性能模式對網(wǎng)絡(luò)帶寬的要求,如圖1所示。
圖1 Oracle Data Guard容災(zāi)模式對網(wǎng)絡(luò)帶寬的要求
上述討論的帶寬是容災(zāi)環(huán)境正常運(yùn)行時所需要的帶寬,對于動態(tài)容災(zāi)還有個數(shù)據(jù)初始化的問題。當(dāng)數(shù)據(jù)庫的初始數(shù)據(jù)較小時,可以考慮進(jìn)行壓縮備份再經(jīng)網(wǎng)絡(luò)傳輸?shù)饺轂?zāi)環(huán)境;相反,當(dāng)數(shù)據(jù)較大時,可以考慮采用手工備份,拷貝到移動設(shè)備再運(yùn)送到容災(zāi)環(huán)境的方式,避免長時間的網(wǎng)絡(luò)傳輸、帶寬占用。此外,可以為容災(zāi)環(huán)境設(shè)計(jì)專門的容災(zāi)、備份網(wǎng)絡(luò),避免對生產(chǎn)環(huán)境產(chǎn)生負(fù)面影響。
當(dāng)oracle數(shù)據(jù)庫的并發(fā)訪問壓力較大時,磁盤I/O較CPU、內(nèi)存等因素更容易成為數(shù)據(jù)庫的性能瓶頸。與網(wǎng)絡(luò)帶寬要求一樣,在對數(shù)據(jù)實(shí)時性要求很嚴(yán)格的環(huán)境中,容災(zāi)站點(diǎn)的IOPS必須滿足數(shù)據(jù)同步所需的峰值IOPS需求;在實(shí)時性要求不高的系統(tǒng),必須確保磁盤I/O在一個同步周期內(nèi)足以完成上個周期內(nèi)的數(shù)據(jù)同步。如果考慮故障切換后,要求容災(zāi)站點(diǎn)對外服務(wù),這時容災(zāi)站點(diǎn)的IOPS要求與主站點(diǎn)一樣。
通常,在oracle數(shù)據(jù)庫環(huán)境中,建議采用raid10保證磁盤的I/O性能與數(shù)據(jù)冗余。
隨著近年來SSD(Solid State Drive)技術(shù)的發(fā)展,可以采用SSD盤解決數(shù)據(jù)庫的I/O問題。與傳統(tǒng)硬盤不一樣,SSD的內(nèi)部沒有機(jī)械裝置,突破了傳統(tǒng)硬盤的性能瓶頸,并且價格逐漸走低。SSD的I/O速度至少比傳統(tǒng)硬盤快1個數(shù)量級,此外還具有低功耗、無噪音、抗震動和低熱量的特點(diǎn)。
值得一提的另外一種固態(tài)技術(shù)就是Fusion-io公司的產(chǎn)品[1],如基于ioMemory平臺的ioDrive,ioDrive2, ioDrive Duo, ioDrive2 Duo, ioDrive Octal。Fusion-io具有所有傳統(tǒng)SSD的優(yōu)點(diǎn),能提供接近緩存的I/O處理能力。與傳統(tǒng)的SSD很大的一個區(qū)別在于Fusion-io采用PCIe插槽連接到服務(wù)器,大大簡化了I/O處理環(huán)節(jié),降低了I/O響應(yīng)時間。對于高并發(fā)、讀取頻繁的oracle數(shù)據(jù)庫應(yīng)用來說非常合適。
容災(zāi)環(huán)境保證DB可用,甚至高可用,需要根據(jù)業(yè)務(wù)特點(diǎn)確定好數(shù)據(jù)庫的RPO/RTO策略??紤]到容災(zāi)環(huán)境的構(gòu)建、維護(hù)成本,RPO/RTO策略不同,就可以采取不同的實(shí)施方案。對于允許較大RPO/RTO數(shù)據(jù)庫系統(tǒng),可以采用磁帶方式進(jìn)行備份、恢復(fù);對于小的RPO/RTO策略,可以考慮數(shù)據(jù)庫的異步、同步復(fù)制方案,或者采取基于陣列的磁盤異步、同步復(fù)制方案。
遠(yuǎn)程數(shù)據(jù)同步中,黑客或者其他攻擊者很容易截取、篡改傳輸內(nèi)容。因此在數(shù)據(jù)傳輸鏈路上可以采用專線或者VPN方式來保證,數(shù)據(jù)本身可以考慮采用軟、硬件方式進(jìn)行加密、解密,防火墻只開放必要的數(shù)據(jù)傳輸端口,有效的身份認(rèn)證等等,確保數(shù)據(jù)傳輸?shù)陌踩?、可靠和完整?/p>
成本包括實(shí)施成本與后續(xù)運(yùn)維成本,成本問題關(guān)系著最終的容災(zāi)方案實(shí)施,與以上因素均有關(guān)系。對容災(zāi)環(huán)境要求越高,成本越高。根據(jù)容災(zāi)環(huán)境設(shè)計(jì)目標(biāo),如果完全針對容災(zāi),當(dāng)主站點(diǎn)出現(xiàn)故障,要求在指定的RPO/RTO內(nèi)切換至容災(zāi)環(huán)境,則容災(zāi)站點(diǎn)的軟硬件環(huán)境配置要與主站點(diǎn)一樣,災(zāi)備環(huán)境能承擔(dān)所有的業(yè)務(wù)壓力。如果只是作為一個靜態(tài)或者動態(tài)備份,則可以降低硬件需求。
該種方式比較原始,也較常用。除了正常對外服務(wù)的生產(chǎn)數(shù)據(jù)庫外,另外有一套相似的數(shù)據(jù)庫備份環(huán)境位于別的IDC。通過定期備份機(jī)制對生產(chǎn)數(shù)據(jù)庫進(jìn)行備份,備份介質(zhì)可以是磁帶也可以是磁盤,備份完畢,將磁帶備份離線存儲或者及時將最新的備份傳回災(zāi)備環(huán)境并進(jìn)行恢復(fù)。
Oracle數(shù)據(jù)庫的備份機(jī)制依據(jù)該數(shù)據(jù)庫系統(tǒng)的RTO/RPO指標(biāo)來嚴(yán)格實(shí)施,這種實(shí)現(xiàn)方式的RPO通常在小時級。備份的方式一般采用該數(shù)據(jù)庫支持的物理備份方式(甚至可能是邏輯備份方式),定期進(jìn)行基準(zhǔn)備份、增量備份,或者先進(jìn)行數(shù)據(jù)庫全備,再定期備份數(shù)據(jù)庫日志等等。
該種方式的弊端是災(zāi)備環(huán)境資源閑置;故障切換時一般需要較長時間進(jìn)行數(shù)據(jù)恢復(fù)。優(yōu)點(diǎn)是實(shí)施和維護(hù)簡單,成本相對較低。適合于大數(shù)據(jù)量的場景,如數(shù)據(jù)倉庫。
動態(tài)物理備份的容災(zāi)方式,一般是利用數(shù)據(jù)庫日志的同步/異步傳輸機(jī)制將日志信息傳輸?shù)饺轂?zāi)數(shù)據(jù)庫上,再進(jìn)行實(shí)時/延時日志應(yīng)用,從而保證主庫與備庫數(shù)據(jù)的動態(tài)同步。
有關(guān)動態(tài)物理備份容災(zāi),業(yè)界比較成功的有Oracle Data Guard(physical standby), IBM DB2 HADR, IBM Informix HDR, Microsoft SQL Server Mirror等等。
以O(shè)racle Data Guard容災(zāi)為例,Oracle Data Guard中的physical standby在業(yè)內(nèi)廣泛使用。從備份的角度看,它也可以視為數(shù)據(jù)庫的一個動態(tài)備份。該種方式的容災(zāi)是數(shù)據(jù)庫級別的容災(zāi)。Data Guard有三種保護(hù)模式,即最大保護(hù)模式、最大可用模式和最大性能模式。一般選擇最大性能模式進(jìn)行容災(zāi),日志傳輸可采用歸檔進(jìn)程對聯(lián)機(jī)日志進(jìn)行遠(yuǎn)程歸檔。在對主庫與備庫數(shù)據(jù)同步要求比較高的場景中,主庫可以采用LGWR進(jìn)程進(jìn)行同步或者異步重做日志傳輸,拉近RPO,減少RTO。
備庫可以根據(jù)容災(zāi)需求選擇實(shí)時應(yīng)用或者延時應(yīng)用重做日志,延時一段時間,可達(dá)到容災(zāi)、防止誤操作的效果,具體情況視RPO、RTO以及存儲空間而定。
圖2是一個Oracle數(shù)據(jù)庫的Data Guard級聯(lián)容災(zāi)環(huán)境(其他數(shù)據(jù)庫可能不支持多個備庫)。
此類物理方式的備庫有以下三個優(yōu)點(diǎn)。
1)最大的優(yōu)點(diǎn)是創(chuàng)建了一個源數(shù)據(jù)庫的完整、一致的備份。
2)技術(shù)成熟,實(shí)施簡單,后續(xù)維護(hù)方便。
圖2 Oralce數(shù)據(jù)庫的Data Guard級聯(lián)容災(zāi)環(huán)境
3)一般主、備庫分布于不同的服務(wù)器上,除了容災(zāi)外,還具有硬件容錯功能;如果延遲備庫日志的應(yīng)用,該種方式還能從一定程度上避免誤操作。
缺點(diǎn):
1)對于業(yè)務(wù)繁忙的數(shù)據(jù)庫、數(shù)據(jù)倉庫并不適合。Oracle data guard可能會由于force logging的啟用,導(dǎo)致源端產(chǎn)生大量的重做日志,會對源端存儲空間、I/O性能以及網(wǎng)絡(luò)狀況產(chǎn)生很大的影響。同時,歸檔日志傳到目標(biāo)端,也會影響目標(biāo)端的空間和I/O性能,甚至?xí)?dǎo)致standby來不及恢復(fù)、歸檔日志在目標(biāo)端嚴(yán)重堆積的現(xiàn)象。
2)對網(wǎng)絡(luò)要求比較高,要求網(wǎng)絡(luò)帶寬必須大于或等于主庫寫日志的平均速度。Informix HDR主、備機(jī)之間采用半雙工通信協(xié)議,對網(wǎng)絡(luò)延遲敏感,通常要求網(wǎng)絡(luò)要非常穩(wěn)定。
3)備庫一般不打開,只是進(jìn)行日志同步。Oracle 11g中出現(xiàn)的active data guard與snapshot standby database新特性改進(jìn)了這一局限性,active data guard中備庫可以在open狀態(tài)下應(yīng)用日志,但是數(shù)據(jù)庫還是只讀,snapshot standby database允許在任意快照時間點(diǎn)將備庫以讀寫方式打開,使用完畢可再回到正常的physical standby狀態(tài)[2]。IBM DB2 V9.7.1開始也引入了備用數(shù)據(jù)庫可讀的功能。Informix 11.5之前,HDR備機(jī)支持只讀方式,從11.5開始,HDR備機(jī)支持讀寫操作。
4)要求主、備數(shù)據(jù)庫的版本、位數(shù)一致,操作系統(tǒng)環(huán)境一致。
動態(tài)邏輯備份方式的容災(zāi)(或稱數(shù)據(jù)復(fù)制)較動態(tài)物理備份方式復(fù)雜,實(shí)現(xiàn)的方式也更為靈活。總的說來,該種方式的容災(zāi)主要通過對主庫上的數(shù)據(jù)變更先進(jìn)行捕捉,再進(jìn)行SQL整理,最后在備庫上進(jìn)行SQL應(yīng)用,達(dá)到主庫與備庫數(shù)據(jù)同步的目的。
在實(shí)際生產(chǎn)實(shí)施場景中,邏輯動態(tài)容災(zāi)技術(shù)的拓?fù)浣Y(jié)構(gòu)如圖3所示。
圖3 邏輯動態(tài)容災(zāi)技術(shù)的拓?fù)浣Y(jié)構(gòu)
表3 具體的Oracle數(shù)據(jù)庫系統(tǒng)中實(shí)現(xiàn)機(jī)制
在各大數(shù)據(jù)庫系統(tǒng)中,諸于此類的復(fù)制技術(shù)還有很多,此外還有第三方的復(fù)制軟件(如Quest SharePlex)等,不一一列舉。
一般地,此類復(fù)制技術(shù)具有以下六個優(yōu)點(diǎn)。
1)源庫與目標(biāo)庫都開放,可以同時對外提供服務(wù)。
2)目標(biāo)數(shù)據(jù)庫可以跨系統(tǒng)平臺,跨數(shù)據(jù)庫版本,甚至可以進(jìn)行異構(gòu)數(shù)據(jù)庫之間的復(fù)制。
3)復(fù)制靈活,可以將一個數(shù)據(jù)庫分散進(jìn)行容災(zāi),也可以將多個分散的數(shù)據(jù)庫進(jìn)行集中容災(zāi)。
4)應(yīng)用部署靈活,可以充分利用備庫資源,將主庫所支撐的部分業(yè)務(wù)有效地分離出去,進(jìn)而減小主庫壓力。
5)故障切換速度很快,甚至無需切換。
6)主庫與備庫之間的數(shù)據(jù)復(fù)制可以是同步或接近同步,或者異步。
缺點(diǎn):
1)比較復(fù)雜,維護(hù)難度較大。
2)對源表結(jié)構(gòu)設(shè)計(jì)有規(guī)范性要求,對某些特殊的數(shù)據(jù)類型不支持,另外主鍵、外鍵、唯一性約束、索引、觸發(fā)器等對復(fù)制過程也會產(chǎn)生影響。
3)雙向復(fù)制,需要解決數(shù)據(jù)沖突問題。
本文以O(shè)racle數(shù)據(jù)庫的備份分類為基礎(chǔ),從數(shù)據(jù)庫備份的角度出發(fā)詳細(xì)闡述了影響Oracle數(shù)據(jù)庫容災(zāi)技術(shù)的關(guān)鍵因素,并將Oracle數(shù)據(jù)庫級別的容災(zāi)劃分為三種方式,并分別研究了每種容災(zāi)方式的工作機(jī)理、特性與具體場景。實(shí)際上,數(shù)據(jù)庫容災(zāi)并不一定單獨(dú)存在,生產(chǎn)實(shí)踐中總是會結(jié)合服務(wù)器硬件進(jìn)行容災(zāi),構(gòu)建集群,使數(shù)據(jù)庫系統(tǒng)既能實(shí)現(xiàn)高可用、負(fù)載均衡,又滿足容災(zāi)要求,這對其他數(shù)據(jù)庫的容災(zāi)有一定的指導(dǎo)和參考價值。
[1]http://www.fusionio.com/platforms/.
[2]http://docs.oracle.com/cd/E11882_01/server.112/e25608/manage_ps.htm#BACIEJJI.