存儲快照主要解決數(shù)據(jù)丟失時的數(shù)據(jù)恢復(fù)尤勋,這種技術(shù)可以保存當(dāng)前存儲設(shè)備的狀態(tài)摇锋,比如電腦的文件被誤刪除了卵凑,可以通過存儲快照恢復(fù)到文件丟失之前的狀態(tài)裙椭。
快照:關(guān)于指定數(shù)據(jù)集合的一個完全可用拷貝驼抹,該拷貝包括相應(yīng)數(shù)據(jù)在某個時間點(diǎn)(拷貝開始的時間點(diǎn))的映像灵再∠』穑快照可以是其所表示的數(shù)據(jù)的一個副本坏晦,也可以是數(shù)據(jù)的一個復(fù)制品雌澄。
快照與備份的區(qū)別
傳統(tǒng)地倚喂,人們一直采用數(shù)據(jù)復(fù)制每篷、備份、恢復(fù)等技術(shù)來保護(hù)重要的數(shù)據(jù)信息端圈,定期對數(shù)據(jù)進(jìn)行備份或復(fù)制焦读。由于數(shù)據(jù)備份過程會影響應(yīng)用性能,并且非常耗時舱权,因此數(shù)據(jù)備份通常被安排在系統(tǒng)負(fù)載較輕時進(jìn)行(如夜間)矗晃。另外,為了節(jié)省存儲空間宴倍,通常結(jié)合全量和增量備份技術(shù)张症。顯然,這種數(shù)據(jù)備份方式存在一個顯著的不足鸵贬,即數(shù)據(jù)恢復(fù)時間長俗他、需要備份窗口。信息系統(tǒng)要求 24*7 不間斷運(yùn)行阔逼,一旦出現(xiàn)數(shù)據(jù)問題兆衅,需要依賴備份恢復(fù)時,需要做全量 + 增量的方式恢復(fù)嗜浮,一般來說耗時都會很長羡亩。數(shù)據(jù)快照就是為了滿足這樣的需求而出現(xiàn)的數(shù)據(jù)保護(hù)技術(shù)。
快照技術(shù)
快照的定義:關(guān)于指定數(shù)據(jù)集合的一個完全可用拷貝周伦,該拷貝包括相應(yīng)數(shù)據(jù)在某個時間點(diǎn)(拷貝開始的時間點(diǎn))的映像夕春。快照可以是其所表示的數(shù)據(jù)的一個副本专挪,也可以是數(shù)據(jù)的一個復(fù)制品及志。從更具體的技術(shù)細(xì)節(jié)來講片排,快照是指向保存在存儲設(shè)備中的數(shù)據(jù)的引用標(biāo)記或指針。我們可以這樣理解速侈,快照有點(diǎn)像是詳細(xì)的數(shù)據(jù)地址目錄表率寡,但在計算機(jī)中快照被作為完整的數(shù)據(jù)備份來對待。
快照技術(shù)的作用:主要能夠進(jìn)行在線數(shù)據(jù)恢復(fù)倚搬,當(dāng)存儲設(shè)備發(fā)生故障或損壞時能夠進(jìn)行即時的數(shù)據(jù)恢復(fù)冶共,將存儲狀態(tài)恢復(fù)到快照時間點(diǎn)的狀態(tài)。另一個作用是能夠?yàn)榇鎯τ脩籼峁┝硗庖粋€數(shù)據(jù)訪問的通道每界,當(dāng)源數(shù)據(jù)進(jìn)行在線應(yīng)用處理時捅僵,用戶可以選擇訪問快照數(shù)據(jù),還能夠?qū)⒖煺諔?yīng)用到測試等工作眨层。因此庙楚,所有存儲系統(tǒng),不論高中低端趴樱,只要應(yīng)用于在線系統(tǒng)馒闷,那么快照就成為一個不可或缺的功能∪鳎快照在備份纳账、數(shù)據(jù)保護(hù)過程中發(fā)揮著越來越大的作用。
快照的優(yōu)勢
- 快照可以在數(shù)秒鐘內(nèi)建立拷貝, 供備份應(yīng)用使用捺疼。利用快照技術(shù), 配合普通的備份軟件是這樣實(shí)現(xiàn)的:
- 通過圖形的管理界面發(fā)出做快照的命令
- 快照功能自動尋找沒有數(shù)據(jù)改變的時刻進(jìn)行拷貝疏虫,幾秒鐘之后拷貝生成
- 再使用備份軟件對該拷貝進(jìn)行備份
- 利用快照的鏡像可以在數(shù)秒鐘內(nèi)把數(shù)據(jù)恢復(fù)到做快照的時間點(diǎn), 還允許系統(tǒng)管理員選擇性地迅速恢復(fù)受損或被刪文件
- 數(shù)據(jù)快照的功能還有很多用處, 比如現(xiàn)在需要一份最新的生產(chǎn)數(shù)據(jù)來做新系統(tǒng)的測試或者提供決策支持和數(shù)據(jù)分析所用, 而系統(tǒng)又不能停機(jī), 使用磁帶備份恢復(fù)一份數(shù)據(jù)時間又很長。這樣的情況可以利用數(shù)據(jù)快照的備份功能在任一時間點(diǎn)建立快照拷貝, 利用拷貝的數(shù)據(jù)進(jìn)行測試和分析, 不會影響系統(tǒng)的正常使用帅涂。
快照的分類
- 全量快照:
- 鏡像分離 (Split Mirror)
- 增量快照
- 寫時拷貝 (Copy-On-Write)
- 寫時重定向 (Redirect-On-Write)
增量快照之 COW
COW(Copy-On-Write)议薪,也被稱之為「即寫即拷」快照技術(shù)或「寫時復(fù)制」快照技術(shù)尤蛮,這種方式通常也被稱為“元數(shù)據(jù)(源數(shù)據(jù)指針表)”拷貝媳友。顧名思義,如果有人試圖改寫源數(shù)據(jù)塊上的原始數(shù)據(jù)产捞,首先將原始數(shù)據(jù)拷貝到新數(shù)據(jù)塊中醇锚,然后再進(jìn)行改寫。當(dāng)你還原快照需要引用原始數(shù)據(jù)時坯临,快照軟件將原始數(shù)據(jù)原有的指針映射到新數(shù)據(jù)塊上焊唬。
再來深入的看看 COW 的過程,COW 在創(chuàng)建快照時看靠,并不會發(fā)生物理的數(shù)據(jù)拷貝動作赶促,僅是拷貝了原始數(shù)據(jù)所在的源數(shù)據(jù)塊的物理位置元數(shù)據(jù)。因此挟炬,COW 快照創(chuàng)建非撑副酰快嗦哆,可以瞬間完成。在創(chuàng)建了快照之后婿滓,快照軟件會監(jiān)控跟蹤原始數(shù)據(jù)的變化(即對源數(shù)據(jù)塊的寫操作)老速,一旦源數(shù)據(jù)塊中的原始數(shù)據(jù)被改寫,則會將源數(shù)據(jù)塊上的數(shù)據(jù)拷貝到新數(shù)據(jù)塊中凸主,然后將新數(shù)據(jù)寫入到源數(shù)據(jù)塊中覆蓋原始數(shù)據(jù)橘券。其中所有的源數(shù)據(jù)塊就組成了所謂的源數(shù)據(jù)卷,而新數(shù)據(jù)塊組成了快照卷卿吐。你應(yīng)該能夠看出 COW 有一個很明顯的缺點(diǎn)旁舰,就是會降低源數(shù)據(jù)卷的寫性能,因?yàn)槊看胃膶懶聰?shù)據(jù)嗡官,實(shí)際上都進(jìn)行了兩次寫操作鬓梅。
再再深入的看看 COW 的原理,在創(chuàng)建快照時谨湘,會同時創(chuàng)建快照卷绽快,但只需分配相對少量的存儲空間,用于保存創(chuàng)建快照后源數(shù)據(jù)卷中被更新的數(shù)據(jù)紧阔。每個源數(shù)據(jù)卷都具有一張數(shù)據(jù)指針表(元數(shù)據(jù))坊罢,簡稱源數(shù)據(jù)指針表,表記錄就是指向相應(yīng)源數(shù)據(jù)塊的地址指針擅耽。在創(chuàng)建快照時活孩,存儲子系統(tǒng)會建立源數(shù)據(jù)指針表的一個副本(元數(shù)據(jù)拷貝),作為快照卷的數(shù)據(jù)指針表乖仇,簡稱快照數(shù)據(jù)指針表憾儒。所以,在創(chuàng)建快照之后乃沙,這個快照就相當(dāng)于一個可供上層應(yīng)用訪問的存儲邏輯副本起趾,快照卷與源數(shù)據(jù)卷通過各自的指針表共享同一份物理數(shù)據(jù)。當(dāng)源數(shù)據(jù)卷中任意數(shù)據(jù)將要被改寫時警儒,COW 需要確保對原始數(shù)據(jù)的拷貝操作發(fā)生在原始數(shù)據(jù)的改寫操作之前训裆,并且將原始數(shù)據(jù)在快照卷中的新地址更新到快照數(shù)據(jù)指針表記錄中,使快照時間點(diǎn)后更新的數(shù)據(jù)不會出現(xiàn)在快照卷中蜀铲,快照卷中的數(shù)據(jù)都必須是快照時間點(diǎn)那一刻的數(shù)據(jù)边琉,以此保證了快照數(shù)據(jù)的完整性。
- 源數(shù)據(jù)卷包含了原始數(shù)據(jù) A~G记劝,源數(shù)據(jù)指針表的記錄在創(chuàng)建快照時均指向原始數(shù)據(jù) A~G变姨。
- 創(chuàng)建快照時,即確立了快照時間點(diǎn)厌丑,快照軟件會創(chuàng)建快照卷定欧,并且 Copy 源數(shù)據(jù)指針表為快照卷指針表别伏,此時快照指針表記錄同樣指向原始數(shù)據(jù) A~G。
- 創(chuàng)建快照之后忧额,首次有新數(shù)據(jù)更新到源數(shù)據(jù)卷中厘肮,如:新數(shù)據(jù) D’ 更新原始數(shù)據(jù) D。此時在 D’ 覆蓋 D 之前睦番,需要先把 D 拷貝到快照卷中类茂,并且更新快照數(shù)據(jù)指針表的記錄使其指向新的存儲地址。最后再將 D’ 寫入到 D 原來的位置托嚣,源數(shù)據(jù)指針表不需要更新巩检。
NOTE1:在步驟 3 中使用了「首次」一詞,意思是說當(dāng)源數(shù)據(jù)卷中同一位置上的數(shù)據(jù)被修改了多次也僅僅會在第一次修改時被拷貝示启,換句話說就是只有原始數(shù)據(jù)被更新時才會觸發(fā)拷貝操作兢哭,新數(shù)據(jù)被更新的數(shù)據(jù)更新并不會影響到快照數(shù)據(jù)的完整性。所以 COW 偶爾也會被表述為 COFW(Copy-On-First-Write)
NOTE2:源數(shù)據(jù)指針表至此至終都不會發(fā)生變化夫嗓,所以 COW 對源數(shù)據(jù)卷的讀操作和對源數(shù)據(jù)卷中單個位置的多次寫操作性能都不會有很大的影響迟螺。相對的,快照卷數(shù)據(jù)是非連續(xù)的舍咖,而且在執(zhí)行多次快照操作之后矩父,數(shù)據(jù)會變得非常離散,所以快照卷數(shù)據(jù)的讀寫延時較大排霉。
應(yīng)用場景:這種實(shí)現(xiàn)方式在第一次寫入某個存儲位置時需要完成一個讀操作(讀原位置的數(shù)據(jù))窍株,兩個寫操作(寫原位置與寫快照空間),如果寫入頻繁攻柠,那么這種方式將非常消耗IO時間球订。因此可推斷,如果預(yù)計某個卷上的I/O多數(shù)以讀操作為主瑰钮,寫操作較少的場景冒滩,這種方式的快照實(shí)現(xiàn)技術(shù)是一個較理想的選擇,因?yàn)榭煺盏耐瓿尚枰^少的時間飞涂。除此之外旦部,如果一個應(yīng)用易出現(xiàn)寫入熱點(diǎn),即只針對某個有限范圍內(nèi)的數(shù)據(jù)進(jìn)行寫操作较店,那么COW的快照實(shí)現(xiàn)方式也是較較理想的選擇。因?yàn)槠鋽?shù)據(jù)更改都局限在一個范圍內(nèi)容燕,對同一份數(shù)據(jù)的多次寫操作只會出現(xiàn)一次寫時復(fù)制操作梁呈。但是這種方式的缺點(diǎn)也是非常明顯的。如果寫操作過于分散且頻繁蘸秘,那么 COW造成的開銷則是不可忽略的官卡,有時甚至是無法接受的蝗茁。因此在應(yīng)用時,則需要綜合評估應(yīng)用系統(tǒng)的使用場景寻咒,以判斷這種方式的快照是否適用哮翘。
在了解了 COW 的實(shí)現(xiàn)原理之后再回頭對比一下 COW 與備份之間的區(qū)別,COW 技術(shù)在創(chuàng)建快照前毛秘,并不會占用任何的存儲資源饭寺,也不會影響系統(tǒng)性能。而且 COW 在使用上非常靈活叫挟,能夠在任意時間點(diǎn)為任意數(shù)據(jù)卷創(chuàng)建快照艰匙。在快照時間點(diǎn)產(chǎn)生的“備份窗口”的長度與源數(shù)據(jù)卷的容量成線性比例,一般為幾秒鐘抹恳,對應(yīng)用影響甚微员凝,并且為快照卷分配的存儲空間也大大的減少》芟祝拷貝的操作只在源數(shù)據(jù)卷發(fā)生更新時才被觸發(fā)健霹,因此系統(tǒng)開銷很小。但是由于快照卷僅保存了源數(shù)據(jù)卷被更新的數(shù)據(jù)瓶蚂,因此快照技術(shù)并不能夠得到數(shù)據(jù)的完整物理副本骤公。
增量快照之 row
ROW(Redirect-On-Write),也被稱之為寫時重定向扬跋。ROW 的實(shí)現(xiàn)原理與 COW 非常相似阶捆,區(qū)別在于「ROW 對原始數(shù)據(jù)卷的首次寫操作,會將新數(shù)據(jù)重定向到預(yù)留的快照卷中」钦听,而非 COW 一般會使用新數(shù)據(jù)將原始數(shù)據(jù)覆蓋洒试。所以,ROW 快照中的原始數(shù)據(jù)依舊保留在源數(shù)據(jù)卷中朴上,并且為了保證快照數(shù)據(jù)的完整性垒棋,在創(chuàng)建快照時,源數(shù)據(jù)卷狀態(tài)會由讀寫變成只讀的痪宰。如果對一個虛擬機(jī)做了多次快照叼架,就產(chǎn)生了一個快照鏈,虛擬機(jī)的磁盤卷始終掛載在快照鏈的最末端衣撬,即虛擬機(jī)的寫操作全都會落盤到最末端的快照卷中乖订。該特征導(dǎo)致了一個問題,就是如果一共做了 10 次快照具练,那么在恢復(fù)到最新的快照點(diǎn)時乍构,則需要通過合并 10 個快照卷來得到一個完整的最新快照點(diǎn)數(shù)據(jù);如果是恢復(fù)到第 8 次快找時間點(diǎn)扛点,那么就需要將前 8 次的快照卷合并成為一個完整的快照點(diǎn)數(shù)據(jù)哥遮。從這里可以看出 ROW 的主要缺點(diǎn)是沒有一個完整的快照卷岂丘,其快照之間的關(guān)系是鏈?zhǔn)降模绻煺諏蛹壴蕉嗝咭M(jìn)行快照恢復(fù)時的系統(tǒng)開銷會比較大奥帘。但 ROW 的優(yōu)勢在于其解決了 COW 快照寫兩次的問題,所以就寫性能而言仪召,ROW 無疑是優(yōu)于 COW 的寨蹋。
再深入的來看看 ROW 的原理,創(chuàng)建快照時返咱,ROW 也會 Copy 一份源數(shù)據(jù)指針表作為快照數(shù)據(jù)指針表钥庇,此時兩張表的指針記錄都相同的。在創(chuàng)建快照之后咖摹,也就是在快照時間點(diǎn)之后评姨,發(fā)生了寫操作,那么新數(shù)據(jù)會直接被寫入到快照卷中萤晴,然后再更新源數(shù)據(jù)指針表的記錄吐句,使其指向新數(shù)據(jù)所在的快照卷地址〉甓粒可以看出嗦枢,ROW 與 COW 最大的不同就是:COW 的快照卷存放的是原始數(shù)據(jù),而 ROW 的快照卷存放的是新數(shù)據(jù)屯断。因?yàn)?ROW 這種設(shè)定文虏,所以其多個快照之間的關(guān)系必定是鏈?zhǔn)降模驗(yàn)樽钚乱淮慰煺盏脑紨?shù)據(jù)很可能就存放在了上一次快照時創(chuàng)建的快照卷中殖演。
- 上圖中氧秘,Vd 是源數(shù)據(jù)卷的源數(shù)據(jù)指針表,分別指向 4 個原始數(shù)據(jù)趴久。
- 創(chuàng)建快照時丸相,會 Copy 源數(shù)據(jù)指針表作為快照卷的快照數(shù)據(jù)指針表 snap,也同樣指向 4 個原始數(shù)據(jù)彼棍,并且會分配存儲空間作為快照卷灭忠。
- 創(chuàng)建快照后,當(dāng)有新數(shù)據(jù)寫入時座硕,直接將新數(shù)據(jù)寫入快照卷中弛作,然后修改 Vd 中的記錄指向新數(shù)據(jù)。而 snap 的記錄不變坎吻。
值得注意的是:ROW 在傳統(tǒng)存儲場景下最大的問題是對讀性能影響比較大缆蝉。的確,ROW 的寫性能基本沒有損耗瘦真,只是修改指針刊头,實(shí)現(xiàn)效率很高。但多次讀寫操作后诸尽,某時刻的源數(shù)據(jù)卷的數(shù)據(jù)會變得非常離散(源數(shù)據(jù)指針表記錄都被更新了)原杂,這是 ROW 的連續(xù)讀寫性能就不如 COW 了。所以您机,ROW 更適合應(yīng)用到 Write-Intensive(寫密集型)的存儲系統(tǒng)中穿肄。但是,但是际看,但是咸产,在分布式存儲的情況下,ROW 的連續(xù)讀寫的性能卻會比 COW 更高仲闽。傳統(tǒng)存儲場景中讀寫性能的瓶頸一般是在磁盤上脑溢,但這種瓶頸在分布式存儲場景中是不存在的。用戶在業(yè)務(wù)層看到連續(xù)存儲赖欣,實(shí)際上是分布在不同的服務(wù)器的不同硬盤中屑彻,數(shù)據(jù)越是分散,系統(tǒng)性能越高顶吮。而 ROW 把源數(shù)據(jù)卷中的原始數(shù)據(jù)打散之后社牲,對性能反而有好處。所以現(xiàn)階段而言悴了,ROW + 分布式存儲的快照方式是業(yè)界發(fā)展的主要方向搏恤。