儲存快照實現原理

2021-09-10 06:07:43 字數 2657 閱讀 1778

儲存快照有兩種實現方式:cow(寫時複製copy-on-write)、row(寫重定向redirect-on-write),兩種實現方法有區別,造成讀寫效能、應用場景有比較大的區別。

cow:

原理見下圖(從網上找的,沒自己畫)。

1)原卷資料是a~g。此卷metedata像指標一樣指向這些資料。

2)當做快照時,重新複製乙份metedata,並且也指向這些a~g資料。

3)當有資料要寫入到源卷時(下圖寫入d'),寫入到d的原位置之前,需要把d拷貝出放到乙個新位置。然後修改快照的metedata的其中乙個指標指向拷貝出的位置[d](圖中是snapshot data的儲存位置)。同時,把d』寫入到d原來的位置。

此方式可以看出,源卷的metedata的是沒有變化的。對原卷是連續的資料,多次快照,多次寫之後還是連續的資料,因此讀效能或者對單個位置的多次寫效能都不會有很大的影響。

但是,快照的資料是非連續的,如資料abcefg還是在源卷的位置,是連續資料。而資料d在儲存的其他位置,非連續。如果多次快照,不同位置的多次讀寫後,快照的資料可能就比較混亂。造成對快照的讀寫延時較大。

應用場景:

這種實現方式在第一次寫入某個儲存位置時需要完成乙個讀操作(讀原位置的資料),兩個寫操作(寫原位置與寫快照空間),如果寫入頻繁,那麼這種方式將非常消耗io時間。因此可推斷,如果預計某個卷上的i/o多數以讀操作為主,寫操作較少的場景,這種方式的快照實現技術是乙個較理想的選擇,因為快照的完成需要較少的時間。除此之外,如果乙個應用易出現寫入熱點,即只針對某個有限範圍內的資料進行寫操作,那麼cow的快照實現方式也是較較理想的選擇。因為其資料更改都侷限在乙個範圍內,對同乙份資料的多次寫操作只會出現一次寫時複製操作。

但是這種方式的缺點也是非常明顯的。如果寫操作過於分散且頻繁,那麼 cow造成的開銷則是不可忽略的,有時甚至是無法接受的。因此在應用時,則需要綜合評估應用系統的使用場景,以判斷這種方式的快照是否適用。

row:

原理見下圖:

vd是源卷的metedata,分別指向4塊資料。做快照時,snap的metadata也指向此4塊資料。當有資料寫入時,把資料寫入另外乙個位置,然後修改vd的其中乙個metedata到新位置。snap的metedata資料不變化。

此方式源卷經過長時間寫後,所有資料塊的位置可能都會重定向到其他位置,導致源卷的資料不連續。在集中式儲存情況下,會導致對源卷的讀寫效能降低。

兩種方式的優缺點,及應用場景:

cow最大的問題是對寫效能有影響。第一次修改原卷,需要複製資料,因此需要多一次讀寫的資料塊遷移過程。這個就比較要命,應用需要等待時間比較長。但原卷資料的布局沒有任何改變,因此對讀效能沒有任何影響。

row在傳統儲存情況下最大的問題是對讀效能影響比較大。row寫的時候效能基本沒有損耗,只是修改指標,實現效率很高。但多次讀寫後,原卷的資料就分散到各個地方,對於連續讀寫的效能不如cow。這種方式比較適合write-intensive(寫密集)型別的儲存系統

但是,在分布式儲存的情況下,row的連續讀寫的效能會比cow差嗎?就不一定了。正常情況下,讀寫效能的瓶頸一般是在磁碟上。分布式儲存情況下,業務層看到連續儲存,實際上是分布在不同的伺服器的不同硬碟中,資料越是分散,系統效能越高。而row把原資料打散之後,對效能反而有好處。

因此,整體情況下row基本上是對讀寫效能影響較小,因此是業界發展方向。

下圖是幾個廠家的快照實現方式:

目前分布式儲存比較流行,華為有個fusionstorage資料,說是無限次快照,而且0效能下降,vsan快照10%~30%的效能下降。從上面的分析來看,就知道兩個場景的實現方法了。 

快照另外乙個非常重要的特性是快照一致性組(consistency group),這個功能就是支援多個lun或者叫卷volume同時做快照,保證資料的一致性。

如果採用陣列的快照來做資料庫的備份,必須所有的lun都是乙個時間點的才行,這樣資料庫恢復的時候才能起來,否則資料庫必須回滾到某乙個一致的時間點,意味資料的丟失。比較完美的做法就是在主機安裝乙個快照的agent,最好是多路徑軟體具備這個功能,在高階儲存要做快照的時候,對主機的快照agent說,別動,要照相了。主機agent接受到攝影師的命令後,把oracel主機快取的內容flush一下到陳列來,然後hold住,陣列也盡快把cache的內容 flush到硬碟裡,oracle用到的所有硬碟一塊喊」茄子「,攝像師一按快門,一幅完美的快照就產生了。

一致性組除了保證照相的時候一致性外,還有恢復的時候要一致性恢復。這塊的實現的重要性就不如照相的時候重要,可以人工選擇同一時間的lun快照恢復就可以了。最重要的是照相的時候必須要一致,而且這個人工幹不了。

百度快照實現原理

2018年01月08日 11 21 36 儲存快照有兩種實現方式 cow 寫時複製 copy on write row 寫重定向 redirect on write 兩種實現方法有區別,造成讀寫效能 應用場景有比較大的區別。cow 原理見下圖 從網上找的,沒自己畫 1 原卷資料是a g。此卷mete...

快照實現原理詳解(運維)

click here 五 快照與映象 複製的區別 映象 快照和複製是三種不同的功能 映象是通過從乙個i o建立兩個i o來複製資料。磁碟映象通過os或捲管理軟體在主系統上建立。磁碟映象是依靠平台和本地連線特性的本地選件。映象可用於das和san並且大多數nas支援它。儲存 式映象磁碟子系統 例如,e...

Oracle快照實現 整理

名詞說明 源 被同步的資料庫 目的 要同步到的資料庫 一 建立dblink 1 在目的資料庫上,建立dblin drop database link dblink anson create public database link dblink anson connect to lg identif...