從前面的分析來看,同步數(shù)據(jù)容災(zāi)一般只能在較短距離內(nèi)部署(10KM-100KM),大于這個距離,就沒有實際應(yīng)用價值了。因為即使在1000KM 距離上,4.5MB 的速率即使將數(shù)據(jù)復(fù)制到異地,每個I/O 的響應(yīng)時間也會超過10ms,這種響應(yīng)速度太慢。
異步數(shù)據(jù)容災(zāi)是在“線路帶寬和距離能保證完成數(shù)據(jù)復(fù)制過程,同時,異地數(shù)據(jù)復(fù)制不影響生產(chǎn)系統(tǒng)的性能”這樣的要求下提出來的??紤]異步數(shù)據(jù)容災(zāi),應(yīng)該注意到以下幾個技術(shù)條件和事實。
與同步傳輸方式相比,異步傳輸方式對帶寬和距離的要求低很多,它只要求在某個時間段內(nèi)能將數(shù)據(jù)全部復(fù)制到異地即可,同時異步傳輸方式也不會明顯影響應(yīng)用系統(tǒng)的性能。其缺點是在本地生產(chǎn)數(shù)據(jù)發(fā)生災(zāi)難時,異地系統(tǒng)上的數(shù)據(jù)可能會短暫損失(如果廣域網(wǎng)速率較低,交易未完整發(fā)送的話),但不影響一致性(類似本地數(shù)據(jù)庫主機的異常關(guān)機)。
通過異步傳輸模式進行異地數(shù)據(jù)復(fù)制的技術(shù),包括:
基于主機邏輯卷(Volume)的數(shù)據(jù)復(fù)制方式
首先申明:針對這種方式,這以VERITAS VVR 為例,但并不表示所有基于主機進行復(fù)制的其它軟件采用同樣方式,也不保證其它軟件是有應(yīng)用價值的。
VERITAS VVR (Volume Replicator)通過基于Volume 和Log 的復(fù)制技術(shù),保證在任何時刻本地系統(tǒng)發(fā)生自然災(zāi)難時,在異地的數(shù)據(jù)仍是可用的。
VERITAS VVR 在異步模式下采用了Log 技術(shù)來跟蹤未及時復(fù)制的數(shù)據(jù)塊,這個Log 是一個先到先服務(wù)的堆棧,每一筆I/O 處理都會首先被放進這個Log,并按到達先后順序被復(fù)制到異地服務(wù)器系統(tǒng)。
下圖是其工作的結(jié)構(gòu)原理。
圖7-4 基于邏輯卷的異步數(shù)據(jù)復(fù)制
從上圖,存儲工程師可以看到整個I/O 和復(fù)制的過程如下:
服務(wù)器的另一個進程:VVR 的進程,負責(zé)將Log 隊列中的I/O 復(fù)制到異地服務(wù)器。這個過程和上面的I/O 過程在時間上無關(guān)。如上圖中的標記:“I”和“II”。
I: 本地VVR 進程從Log 隊列中取出最先到達的I/O,復(fù)制到異地服務(wù)器
II: 異地服務(wù)器接收到本地服務(wù)器VVR 發(fā)出的I/O 請求,將相應(yīng)數(shù)據(jù)寫到異地磁盤系統(tǒng),然后,通知本地系統(tǒng)VVR 進程,要求下一個I/O。
這里,跟蹤未及時復(fù)制的數(shù)據(jù)塊的Log 技術(shù)是保證異地數(shù)據(jù)可用的必要條件。一個數(shù)據(jù)庫的I/O 是有嚴格順序的,這個順序是保證數(shù)據(jù)庫完整性的必要條件,一個完整性被破壞的數(shù)據(jù)庫一般是不可用的,比如根本無法啟動、打開該數(shù)據(jù)庫,且是無法修復(fù)的。本地數(shù)據(jù)庫的完整性是由數(shù)據(jù)庫本身來維護的。當一個數(shù)據(jù)庫被實時復(fù)制到異地時,要保證異地數(shù)據(jù)庫的完整性,必然保證在異地磁盤I/O 上的I/O 順序和本地I/O 順序完全相同,否則,異地數(shù)據(jù)庫的完整性就無法保證。
VERITAS VVR 采用的I/O 控制機制是支持先到先服務(wù)的Log 技術(shù),因此,不管異地數(shù)據(jù)比本地數(shù)據(jù)落后多少時間,都能保證異地數(shù)據(jù)庫數(shù)據(jù)的一致性。比如:本地系統(tǒng)在12:00 時發(fā)生自然災(zāi)難,由于部分數(shù)據(jù)未被及時復(fù)制到異地,如有10 分鐘的數(shù)據(jù)未完成復(fù)制,那么在異地系統(tǒng)上存在11:50 分鐘以前的所有數(shù)據(jù),且這個數(shù)據(jù)庫是可用的。
目前的基于磁盤系統(tǒng)的異地數(shù)據(jù)復(fù)制技術(shù)采用Bitmap 技術(shù)和Timestamp 技術(shù),這兩種技術(shù)都不能保證本地向異地復(fù)制數(shù)據(jù)的順序嚴格和本地I/O 的順序相同,所以,這兩種方式都不能保證異地數(shù)據(jù)庫的完整性。
Bitmap(位圖)技術(shù)記錄未被及時復(fù)制的數(shù)據(jù)塊的方法是:對于每個數(shù)據(jù)塊(如32KB)用一個Bit 來對應(yīng),某一個Bit 被置為“1”時,表示其對應(yīng)的數(shù)據(jù)塊已被修改過,正在等待處理(這里是等待被復(fù)制)。由此可以看出,當有一塊以上的數(shù)據(jù)塊未被及時復(fù)制時,系統(tǒng)并無法確認哪一塊數(shù)據(jù)塊應(yīng)該先復(fù)制到異地,所以,系統(tǒng)將任選一塊,即不按到達的時間先后進行復(fù)制。
可以看出,這種方式不能根本保證異地數(shù)據(jù)庫數(shù)據(jù)的完整性、一致性。
Timestamp 方式是對每個未及時傳送的數(shù)據(jù)塊蓋上一個時間戳。從表面上看,由于時間戳的關(guān)系,好像能確定一個數(shù)據(jù)塊被修改的時間順序了。其實不然:當一個未被及時復(fù)制的數(shù)據(jù)塊被第2 次修改,并蓋上新的時間戳?xí)r,數(shù)據(jù)復(fù)制的順序就被破壞了。例如:
現(xiàn)在有10 塊數(shù)據(jù)塊未被復(fù)制,編號“1、2、3、4、5、6、7、8、9、10”;這時,第3 塊數(shù)據(jù)被再次修改,并被蓋上一個新的時間戳“11”;這時,系統(tǒng)會按這樣的次序進行復(fù)制:“1、2、(沒有3)、4、5、6、7、8、9、10、11”。存儲工程師可以看到,在復(fù)制進行到“4~10”之間時,異地數(shù)據(jù)的完整性被破壞。
事實上,在一個運行繁忙的系統(tǒng)中,出現(xiàn)這種情況機率極高,甚至每時每刻都處在這種狀態(tài)之下。所以,本著嚴格的,對系統(tǒng)可用性負責(zé)任的態(tài)度,可以認為“Timestamp”的技術(shù)雖然比Bitmap 技術(shù)有一定優(yōu)勢,但實際上也無法保證異地數(shù)據(jù)的完整性和可用性。
Bitmap 和Timestamp 方式的技術(shù)弱點:沒有l(wèi)og;
作為磁盤系統(tǒng)內(nèi)置的數(shù)據(jù)復(fù)制功能,傳統(tǒng)的磁盤管理模式?jīng)]有考慮在磁盤系統(tǒng)內(nèi)部開辟出一個磁盤塊給磁盤系統(tǒng)控制器本身使用,所以,磁盤系統(tǒng)無法采用log 模式進行異步數(shù)據(jù)復(fù)制。
磁盤系統(tǒng)保留異步傳輸模式的目的:復(fù)制,但不是容災(zāi)復(fù)制;
數(shù)據(jù)復(fù)制的目的不僅僅是容災(zāi)。數(shù)據(jù)容災(zāi)要求兩地時時保持連接,數(shù)據(jù)復(fù)制過程在任一時間都在進行(除非有線路或設(shè)備故障)。而非容災(zāi)性復(fù)制只要求在某一個時間段里將數(shù)據(jù)復(fù)制到異地,復(fù)制告一段落后(在某一時刻完全同步),復(fù)制工作會暫停。這種復(fù)制可能是為一個特殊目的只做一次,如在線業(yè)務(wù)遷移;也可能每天或每月追加一次。這樣,在異地就會存在一份最大損失數(shù)據(jù)量為1 天或1 個月的生產(chǎn)數(shù)據(jù)復(fù)制品,其對數(shù)據(jù)的保障能力,如同磁盤備份。這種方式復(fù)制數(shù)據(jù)的目的包括:1)在異地保存一份備份數(shù)據(jù)(如同磁帶備份異地保存)。2)在線業(yè)務(wù)遷移,當信息中心或其中的一個服務(wù)要遷移到另一個地方,又希望少停機(實際上也可用磁帶備份和恢復(fù)來實現(xiàn))。3)利用與磁盤快照技術(shù)結(jié)合,為異地開發(fā)中心提供一個與生產(chǎn)數(shù)據(jù)盡量相同的測試數(shù)據(jù)源。當然,也可用于其它可能的目的。
綜上所述,可以看出,雖然基于磁盤系統(tǒng)的異地數(shù)據(jù)復(fù)制功能有異步傳輸模式,但實際上并不支持異步數(shù)據(jù)容災(zāi),只有像VERITAS Volume Replicator 這樣基于先進先出的Log 技術(shù)的解決方案才真正支持異步數(shù)據(jù)容災(zāi)