數據不一致,VSS是如何解決的?
VSS(VolumeShadow Service)是微軟提供的對應用進行備份恢復的一套框架,主要實現備份、恢復和數據一致性保護,在整體流程中,可分為備份和恢復兩個主要流程。
VSS介紹和場景
VSS能夠讓存儲基設備(比如磁碟、陣列)創建高保真的時間點映像副本,就是映射拷貝(Shadow Copy)。它可以在多卷、或者單個卷上創建映射拷貝,同時不會影響到系統性能。VSS通過協調業務應用軟體、備份程序,以及存儲硬體,從而達到創建高保真映射拷貝的能力。VSS可以應用到以下領域:
A、 快速數據備份和恢復;
B、 針對制定文件的恢復;
C、 磁帶備份、測試和數據挖掘方面;
由於Microsoft在OS中集成了VSS技術,它將各個處理功能模塊化,並針對存儲軟硬體廠商提供相應的開發介面;開發商只需要關注自己的模塊,根據需求設計相關的應用,從而減少了整體設計的難度。
VSS組件描述
VSS整體框架包含了VSS核心模塊、請求者(Requestor)、寫入者(Writer),以及提供者(Provider)。各個模塊之間的關係如下圖所示:
請求者(Requestor)
其主要任務是初始化映射拷貝的創建。由於需求不同,請求者解決的問題各不相同不同,在實際應用中,可能設計不同請求者應用。例如,備份應用處理VSS的備份功能,管理應用處理映射拷貝的創建和使用(像WS2003和Vista本身提供的VSS管理軟體就是此類),同時,也可以設計其他功能應用,來處理專門的業務。如Windows NT備份模塊、備份軟體提供商設計的備份應用,存儲軟硬體提供商設計的管理應用等。
寫入者(Writers)
其主要任務是保證數據的一致性。因為,如果在創建映射拷貝的過程中,應用軟體繼續往磁碟寫入數據,那麼將會出現數據非一致性問題,從而影響該時間點映像的完整性。通過在應用寫入者模塊進行控制處理,來保證數據的一致性,同時也可以達到創建映射拷貝的高效性。
通常,寫入者可能是Windows OS裡面的各種服務模塊,像COM+、DHCP服務、Active Directory服務等,除此之外,資料庫也是常見的寫入者應用。
提供者(Provider)
其主要任務是創建映射拷貝。提供者是創建時間點影響的介面,它可以是基於存儲陣列(硬體模式),或者操作系統(軟體模式)。VSS有不同的提供者,最底層是硬體提供者,中間是軟體提供者,最上面是系統軟體提供者。其中,前面兩個提供者是由第三方硬體或者軟體廠商提供的。
VSS伺服器(VSS Server)
主要任務是協調各個模塊的協作運行,並提供創建卷映射拷貝的方法。VSS提供了兩種創建映射拷貝的方法:
一種是完全拷貝(Clone/Full Copy/Split Mirror),它會創建當前原始數據(Original Data)的全部拷貝;
另外一種是寫時拷貝/差量拷貝(Copy on Write/Differential Copy),它只創建將要被更新的原始數據的拷貝。
因此寫拷貝創建映射拷貝速度快,但是恢複數據時需要使用原始數據。
數據卷(Volumes)
數據卷是指需要備份的數據卷,以及為Writer提供Copy-on-Write文件的數據卷。
VSS創建流程
首先由請求者讓VSS枚舉所在卷上的寫入者應用,並收集元數據(Metadata)。
寫入者可能通過XML文件來描述其組件,並定義其恢復方法。其中,考慮到數據一致性,寫入者需要一些相關處理,比如對於資料庫應用來說,關閉所有打開的事務、回滾事務日誌、以及將緩衝區中的數據寫入下盤等操作,直到所有數據準備好之後,通知VSS可以創建映射拷貝了。
VSS對於請求的卷,查詢是否支持映射拷貝,並由那個提供者提供(硬體還是軟體);因為在請求者管理應用中,會設置卷的映射拷貝屬性以及策略等,所以需要進行查詢和判斷。
請求者通知VSS,要求在該卷上創建映射拷貝。
VSS鎖住寫入者應用,暫時不讓寫入新數據(在某些應用情況下,讀操作請求是可以允許的)。
VSS讓提供者在磁碟上創建當前狀態的映射拷貝(創建映射拷貝的速度,和創建的方法以及提供者的實現相關)。
創建映射拷貝完畢,VSS解鎖寫入者應用。然後寫入者就可以處理隊列中的寫請求,接著VSS會查詢是否這些寫請求在創建映射拷貝期間被保證在隊列中,如果是,則說明數據是一致的,否則說明可能數據一致性有問題,並做相應處理。
備份Agent需要和Provider的CommitSnapshots方法進行配合保證快照數據是應用一致性的,並等待VSSServer調用陣列操作(遠程複製、快照等)實現數據備份。因為應用刷緩存、凍結IO都是由其對應的Writer進行的,所以在整個執行過程中還必須有對應應用的Writer參與刷緩存、凍結IO。
備份Agent對VSSServer提供Freeze和Thaw介面,VSS框架本身是沒有Freeze和Thaw對應介面的。備份Agent封裝的兩個方法主要功能如下:
Freeze: 觸發VSS備份流程,然後在Provider的CommitSnapshots方法中掛起(等待刷緩存、凍結IO等操作)。
Thaw: 解除Provider的CommitSnapshots方法的掛起,讓備份流程執行完畢。
當VSSServer執行保護組時,VSSServer先調用備份Agent的Freeze介面保證快照數據是應用一致性,然後Agent的Thaw介面執行陣列操作(遠程複製、快照等),通知備份完成。
溫馨提示:
求知若渴, 虛心若愚
TAG:架構師技術聯盟 |