ROW/COW 快照技术原理解析
NOTE:ROW/COW 最新更新請跳轉《再談 COW、ROW 快照技術》
目錄
目錄
快照與備份的區別
Snapshot 快照技術
全量快照
增量快照
COW 寫時拷貝快照技術
ROW 寫時重定向快照技術
最后
快照與備份的區別
傳統地, 人們一直采用數據復制、備份、恢復等技術來保護重要的數據信息, 定期對數據進行備份或復制。由于數據備份過程會影響應用性能, 并且非常耗時, 因此數據備份通常被安排在系統負載較輕時進行(如夜間). 另外, 為了節省存儲空間, 通常結合全量和增量備份技術. 顯然, 這種數據備份方式存在一個顯著的不足, 即備份窗口問題. 在數據備份期間, 企業業務需要暫時停止對外提供服務. 隨著企業數據量和數據增長速度的加快, 這個窗口可能會越來越長, 這對于關鍵性業務系統來說是無法接受的. 諸如銀行、電信等機構, 信息系統要求 24*7 不間斷運行, 短時的停機或者少量數據的丟失都會導致巨大的損失. 因此, 就需要將數據備份窗口盡可能地縮小, 甚至縮小為零. 數據快照(Snapshot)、持續數據保護(CDP, Continuous Data Protection)等技術,就是為了滿足這樣的需求而出現的數據保護技術.
需要注意的是: 目前, 隨著對信息系統的依賴程度越來越高, 即使不是銀行、電信這類傳統關鍵行業, 在政府、教育、企業也越來越多的系統要求更小的備份窗口和更短的停機時間. 降低數據保護的代價, 提高數據保護過程中的應用感知能力,逐步成為客戶的首要需求.
快照的優勢:
快照可以在數秒鐘內建立拷貝, 供備份應用使用. 利用快照技術, 配合普通的備份軟件是這樣實現的:
通過圖形的管理界面發出做快照的命令
快照功能自動尋找沒有數據改變的時刻進行拷貝,幾秒鐘之后拷貝生成
再使用備份軟件對該拷貝進行備份
利用快照的鏡像可以在數秒鐘內把數據恢復到做快照的時間點, 還允許系統管理員選擇性地迅速恢復受損或被刪文件
數據快照的功能還有很多用處, 比如現在需要一份最新的生產數據來做新系統的測試或者提供決策支持和數據分析所用, 而系統又不能停機, 使用磁帶備份恢復 一份數據時間又很長. 這樣的情況可以利用數據快照的備份功能在任一時間點建立快照拷貝, 利用拷貝的數據進行測試和分析, 不會影響系統的正常使用
Snapshot 快照技術
SNIA(存儲網絡行業協會)對快照的定義是:關于指定數據集合的一個完全可用拷貝, 該拷貝包含了相應數據在某個時間點的鏡像.
按照 SNIA 的定義, 快照有 全量快照和增量快照 兩種類型, 其中又各自使用了不同的快照技術:
全量快照:
鏡像分離 (Split Mirror)
增量快照
寫時拷貝 (Copy-On-Write)
寫時重定向 (Redirect-On-Write)
其中寫時重定向快照方式的靈活性以及使用存儲空間的高效性, 加上分布式存儲的流行, 使其逐漸成為快照技術的主流.
全量快照
又稱全拷貝快照或原樣復制, 使用 鏡像分離快照技術 在到達預設的快照時間點之前, 首先為源數據卷創建并維護一個完整的鏡像卷. 每次寫入數據到磁盤時, 都會往源數據卷和鏡像卷同時寫入, 這樣保證了同一份數據的兩個副本分別保存在源數據卷和鏡像卷上, 并且由兩者組成的一個鏡像對. 在預設快照時間點到達時, 鏡像對的數據寫入操作被停止, 鏡像卷快速脫離鏡像對并轉化為快照卷, 這樣就獲得了一份數據快照. 快照卷在完成數據快照/數據備份等應用后, 將與源數據卷重新進行同步, 成為一盒新的鏡像卷.
那么, 對于要同時保留多個連續時間點快照的源數據卷, 就必須預先為其創建多個鏡像卷, 當第一個鏡像卷被轉化為快照卷并作為數據備份后, 預先創建的第二個鏡像卷立即與源數據卷同步, 成為新的鏡像對.
鏡像分離快照的好處在于數據隔離性好, 使離線訪問數據成為可能, 并且簡化了恢復、復制或存檔一塊硬盤上的所有數據的過程. 最重要的是操作的時間非常短, 僅僅是斷開鏡像卷對所需的時間, 通常只有幾毫秒, 這樣小的備份窗口幾乎不會對上層應用造成影響. 不存在快照卷和源數據卷的相互影響, 但這種方式的缺點也十分明顯, 缺乏靈活性, 無法在任意時間點為任意的數據卷建立快照. 另外, 它需要一個或者多個與源數據卷容量相同的鏡像卷, 占用了大量存儲空間, 而且寫數據時同時寫兩份, 對寫入性能影響比較大, 在同步鏡像時還會降低存儲系統的整體性能. 為了解決鏡像分離快照技術實現的全量快照方式, 引入了差量快照的實現方式以及 COW/ROW 兩種差量快照技術.
增量快照
COW 寫時拷貝快照技術
如上圖, COW 首先會為每個源數據卷都創建一張數據指針表用于保存源數據卷(Base Volume)所有數據的物理指針, 在創建快照時, 存儲系統會拷貝出一份源數據卷指針表的副本, 該副本作為快照卷數據指針表. 而且 COW 只有在創建快照時才會建立快照卷, 該快照卷只占用了相對少量的存儲空間, 用于保存快照時間點之后源數據卷中被更新的數據. 具體的步驟如下:
Step 1: 生成源數據卷數據指針表
Step 2: 創建快照
Step 3: 從源數據卷數據指針表拷貝出快照卷數據指針表
Step 4: 生成快照卷
Step 5: 源數據卷中的原始數接收到更新操作指令
Step 6: 將源數據卷中的原始數據拷貝到快照卷中(預留空間), 下次針對這一位置的寫操作將不再執行寫時拷貝操作
Step 7: 更新快照卷指針表
Step 8: 更新源數據卷的原始數據
Step 9: 不斷的重復 Step 5~8, 直到執行下一次快照
通過上面的步驟可以看出, 寫時拷貝的本意是: 更新源數據卷中的原始數據時, 將原始數據 Copy 到快照卷中. 當我們需要恢復快照時, 只需要按照快照指針表逐一進行尋址就能夠完成了. 而且 COW 在使用上非常的靈活, 可以隨時為任意源數據卷建立快照.
優勢: COW 在進行快照操作之前, 不會占用任何的存儲資源, 也不會影響系統性能. 創建快照時由于快照卷與源數據卷通過各自的指針表共享同一份物理數據, 而不需要進行全量拷貝所以快照創建速度非常快, 可以瞬間完成. COW 創建快照時產生的備份窗口長度與源數據卷的 Size 成線性比例, 一般為幾秒鐘, 相比全量快照要長, 但快照卷占用的存儲空間卻大大減少.
劣勢: COW 因為創建快照后會的每次寫入操作都需要先將源數據卷中的原始數據拷貝到快照卷中才能開始寫入源數據卷, 所以會降低源數據卷的寫性能. 而且很顯然, 如果對同一源數據卷做了多次快照之后, 寫性能將會更加低下. 再一個就是由于快照卷僅僅保存了源數據卷的部分原始數據, 因此無法得到完整的物理副本, 碰到需要完整物理副本的應用就無能為力了, 而且如果拷貝到快照卷中的數據量超過了保留空間, 快照就將失效.
應用場景: COW 快照技術在創建快照后的一次數據更新操作實際上需要一次讀操作(讀源數據卷的數據)和兩次寫操作(寫源數據卷與寫快照卷). 所以, COW 更適合于應用對存儲設備讀多寫少的場景. 除此之外, 如果一個應用容易出現對存儲設備的寫入熱點(只針對某個有限范圍內的數據進行寫操作), 也是較較理想的選擇. 因為其數據更改都局限在一個范圍內, 對同一份數據的多次寫操作只會出現一次寫時復制操作.
ROW 寫時重定向快照技術
如上圖, Vd 表示源數據卷, Snap 表示快照卷, 當源數據卷創建一個快照時, Vd 與 snap 是一致的. 如果在創建快照之后, 對源數據卷的數據進行了更新操作的話, 并不會像 COW 似得直接修改源數據卷原始數據, 而是再開辟一個新的空間用于存放用于更新原始數據的新的數據. 具體步驟如下:
Step 1: 創建快照
Step 2: 將自上次快照以來所有的重定向寫數據所對應在源數據卷中的數據復制出來生成這個時間點的快照, 然后再將這些重定向寫數據寫回到源數據卷中的相應位置
Step 3: 源數據卷中的原始數據接收到更新操作指令
Step 4: 開辟一個新的數據存儲卷(預留空間)
Step 5: 將源數據卷數據指針表中被更新原始數據的指針重定向到新開辟的數據存儲卷
Step 6: 寫入更新數據到新開辟的存儲空間中
Step 7: 重復 Step 3~6, 直到下一次執行快照
NOTE 1: 而讀操作是否需要讀重定向, 則根據讀取數據的位置是否有過自上次快照以來的寫重定向, 必須對有過寫重定向的位置進行讀重定向, 反之就不需要了.
從上述步驟可以看出, 寫時重定向的本意是: 更新源數據卷中的原始數據時, 將源數據卷數據指針表中的被更新原始數據指針重定向到新的存儲空間. 所以由此至終, 快照卷的數據指針表和其對應的數據是沒有被改變過的. 恢復快照的時候, 只需要按照快照卷數據指針表來進行尋址就可以完成恢復了.
優勢: 源數據卷創建快照后的寫操作會被重定向, 所有的寫 IO 都被重定向到新卷中, 而所有快照卷數據(舊數據)均保留在只讀的源數據卷中. 這樣做的好處是更新源數據卷只需要一次寫操作, 解決了 COW 寫兩次的性能問題. 所以 ROW 最明顯的優勢就是不會降低源數據卷的寫性能.
劣勢: ROW 的快照卷數據指針表保存的是源數據卷的原始副本, 而源數據卷數據指針表保存的則是更新后的副本, 這導致在刪除快照卷之前需要將快照卷數據指針表指向的數據同步至源數據卷中. 而且當創建了多個快照后, 會產生一個快照鏈, 使原始數據的訪問、快照卷和源數據卷數據的追蹤以及快照的刪除將變得異常復雜. 例如: 一共執行了 10 次快照, 在快照恢復時, 要恢復到最新的快照點, 則需要合并 10 個快照文件, 最終才能實現恢復. 所以 ROW 的主要缺點是沒有一個完整的快照卷, 而是由多個不同時刻的快照卷來組成一個特定的快照時間點. 如果快照層級越多, 進行快照恢復時的系統開銷會比較大. 除此之外, 因為源數據卷數據指針指向的數據會很快的被重定向分散, 所以 ROW 另一個主要缺點就是降低了讀性能(局部空間原理).
應用場景: 在傳統存儲設備上, ROW 快照在多次讀寫后, 源數據卷的數據被分散, 對于連續讀寫的性能不如COW. 所以 ROW 比較適合 Write-Intensive(寫密集) 類型的存儲系統. 但是, 在分布式存儲設備上, ROW 的連續讀寫的性能會比 COW 更加好. 一般而言, 讀寫性能的瓶頸都在磁盤上. 而分布式存儲的特性是數據越是分散到不同的存儲設備中, 系統性能越高. 所以 ROW 的源數據卷重定向分散性反而帶來了好處. 因此, ROW 逐漸成為了業界的主流.
最后
以一張圖結尾, 這里的備份大致可以替換為鏡像去理解.
總結
以上是生活随笔為你收集整理的ROW/COW 快照技术原理解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css实现对勾
- 下一篇: javascript 秒表计时器