1. 程式人生 > >【大話存儲】學習筆記(八),數據保護

【大話存儲】學習筆記(八),數據保護

clip 調度員 系統管 區域 工具 管理軟件 安裝 inf 利用

第一章 數據保護

所謂數據保護是指對當前位置上的數據進行備份,不一定是實時的。這樣帶來的好處是如果發生磁盤損壞或者說被修改了,可以通過備份數據找回

1.1 文件級備份

文件級備份:將磁盤上所有文件通過調用文件系統接口備份到另一個介質上。也就是把數據以文件形式讀出,然後存儲在另一個介質上面。

可以看出,備份軟件將文件備份到新的介質上,文件很大程度上是連續存放的。正因為如此不會備份元數據,利用新介質進行恢復的時候,會重構文件系統。

1.2 塊級備份

塊級備份就是不管塊上是否有數據,不考慮文件系統的邏輯,備份塊設備上的每個塊。

塊級備份不經過文件系統接口,速度更快,但是會備份很多僵屍扇區。

第二章

高級數據保護

2.1 遠程文件復制

遠程文件復制:通過網絡傳輸到異地容災點。典型的代表是rsync異步遠程文件同步軟件。可以監視文件系統的動作,將文件的變化,同步到異地站點。增量復制。

2.2 遠程磁盤鏡像

基於塊的遠程備份。

  • 同步復制:必須等數據復制到異地站點以後,才通報上層IO成功消息
  • 異步復制:寫入成功即可回復成功,然後通過網絡傳輸到異地。不能保證一致性,但是上層響應快。
    基於塊的備份措施,一般都是在底層設備上進行,不耗費主機資源。

2.3 快照

遠程鏡像確實是對生產數據一種非常好的保護,但是需要鏡像卷一直在線,主卷有寫IO,那麽鏡像卷也需要有寫IO。如果想對鏡像卷進行備份,需要將停止主卷的讀寫,然後將兩個卷的鏡像關系分離。所以當恢復主卷的IO的時候,鏡像卷不會再被讀寫。此時可以備份鏡像卷的數據。

這樣會存在一個問題,主卷上還繼續有IO,所以數據與備份的鏡像不一致。所以主卷上所有的寫IO動作,會以bitmap方式記錄下來,bitmap上的每個位表示卷上的一個塊,0表示未寫入,1表示已寫入,所以當拆分鏡像以後,被寫入了數據,程序將bitmap文件對應位從0變為1。備份完成以後,再做數據同步即可。

可以看出上述過程比較的繁瑣,而且需要占用一塊和主卷一樣大小的鏡像卷。

快照技術就是為了解決這種問題,其基本思想是抓取某一時間點磁盤卷上的所有數據。

快照分為:基於文件系統的快照和基於物理卷的快照

2.3.1 基於文件系統的快照

文件系統管理的精髓:鏈表、B樹、位圖,也就是元數據

文件系統

  • 將扇區組合成更大的邏輯塊來降低管理規模。NTFS最大塊可以到4KB,也就是8個扇區一組一個簇(Block),這樣可以減少管理成本。
  • 文件系統會創建所管理存儲空間上所有簇的位圖文件。每個位代表卷上的簇(或者物理扇區)是否被使用,如果被使用,則置1。
  • 文件系統保存一份文件和其對應簇號的映射鏈。因為映射鏈本身和簇位圖也是文件,也有自己的映射鏈,所以針對重要的元數據,有一個固定的入口。root inode

寫入新數據

  • 查找簇位圖,找位值為0的簇號,
  • 計算所需空間, 分配簇號給文件
  • 將數據寫入簇,再去文件——簇號映射圖更新
  • 將對應的簇映射關系記錄下來,到簇位圖將對應位置改為1.

刪除數據

  • 直接在簇號映射鏈中抹掉,
  • 簇位圖對應簇改為0

可以看出刪除數據實際上不會抹掉實際的數據。

** 所以,最重要的不是數據,而是文件——簇號映射鏈和位圖等元數據。**

也就是說我們要做備份,只需要把某時刻的文件系統中的映射圖表保存下來。但是必須保證卷上的數據不被IO寫入了,同時又要不應用還不能中斷。既然原來的空間不能再寫了,我們可以寫到其他的空閑區域。

技術分享圖片

上圖為快照示意圖。原塊沒有被覆蓋的時候,快照和文件系統的指針圖是指向同一位置的。一旦原塊有寫IO執行,則這個塊會被寫到其他空閑塊。將當前指針指向新塊,其他指針不變。此時可以將照下了的原卷數據拷貝出,從而得到某一時刻的卷數據。

2.3.2 基於物理卷的快照

基於物理卷的快照,相當於給物理卷增加了“卷扇區映射管理系統”。在底層卷實現快照,可以減輕文件系統的負擔。

  • 保存一張初始的LBA表。
  • 每當有新的寫入請求,寫入另一個地方。(一般是新卷,專為快照保留的),並在初始的LBA表中做好記錄。比如原始LBA:卷A的10000號,映射到LBA:卷B的100號。
  • 卷A在這個快照刪除之前不允許寫入,文件系統無法感知重定向,文件系統在它的映射圖裏面還是記錄了原始的LBA地址。

此時如果來了新的寫IO,有兩種方式一種是Write Redirect 一種是Copy on Write

所謂Write Redirect就是將文件系統的讀寫請求,重定向到卷B,這樣每次IO其實都會查找快照映射表,降低了性能。所以引入了Copy on Write

所謂Copy on write,就是當寫請求來的時候,先把原來的扇區的數據復制一份到空閑卷,然後將新數據寫入原卷。不過這種復制操作只發生在原卷某個或者快照之後從未更新過的塊上面,若是某個塊在快照之後更新過了,說明之前的數據已經轉移走了,可以放心的覆蓋。

所以Copy on Write實際上是讓舊數據先占著位置,等新數據來了以後先把原來的數據復制走,再更新,而且一旦更新了一次,可以直接覆蓋。

帶來的好處是 ,原卷上的數據隨時是最新的狀態,每個IO可以直接訪問原卷的地址,而不需要遍歷映射表。

2.3.3 快照的意義

上層應用和文件系統都有緩存,文件系統緩存的是文件系統的元數據和文件的實體數據。每隔一段時間(Linux一般是30s)批量Flush到磁盤上。而且不是只做一次IO,有可能會對磁盤做多次IO。如果快照生成的時間恰恰在這連續的IO之間生成,那麽此時卷上的數據實際上有可能不一致。文件系統的機制是先寫入數據到磁盤,元數據保存在緩存裏面。因為如果FS先把元數據寫入磁盤,突然斷電了,那麽元數據對應的僵屍扇區的數據會被認為是文件的。

總之,快照極可能生成不一致的數據。可以任意生成,而且占用的空間又不大,更重要的是可以在線恢復,只要沒刪除,就是幾秒鐘,不用停機,只需要在內存中做IO重定向,那麽上層訪問就變成以前時間點的數據了。

但是快照會存在不一致的問題,如何解決?

既然快照無異於一次磁盤掉電,那麽利用快照恢復數據之後,文件系統可以進行一致性檢查,數據庫也會利用日誌來使數據文件處於一致。有些快照解決方案是在主機上安裝一個代理,執行快照前,先通知文件系統將緩存中的數據全部Flush到磁盤,然後立即生成快照。

第三章 數據備份系統的基本要件

  • 備份主體:需要進行備份的備份源。
  • 備份目的:磁盤等介質
  • 備份通路:網絡
  • 備份執行引擎:備份軟件
  • 備份策略

下面重點介紹一下備份目的、備份通路、備份引擎

3.1 備份目的

3.1.1 本地磁盤作為備份目的

用本地磁盤作為備份目的就是將數據備份到本地磁盤的另外分區或者目錄裏面。這樣不需要網絡,缺點是對備份主體的性能影響大。還會對其他的IO密集型程序造成影響。
這種方式一般用於不關鍵的應用和非IO密集型應用。比如E-mail,對轉發實時性要求不高。

3.1.2 用SAN磁盤作為備份目的

用SAN磁盤作為備份目的就是將需要備份的數據,從讀入內存,再寫入HBA卡緩沖區,然後再通過線纜傳送到磁盤陣列上。

  • 優點:只耗費SAN公用網絡帶寬,對主體影響小。
  • 缺點:對公共網絡資源和出口帶寬有影響。
3.1.3 用NAS目錄作為備份目的

用NAS目錄作為備份目的就是將數據備份到遠程共享目錄中。比如window中常用的文件夾共享。因為數據一般是通過以太網進行傳遞的,占用了前端的網絡帶寬,但是相對廉價,不需要部署SAN

3.1.4 用SAN上的磁帶庫作為備份目標

現在出現一種虛擬磁帶庫,即用磁盤來模擬磁帶,對主機來說看到的是一臺磁帶庫,實際上是一臺磁盤陣列,主機照樣使用磁帶庫一樣來使用虛擬磁帶庫。要做到這點,就必須在磁盤陣列的控制器上做虛擬化操作,也就是實現協議轉換器的作用。

可以帶來了的好處是:

  • 速度提升
  • 避免機械手這種復雜的機械裝置
  • 管理方便。
3.1.5 信息生命周期管理

將使用不頻繁的數據移動到低速、低成本的設備上。比如只給視頻應用分配20GB的空間,但是報告有500GB的空間,剩下的空間是在在磁帶庫上。

3.1.6 分級存儲

1. 一線磁盤陣列

2. 二線虛擬磁帶庫:近期不會被頻繁調度。利用大容量SATA盤,性能適中的控制器。

3. 帶庫或者光盤庫。幾年甚至幾十年都不訪問到。

3.2 備份通路

3.2.1 本地備份

數據流向:本地磁盤——總線——磁盤控制器——總線——內存——總線——磁盤控制器——總線——本地磁盤
也即數據從本地磁盤出發,經過本地的總線 和內存,經過CPU少量控制邏輯代碼之後,流回本地磁盤。

3.2.2 通過前端網絡備份

經過前端網絡備份的數據流向是:本地磁盤——總線——磁盤控制器——總線——內存——總線——以太網卡——網線——以太網——網線——目標計算機的網卡——總線——內存——總線——目標計算機的磁盤。數據從本地磁盤出發,流經本地總線和內存,然後流到本地網卡,通過網絡傳送到目標計算機磁盤。

  • 前端網絡:服務器接受客戶端連接的網絡,也就是服務網絡,是服務器和客戶端連接的必經之路。
  • 後端網絡:對客戶封閉,客戶的連接不用經過這個網絡,用與服務器和存儲、應用服務器、數據庫服務器的連接。可以是SAN,以太網
3.2.3 通過後端網絡備份

通過後端網絡備份的數據流向是:本地磁盤——總線——控制器——總線——內存——總線——後端HBA卡——線纜——後端交換設備——線纜——備份目的的後端網卡——總線——內存——磁盤

3.2.4 LAN Free備份

備份的時候不經過LAN,也就是不流經前端網絡,也叫Frontend Free。這樣的好處是不耗費前端網絡的帶寬,對客戶終端接受服務器的數據不影響。。因為前端網絡一般是是慢速網絡 ,資源非常珍貴。無論是本地、還是網絡,都需要待備份的服務器付出代價,即需要讀取備份源數據到自身的內存,然後從內存寫入備份的目的地。對主機CPU、內存都有浪費。能否不消耗服務器的性能呢?可以使用Server Free備份。

3.2.5 Server Free備份

Server Free備份:備份源不能在服務器上(因為數據從磁盤讀出,要流將總線,然後到內存),也不能在服務器上。用SCSI的擴展復制命令,將這些命令發送給支持Server Free的存儲設備,然後這些設備會提取自身的數據寫入備份目的設備,而不是發送給主機。
所謂Server Free, 不是真正不需要服務器,而是讓服務器發出SCSI擴展復制命令,或者使用另一臺專門做數據移動的新服務器,來代替原來服務器移動備份數據。釋放運算壓力很大的生產服務器。

3.3 備份引擎

備份引擎:一套策略,決定整個數據備份系統應該怎麽運作,備份那些內容,什麽時候開始備份,備份時間有沒有限制等。

3.3.1 備份服務器

備份引擎以什麽形式體現呢?當然是運行在主機上的程序,所以需要一臺計算機來做引擎的執行者。備份服務器的備份策略和規則,怎麽傳給整個數據備份系統中的服務器?通過以太網,因為以太網擴展性好,適合節點間通信。相對於以太網,SAN更適合傳送大量的數據。而利用前端網絡還是後端網絡呢?

常用前端網絡來連接待備份的服務器和備份服務器,因為備份策略的數據包不多。

備份服務器如何與每個待備份的服務器建立通話?怎麽通話?規則怎麽定?需要待備份服務器上運行一個代理程序,專門解釋備份服務器發來的命令,根據命令作出動作。

備份代理:監聽端口,接收備份服務器發來的命令。

3.3.2 介質服務器

若數據備份系統中有一臺SCSI磁帶機,且多臺主機想備份到這臺磁帶機上。可以將磁帶機連接到固定的計算機上,通過以太網連接其他的需要備份的計算機,將數據發給這臺掌管磁帶機的計算機,然後寫給磁帶機。

掌管磁帶機的計算機稱為了代替這些服務器行使備份動作的角色,稱為介質服務器。

在每個待備份的服務器上安裝代理,讓每臺服務器按照順序有條理的使用介質服務器提供的備份介質進行備份。
技術分享圖片

備份的流程如下:

  • 某時刻,備份服務器通知介質服務器和待備份的服務器C需要開始備份了。
  • 介質服務器A向服務器發出命令,告訴它可以開始備份了。
  • 待備份的服務器C把需要備份的數據通過以太網發送給介質服務器A。
  • 介質服務器A將收到的數據源源不斷的寫入到磁帶機中。
  • 重復

上圖是一個Frontend UnFree的備份方式,占用了前端的網絡。

我們總結下,現在數據備份系統中一共有三個角色:

  • 備份服務器(調度員)
  • 介質服務器(倉庫管理員)
  • 待備份服務器(存儲貨物的人)

3.4 三種備份方式

3.4.1 完全備份

不管文件多大,只要要備份,都需要將文件都備份下來。

3.4.2 差量備份

差量備份:只備份從上次完全備份以來發生變化的數據。
差量備份要求必須做一次完全備份,作為差量的基準點

3.4.3 增量備份

只備份從上次備份以來這份文件中變化過的數據。

上次備份,不管是全備、差備,還是增備。

對於數據庫的備份,備份軟件想知道每個數據文件的變化是不可能的,因為數據庫文件內部格式非常復雜,只有自己才能分析和檢測出來。所以數據庫管理軟件有自己的備份工具。第三方備份軟件只能調用數據庫軟件自身提供的命令。

【大話存儲】學習筆記(八),數據保護