詳解容災(zāi)架構(gòu)中的數(shù)據(jù)復(fù)制技術(shù)
1. 什么是企業(yè)容災(zāi)的數(shù)據(jù)復(fù)制技術(shù)?
企業(yè)容災(zāi)架構(gòu)中,所謂的數(shù)據(jù)復(fù)制技術(shù)主要是指能夠?qū)⒔Y(jié)構(gòu)化數(shù)據(jù)進(jìn)行復(fù)制,從而保證數(shù)據(jù)具備雙副本或者多副本分散在不同數(shù)據(jù)中心的技術(shù)。這里面需要強(qiáng)調(diào)兩點(diǎn):
① 結(jié)構(gòu)化數(shù)據(jù):以結(jié)構(gòu)化數(shù)據(jù)為主的數(shù)據(jù)復(fù)制技術(shù)。
② 分散在不同數(shù)據(jù)中心:數(shù)據(jù)副本必須分布在不同的數(shù)據(jù)中心。
就具體的實(shí)現(xiàn)技術(shù)而言,就目前業(yè)界發(fā)展來看,可以實(shí)現(xiàn)數(shù)據(jù)復(fù)制的技術(shù)多種多樣,有基于數(shù)據(jù)庫層面的數(shù)據(jù)復(fù)制技術(shù),例如Oracle公司的Active Data Gurad、IBM公司的 Db2 HADR等;有基于系統(tǒng)層面的數(shù)據(jù)復(fù)制技術(shù),例如賽門鐵克的vxvm、傳統(tǒng)的邏輯卷管理(LVM)、Oracle公司的自動(dòng)存儲(chǔ)管理(ASM)冗余技術(shù)、IBM公司的GPFS等;有基于存儲(chǔ)虛擬化實(shí)現(xiàn)的數(shù)據(jù)復(fù)制技術(shù),例如EMC公司Vplex Stretch Cluster、IBM公司SVC Split Cluster、NetAPP公司Metro Cluster等;也有基于存儲(chǔ)底層實(shí)現(xiàn)的數(shù)據(jù)復(fù)制技術(shù),例如IBM公司的DS8000 PPRC技術(shù)、EMC公司的SRDF技術(shù)、HP公司的CA技術(shù)等等。每一種技術(shù)都有其實(shí)現(xiàn)的前提條件,也有各自的技術(shù)特點(diǎn)和實(shí)現(xiàn)的不同效果。
2. 企業(yè)容災(zāi)中的數(shù)據(jù)復(fù)制技術(shù)的分類
2.1 同步復(fù)制和異步復(fù)制
從RPO維度來劃分,大的方面可以分為同步復(fù)制和異步復(fù)制。
① 同步復(fù)制:要求每一個(gè)寫入操作在執(zhí)行下一個(gè)操作處理之前,在源端和目標(biāo)端都能完成。特點(diǎn)是數(shù)據(jù)丟失少,會(huì)影響生產(chǎn)系統(tǒng)性能,除非目標(biāo)系統(tǒng)物理上離生產(chǎn)系統(tǒng)比較近。
② 異步復(fù)制:在處理下一個(gè)操作前, 只需要完成源端數(shù)據(jù)寫入即可, 不等待數(shù)據(jù)復(fù)制到目標(biāo)系統(tǒng)中。特點(diǎn)是復(fù)制的數(shù)據(jù)與源數(shù)據(jù)有時(shí)間差,但這種復(fù)制對(duì)生產(chǎn)系統(tǒng)性能影響較小。
那么這里有一個(gè)問題“如何界定一個(gè)寫入操作完成?”,一般來講,存儲(chǔ)端的寫入以存儲(chǔ)設(shè)備的緩存寫入為標(biāo)準(zhǔn),數(shù)據(jù)庫的寫入以數(shù)據(jù)庫的事務(wù)日志落盤為標(biāo)準(zhǔn)。
如果用圖的方式來區(qū)別同步和異步之前的區(qū)別就在于:同步需要等待黑色和紅色的ACK返回才會(huì)執(zhí)行下一個(gè)IO,而異步只需要等待黑色的ACK返回即可執(zhí)行下一個(gè)IO。從結(jié)果上來看,等待紅色的ACK返回顯然需要花費(fèi)更多時(shí)間,因?yàn)锳和B分別位于不同的數(shù)據(jù)中心;但是等待會(huì)帶來RPO=0的回報(bào)。
2.2 根據(jù)實(shí)現(xiàn)復(fù)制的手段來劃分
根據(jù)上圖,數(shù)據(jù)復(fù)制最終完成的結(jié)果是在兩個(gè)磁盤介質(zhì)上完成同一個(gè)IO數(shù)據(jù),但是將來自客戶端的單個(gè)IO請(qǐng)求鏡像為兩個(gè)IO的源頭可以有三種不同的選擇:操作系統(tǒng)層面、數(shù)據(jù)庫層面以及存儲(chǔ)層面。
1)操作系統(tǒng)層面的復(fù)制技術(shù):以LVM、VXVM等邏輯卷鏡像為基礎(chǔ),IO寫入的時(shí)候可以在組成同一個(gè)邏輯卷的物理鏡像上同時(shí)寫入數(shù)據(jù),底層數(shù)據(jù)寫入是需要通過SAN協(xié)議完成的。
2)數(shù)據(jù)庫層面的復(fù)制技術(shù):一種是類似操作系統(tǒng)邏輯卷的模式,比如ORACLE的ASM,它也是一種邏輯卷管理模式,同樣也可以通過多個(gè)物理鏡像來組成一個(gè)邏輯卷,從而通過鏡像復(fù)制的方式完成數(shù)據(jù)副本的同時(shí)寫入。本質(zhì)上它與操作系統(tǒng)層面的邏輯卷鏡像技術(shù)沒有區(qū)別,只是它離數(shù)據(jù)庫更近,數(shù)據(jù)庫更懂它。另外一種是通過數(shù)據(jù)庫事務(wù)日志復(fù)制的方式將數(shù)據(jù)修改行為在另外一個(gè)備庫上重新演繹一遍,最終可以達(dá)到使數(shù)據(jù)結(jié)果一致的目的。
3)存儲(chǔ)層面的復(fù)制技術(shù):一種是通過存儲(chǔ)網(wǎng)關(guān)將兩個(gè)物理存儲(chǔ)卷組成一個(gè)邏輯存儲(chǔ)卷,通過鏡像復(fù)制的方式完成數(shù)據(jù)在存儲(chǔ)落盤時(shí)的雙寫。本質(zhì)上它與操作系統(tǒng)層面的邏輯卷鏡像技術(shù)也沒有區(qū)別,只是它選擇在存儲(chǔ)層面實(shí)現(xiàn)。另外一種是通過存儲(chǔ)介質(zhì)之間以塊拷貝的方式來實(shí)現(xiàn)數(shù)據(jù)副本的冗余。
究其原理,其實(shí)無論從哪個(gè)層面來實(shí)現(xiàn),這些技術(shù)從原理上可以劃分為三種類型:
- IO雙寫(操作系統(tǒng)邏輯卷鏡像、ASM、存儲(chǔ)網(wǎng)關(guān)鏡像.etc)
- 事務(wù)回放(以O(shè)racle ADG為代表.etc)
- 數(shù)據(jù)單元拷貝(以存儲(chǔ)CA、DP技術(shù)為代表的存儲(chǔ)復(fù)制技術(shù))
3. 系統(tǒng)層如何實(shí)現(xiàn)數(shù)據(jù)復(fù)制?
3.1 通過操作系統(tǒng)邏輯卷鏡像實(shí)現(xiàn)數(shù)據(jù)復(fù)制
對(duì)于操作系統(tǒng)層面的邏輯卷管理器LVM模式來講,是將底層來自不同數(shù)據(jù)中心的的兩個(gè)物理存儲(chǔ)卷作為物理鏡像( PV) 組合成一個(gè)可用的邏輯存儲(chǔ)卷( LV) 提供給上層應(yīng)用來存放數(shù)據(jù),本地物理卷和遠(yuǎn)程物理卷分別是由存儲(chǔ)經(jīng)過本地SAN環(huán)境以及跨數(shù)據(jù)中心SAN環(huán)境提供給服務(wù)器操作系統(tǒng)層。
建立邏輯卷的時(shí)候就已經(jīng)定義好LV和PV的映射關(guān)系,并且邏輯頁(LP ) 和物理頁(PP ) 的映射關(guān)系也已經(jīng)完全定義好了。這種復(fù)制只能采用同步復(fù)制機(jī)制,復(fù)制對(duì)象為邏輯卷層的變化Block,其過程為:捕獲邏輯頁( LP) 當(dāng)中的變化塊,同步寫兩個(gè)物理頁( PP) ,等于在一個(gè)主機(jī)上將同一數(shù)據(jù)寫入兩個(gè)不同的磁盤,本地寫完得到ACK確認(rèn),并且遠(yuǎn)端寫完也得到ACK確認(rèn),才能算是一個(gè)完整的寫入。假設(shè)遠(yuǎn)端存儲(chǔ)卷寫入超時(shí)就會(huì)被標(biāo)為故障或者是離線狀態(tài),當(dāng)遠(yuǎn)端存儲(chǔ)寫入恢復(fù)之后,對(duì)于LVM來講需要重新進(jìn)行手動(dòng)同步實(shí)現(xiàn)鏡像副本完全一致。
3.2 通過數(shù)據(jù)庫邏輯卷鏡像實(shí)現(xiàn)的數(shù)據(jù)復(fù)制
對(duì)于ASM模式來講,其實(shí)原理與LVM基本相同,創(chuàng)建DiskGroup的時(shí)候,將冗余策略選擇為Normal,也就是所有業(yè)務(wù)數(shù)據(jù)保證兩份鏡像。這樣的話,我們可以將相等數(shù)量的磁盤分別歸入不同的故障組( Failure Group) 。ASM對(duì)Oracle數(shù)據(jù)文件( Data File) 進(jìn)行修改的時(shí)候,以AU為單元進(jìn)行實(shí)時(shí)雙向?qū)懭?,本地寫完得到ACK確認(rèn),并且遠(yuǎn)端寫完也得到ACK確認(rèn),才能算是一個(gè)完整的寫入。
相比LVM的優(yōu)勢(shì)在于兩點(diǎn):ASM會(huì)有一個(gè)短時(shí)間內(nèi)的寫事務(wù)日志記錄,它會(huì)幫助恢復(fù)離線鏡像恢復(fù)數(shù)據(jù),但是如果超過這個(gè)時(shí)間,同樣需要一個(gè)全新的同步來保證數(shù)據(jù)的一致性。另外一點(diǎn),AU并非建立數(shù)據(jù)文件的時(shí)候就已經(jīng)映射好了,ASM是在數(shù)據(jù)寫入時(shí)才會(huì)分配具體的AU,完全可以做到通過指針轉(zhuǎn)移的方式避免壞塊兒導(dǎo)致的數(shù)據(jù)寫入失敗問題。
3.3 通過分布式文件系統(tǒng)文件鏡像實(shí)現(xiàn)的數(shù)據(jù)復(fù)制
對(duì)于GPFS模式來講,它是通過將底層來自不同站點(diǎn)的兩個(gè)物理存儲(chǔ)卷歸屬到不同的Failure Group當(dāng)中,然后由這些物理存儲(chǔ)卷經(jīng)過文件系統(tǒng)格式化形成分布式文件系統(tǒng),提供給上層應(yīng)用以文件的形式寫入數(shù)據(jù)。文件本身會(huì)被GPFS文件系統(tǒng)打散形成若干文件碎片,這些碎片在落盤時(shí)分別落入不同F(xiàn)ailure Group當(dāng)中的物理磁盤,從而保證底層數(shù)據(jù)的雙副本。這種模式與前兩種模式的最大區(qū)別在于它的數(shù)據(jù)落盤是根據(jù)NSD磁盤定義的服務(wù)實(shí)例順序來決定的,正常情況下我們需要定義本站點(diǎn)的服務(wù)節(jié)點(diǎn)為磁盤的主服務(wù)節(jié)點(diǎn),這樣的話兩個(gè)鏡像寫入的時(shí)候是靠GPFS位于不同中心的兩個(gè)服務(wù)實(shí)例節(jié)點(diǎn)分別寫入,兩個(gè)服務(wù)實(shí)例之間也需要私有協(xié)議的交互,相當(dāng)于數(shù)據(jù)的雙寫多了一個(gè)環(huán)節(jié)。
4. 數(shù)據(jù)庫層如何實(shí)現(xiàn)數(shù)據(jù)復(fù)制?
4.1 通過數(shù)據(jù)庫日志回放模式實(shí)現(xiàn)數(shù)據(jù)復(fù)制
對(duì)于事務(wù)日志的復(fù)制技術(shù),可以分為絕對(duì)同步模式、近似同步模式和異步模式三種。
對(duì)于Oracle DB來講,客戶端的數(shù)據(jù)更新請(qǐng)求首先要由日志寫入進(jìn)程( LGWR) 從重做緩存刷到重做日志文件當(dāng)中,然后由數(shù)據(jù)寫進(jìn)程再周期性地寫入數(shù)據(jù)文件當(dāng)中。重做日志當(dāng)中以SCN為數(shù)據(jù)庫獨(dú)有的時(shí)間戳序列來記錄所有數(shù)據(jù)庫更新的先后順序,從而保障數(shù)據(jù)庫恢復(fù)能夠按照正確的順序執(zhí)行保障數(shù)據(jù)一致性和完整性。也就是說在數(shù)據(jù)庫的認(rèn)知當(dāng)中,只要事務(wù)日志寫入重做日志文件,這個(gè)IO就算完成。
如圖,對(duì)于配置了Data Guard絕對(duì)同步模式的數(shù)據(jù)庫,在以上所述過程中,寫入進(jìn)程( LGWR) 在本地日志文件并不能結(jié)束,日志傳輸進(jìn)程( LNS) 會(huì)將緩存里面的重做日志通過TCP /IP 網(wǎng)絡(luò)傳輸給災(zāi)備站點(diǎn)的備庫實(shí)例的日志接受進(jìn)程(RFS ) ,備庫實(shí)例的日志接收進(jìn)程( RFS) 根據(jù)接受到的重做日志在備庫上重新執(zhí)行數(shù)據(jù)庫的更新操作,然后將ACK回傳給日志傳輸進(jìn)程( LNS) ,日志傳輸進(jìn)程( LNS) 再通知寫入進(jìn)程( LGWR) ,才算是一個(gè)完整的IO完成。這樣做可以保證主庫和備庫的事務(wù)性更新行為實(shí)時(shí)一致,最終保證數(shù)據(jù)的一致。當(dāng)然也有一個(gè)前提條件,那就是在Data Guard開始同步復(fù)制之前,必須保證備庫的數(shù)據(jù)保持與主庫的某一固定時(shí)間點(diǎn)的完整副本,這需要靠傳統(tǒng)數(shù)據(jù)備份技術(shù)來實(shí)現(xiàn)備庫的初始數(shù)據(jù)復(fù)制。因?yàn)槭聞?wù)復(fù)制的本質(zhì)是行為復(fù)制,那么行為作用的初始數(shù)據(jù)副本必須保持一致,才能保證最終兩副本的一致性。
如圖,對(duì)于配置了Data Guard異步模式的數(shù)據(jù)庫,日志傳輸進(jìn)程( LNS) 會(huì)將緩存里面的重做日志以及被LGWR歸檔的重做日志文件通過TCP /IP 網(wǎng)絡(luò)異步傳輸給災(zāi)備站點(diǎn)的備庫實(shí)例的日志接受進(jìn)程(RFS ) ,備庫實(shí)例的日志接收進(jìn)程( RFS) 根據(jù)接受到的重做日志在備庫上重新執(zhí)行數(shù)據(jù)庫的更新操作,但是并不會(huì)實(shí)時(shí)給日志傳輸進(jìn)程( LNS) 進(jìn)行ACK反饋,PrimaryDB只要完成本庫的事務(wù)更新就認(rèn)為IO結(jié)束。但是備庫日志接受進(jìn)程(RFS ) 會(huì)定期將進(jìn)度信息反饋給主庫進(jìn)程。
當(dāng)主備庫傳輸管理剝離之后,主庫會(huì)主動(dòng)通過以下兩種方式探測(cè)并嘗試重新和備庫建立聯(lián)系,第一是歸檔日志進(jìn)程會(huì)周期性ping備庫,成功情況下,它會(huì)根據(jù)獲得的備庫控制文件的記錄的最后歸檔點(diǎn)和自己的歸檔日志決定向備庫推送哪些歸檔日志。第二是日志發(fā)送進(jìn)程會(huì)在重做日志準(zhǔn)備發(fā)生歸檔的時(shí)刻點(diǎn)主動(dòng)去ping備庫日志接受進(jìn)程并把剩余的重做條目發(fā)送給備庫接受進(jìn)程。
近似同步模式是指在傳輸正常情況下保持與絕對(duì)同步模式一樣的模式,在網(wǎng)絡(luò)傳輸超時(shí)的情況下,就會(huì)剝離備庫重做日志的過程,只要保證主庫重做日志落盤就可以了。
5. 存儲(chǔ)層如何實(shí)現(xiàn)數(shù)據(jù)復(fù)制?
5.1 通過存儲(chǔ)網(wǎng)關(guān)邏輯卷鏡像實(shí)現(xiàn)數(shù)據(jù)復(fù)制
所謂存儲(chǔ)網(wǎng)關(guān)雙寫復(fù)制技術(shù),就是在物理存儲(chǔ)層之上增加一層網(wǎng)關(guān)技術(shù),用以形成存儲(chǔ)資源透明抽象層,即存儲(chǔ)虛擬化是服務(wù)器與存儲(chǔ)間的一個(gè)抽象層用以實(shí)現(xiàn)存儲(chǔ)底層的虛擬化以及高可用鏡像,它是物理存儲(chǔ)的邏輯表示方法。其主要目的就是要把物理存儲(chǔ)介質(zhì)抽象為邏輯存儲(chǔ)空間,將分散的物理存儲(chǔ)管理整合為集中存儲(chǔ)管理并且由存儲(chǔ)網(wǎng)關(guān)來控制鏡像寫入的策略和模式。IBM、EMC、NETAPP 、 HUAWEI、英方等公司都有相應(yīng)容災(zāi)技術(shù)方案及相應(yīng)產(chǎn)品 ?;趯懭朐砑安呗缘牟煌?各自方案又各有一些區(qū)別。但是拋開細(xì)節(jié)究原理,歸類總結(jié)之后有兩種模式 。
模式 1,如 圖中所示,是以 EMC Vplex為代表的分布式存儲(chǔ)卷技術(shù)。在存儲(chǔ)網(wǎng)關(guān)VPLEX上重新定義虛擬存儲(chǔ)卷,該虛擬卷由分布在兩個(gè)數(shù)據(jù)中心的物理存儲(chǔ)卷以1:1方式映射組成,并且以共享模式提供給VPLEX的兩個(gè)引擎,引擎之間類似Oracle RAC的原理來共享全局緩存、心跳信息以及分布式鎖的信息。兩個(gè)引擎同時(shí)可以寫IO,對(duì)于Block級(jí)別的并發(fā)寫操作,是通過分布式鎖及全局緩存機(jī)制來完成。所以這種雙寫是可以做到IO級(jí)別。
模式 2,如圖中所示,是以 IBM SVC為代表的虛擬存儲(chǔ)卷技術(shù)。在存儲(chǔ)網(wǎng)關(guān)SVC上重新定義虛擬存儲(chǔ)卷,該虛擬卷由分布在兩個(gè)數(shù)據(jù)中心的物理存儲(chǔ)卷以1:1方式映射組成,并且歸屬同一個(gè)IO Group,并且以共享模式提供給SVC的兩個(gè)節(jié)點(diǎn),雖然兩個(gè)節(jié)點(diǎn)都可以寫操作,但是對(duì)于某一個(gè)IO Group來講,只能通過一側(cè)節(jié)點(diǎn)進(jìn)行物理層面的雙寫操作,這樣就避免了兩個(gè)節(jié)點(diǎn)的在Block級(jí)別的并發(fā)控制。所以這種雙寫只能做到應(yīng)用級(jí)別,做不到IO級(jí)別。
當(dāng)然還有一些類似的架構(gòu),在某些細(xì)節(jié)上更先進(jìn),比如NetApp的容災(zāi)方案MCC架構(gòu),它在此基礎(chǔ)之上可以將負(fù)責(zé)存儲(chǔ)寫操作的實(shí)例節(jié)點(diǎn)做到VM級(jí)別,VM負(fù)責(zé)以卷為粒度的雙寫,同時(shí)VM可以在存儲(chǔ)網(wǎng)關(guān)的物理引擎或節(jié)點(diǎn)之間進(jìn)行漂移和重組,這樣的話以應(yīng)用為粒度的寫操作的容災(zāi)切換更加平滑。
5.2 通過存儲(chǔ)介質(zhì)塊復(fù)制實(shí)現(xiàn)數(shù)據(jù)復(fù)制
對(duì)于存儲(chǔ)存儲(chǔ)底層的塊兒復(fù)制技術(shù)來講, 它的數(shù)據(jù)復(fù)制是完全脫離了上層的應(yīng)用層、系統(tǒng)層、數(shù)據(jù)庫層。主要是依靠存儲(chǔ)層兩個(gè)物理存儲(chǔ)設(shè)備 來完成源到目標(biāo) 設(shè)備 的 Block 復(fù)制。
如圖所示,從組成上來看,只有兩個(gè)同型物理存儲(chǔ)設(shè)備,數(shù)據(jù)復(fù)制跟上層沒有任何關(guān)系,只需要存儲(chǔ)層從一邊的物理卷捕獲 Block變化,復(fù)制到另外一邊的物理存儲(chǔ)卷,整個(gè)復(fù)制行為通過源端的日志文件來記錄進(jìn)度以及保障故障恢復(fù)。根據(jù)整個(gè)復(fù)制過程是否需要等待復(fù)制完成的ACK返回可以分為同步復(fù)制和異步復(fù)制。復(fù)制過程依賴的傳輸環(huán)境可以是遠(yuǎn)距離的以太網(wǎng)也可以是近距離的SAN網(wǎng)絡(luò)。
但是這種數(shù)據(jù)復(fù)制技術(shù)和上層的聯(lián)系幾乎是割裂的,基本很難與上層的容災(zāi)切換配合。?