新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux 網絡文件系統的數據備份及恢復機制實現

        Linux 網絡文件系統的數據備份及恢復機制實現

        作者: 時間:2016-09-12 來源:網絡 收藏

        把原目錄中的結構復制到新目錄;

        在原目錄中找到所有的子目錄,重復 2、3 步;

        把新的子目錄對應的 inode 號替換上一層目錄中的老 inode 號;

        重復上述過程,及到目錄樹中的所有目錄得到復制為止。

        在上述策略中,新版本并沒有復制所有的文件,只是在復制的目錄結構中記錄下了該文件的 inode 號(即復制了目錄的結構,而不是把文件都進行復制,從而節省了存儲和計算資源),因此,當有 NFS 請求需要對文件進行版本生成后的第一次修改時,需要復制該文件,生成新的版本。該實現過程參見如下流程圖:

        圖 3 寫時復制算法示意圖

        圖 3 寫時復制算法示意圖

        這種文件復制策略其實是一種惰性算法,也即我們常說的寫時復制的方法,這個方法在 操作系統的子進程對父進程資源的繼承中有所體現。這個策略一方面可以最大限度減少復制文件的數量,另一方面則可以避免瞬間過大的文件復制工作量,影響文件服務的性能。該算法的過程如下:當文件操作為寫操作時,判斷該文件是否版本生成后的第一次寫操作;若是則利用文件系統提供的底層函數生成一個新的文件,復制源文件的數據到新生成的文件,同時把該文件當前版本的 inode 節點中的版本號置為當前版本號,這樣新文件就成為該文件的最新版本。

        雖然我們采用的算法可以有較好的性能,存儲開銷也是最優,但是,每次版本生成肯定會造成服務性能的下降和空間的占用,而這些代價在一個比較安全可靠的環境中是可以適當降低的,即當系統比較安全的時候,可以選擇讓系統以更低的頻率進行版本生成,相反,當系統安全狀況比較糟糕的時候,可以通過提高版本生成頻率適當降低服務性能來獲得更高的數據安全性能,當系統處于緊急狀態時,甚至可以要求立即進行版本生成。

        基于這些考慮,我們采用了自適應的備份策略,災情評估系統可以動態評估系統的災情程度,然后可以立即修改版本生成策略,以適應當時的安全要求。

        NFS 數據恢復技術

        企業應用 NFS 的一個重要目標就是要保證系統的高可用性,即使在出現嚴重災難、故障、攻擊等情況下能具有較好的生存能力。因此,當一個系統出現故障時,如何快速地恢復系統,迅速投入到服務備份中去是相當重要的,所以,對于文件系統數據的恢復而言,也需要專門的考慮和設計。

        本方案被配置成多個站點互為備份的情況,即平時只有一個主站點在服務,其他站點處于同步備份狀態,當某個站點出現故障或災難時,或者是被非法入侵者攻破時,系統可以立即分配新的主站點把被破壞的站點替換下來,進入恢復狀態,其他正常的站點仍可提供正常的服務。

        當然,也存在所有站點均出現故障的情況,但是由于我們采用了多種措施,如動態隨機遷移、災情評估與響應策略等,再配合傳統的防火墻、IDS 等安全系統,可以極大限度地減少這種幾率。因此,我們的數據恢復問題主要考慮上述這種情形,即個別服務器出現故障退出服務而其他系統依然正常的情況。

        首先,我們來分析一下系統退出后數據的情形,主要涉及到退出的服務器和正常的主服務器與備份服務器,如圖 4 所示:

        圖 4 一個系統退出后數據狀態示意圖

        圖 4 一個系統退出后數據狀態示意圖

        在上圖中,退出服務器最后生成的版本號為 i,系統退出后,一方面主文件服務器會察覺到同步數據無法從退出服務器返回結果,這樣的話它就會重發同步請求,經過 3 次重發后,如果依然沒有返回信息,則認為該服務器退出服務,因此會把同步到磁盤文件中,并記錄下該服務器在同步數據文件中的起始位置,這當由多個文件服務器退出時可以分別識別出來。由于退出系統無法繼續保持同步,因此其狀態會與工作的文件服務器不一致,具體表現在以下幾個方面:

        當退出時間很短時,數據不一致僅存在于緩沖區中,這時如果退出服務器能立即重新投入使用,則不需要進行額外的數據恢復,數據同步可以通過主服務器同步請求的重試來達到。

        當主服務器確認退出服務器退出后,會把未同步的數據寫入特定的同步數據文件中,這時的不一致性包括了緩沖區中的數據和同步數據文件中的數據,這時的數據恢復需要做兩方面的工作:

        把同步數據文件中的正確數據一次性發送給退出服務器,退出服務器把它寫入本地的同步數據文件;

        建立本地的緩沖區,建立起同步機制,接收同步數據,同時啟動數據同步進程,先同步數據文件中的數據,當緩沖區數據因沒有處理而達到一定程度時,會自動把部分數據追加到同步數據文件的后面,這時,退出服務器已經恢復了正常工作,實際上也不需要過多的數據恢復工作。

        由于主文件服務器一般需要處理文件的讀寫請求,寫請求僅占一部分,需要同步而執行的操作造成的負載要小于主服務器,因此可能在較短的時間內完成同步。當需要退出服務器(此時已經進入同步階段)成為主服務器時,則必須等所有同步數據同步完成后才能開始服務。

        如果退出服務器是因為較嚴重的故障或災難而退出的,則可能需要較長時間的處理,如更換硬件、系統重啟、甚至重裝系統等,這時就可能出現一些困難的情況,一種是如上圖所示的,工作正常的系統已經生成了新的版本,如服務器退出時的最新版本是 i,經過一段時間后,正常系統生成了新的版本,這時主系統會清空同步數據文件,重新從版本生成后進行記錄。對于這種情況,可以有兩種處理辦法:

        基于本地版本的快速恢復:當退出文件服務器本地至少存在一個版本與其他正常機器上的版本相同時,可以采用這種恢復策略。具體而言,先確定一個最新的正確版本,用本地版本恢復,這一過程非常簡單快捷,僅涉及到兩次 inode 的修改;然后選擇一臺正常服務器,請求它生成一個正常系統上最新版本與恢復版本的增量升級數據,這樣的數據量不會很大,而且不需要象基于操作的同步那樣逐步進行,同步效率非常高,因此可以大大提高恢復速度。同步到正常系統的最新版本后,然后就按照上述第 2 條的情況進行同步數據文件的同步。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 化隆| 汽车| 淳化县| 甘德县| 包头市| 荣成市| 获嘉县| 永川市| 安庆市| 普兰店市| 阜阳市| 太保市| 鹤山市| 余姚市| 铜梁县| 北安市| 马龙县| 桦南县| 武隆县| 玉门市| 东阿县| 黄骅市| 姜堰市| 威远县| 广西| 达拉特旗| 大庆市| 齐齐哈尔市| 建德市| 新余市| 诸暨市| 广德县| 金坛市| 江都市| 和林格尔县| 屯留县| 甘肃省| 修水县| 阜平县| 江北区| 赤壁市|