Windows Server 軟件定義存儲—存儲空間IO的分發

 SDS不只是一個軟件和硬件解耦的過程,更是一個存儲數據平面和控制平面解耦的過程。一樣,Windows Server SDS也是一個數據平面和控制平面解耦的過程,結構後分爲3個部分:存儲池、存儲空間和服務層。本文咱們主要講述Windows Server 存儲空間I/O的分發,看看Windows Server SDS控制平面SDS如何對數據進行處理。咱們將話題一分爲二來看看不一樣層次的I/O分發:數據庫

(1)存儲空間I/O在羣集節點間的分發緩存

(2)存儲空間I/O在節點硬盤間的分發bash

本文咱們就這兩種I/O分發進行討論,在進入正題前,咱們先來了解在WindowsServer 存儲空間中常常用到的幾個技術,這幾個技術對咱們認識WindowsServer 存儲空間的數據讀寫有很大的幫助。因此在講Windows Server 存儲空間的I/O分發以前,咱們先逐個認識下這3個技術:服務器

  1. 存儲空間列數(# of Column)網絡

  2. CSV組件和I/O分類分佈式

  3. 存儲分層和數據熱度收集ide

 

存儲空間列數工具

存儲空間的列用來組織I/O分發到硬盤,列相似於一個虛擬的通道,和RAID的分條寬度類似。可是存儲空間分條數據寫入列和RAID分條後往硬盤寫入不一樣,存儲空間分條的數據先找到列這個通道,再寫到列裏的硬盤,寫入列數體現了數據寫入通道數。每一個列通道里包含一塊到三塊不等的硬盤,列和硬盤數之比稱之爲列/硬盤數比,如圖1所示。佈局

                             wKiom1ivuJLBOpSUAABaJQojaCA052.jpg-wh_50

圖1ui

列/硬盤數比以及最大和最小列數因存儲空間佈局不一樣而不一樣,一般,簡單佈局的存儲空間有一塊硬盤,因此列:硬盤爲1:1, 雙重鏡像的存儲空間有2塊硬盤,列:硬盤比爲1:2,三重鏡像的列:硬盤比爲1:3。列數並不是一成不變的,在構建存儲池之後,存儲池根據實際狀況將列數調整爲自動或者固定值,可使用這個PowerShell命令查看存儲空間列數。

 條帶交錯大小(Interleave,和RAID strip size相似)和列數決定着分條尺寸。列數並不是一成不變的,在構建存儲池之後,存儲池根據實際狀況將列數調整爲自動或者固定值,可使用以下示例PowerShell命令查看存儲空間列數。

PS C:\> Get-StoragePool-FriendlyName <your storage pool name> | Get-ResiliencySetting -Name Mirror |ft Name,NumberofColumnsDefault

 若是在建立存儲空間的時候沒有特別指明列數,這個列數就會是自動(auto),若是是auto的話,存儲空間會按照環境自行調整,column也有個推薦的計算公式。所以咱們能夠本身修改列數:

PS C:\> Get-StoragePool-FriendlyName <your storage pool name> | Get-ResiliencySetting -Name Mirror |Set-ResiliencySetting -NumberofColumnsDefault <# of column you desired>


 CSV結構

接下來咱們看一下CSV的結構和組件,首先看下CSV的節點分類:

硬盤所掛載的節點稱之爲協調者節點,沒有CSV硬盤掛載的節點稱之爲數據服務器,協調者節點同時也能夠是數據服務器。節點又分爲SMB服務器和SMB客戶端,SMB客戶端一般指的是沒有物理鏈接到存儲的節點。在分佈式存儲中,SMB客戶端一般不提供和協調資源,更多的是使用資源。聽起來,SMB Client節點就像小朋友去野炊的時候,那個不帶米、不帶菜也不帶調料,只帶碗筷來吃飯的小朋友。圖2所示的這張圖中的節點1和節點2都是協調者節點,節點3是數據服務器,節點1和節點2也多是數據服務器,由於會發生物理鏈接的故障;節點1和節點2一般是SMB候選服務器,而節點3是SMB客戶端,三個節點共同完成應用數據的讀寫。

wKioL1ivuSuTD4OsAAKNUJtzMi4882.jpg-wh_50

 圖2

 早期的Windows Server,好比2008的羣集磁盤是經過SCSI SPC-3協議爲磁盤全部者節點保留控制權的,而CSV能夠保證多個節點同時讀寫CSV, 它怎麼作到的呢?由於Windows Server 2008 R2及後續版本的CSV增長了編排層,包括如下幾個編排工具來完成I/O的分發:

(1)CSVFS文件系統

(2)CsvNsFlt過濾器

(3)CsvFlt過濾器

這些個過濾器和文件系統給咱們帶來訪問本地卷相近的體驗,你們用過CSV的都應該能感覺獲得,就是C:\ClusterStorage\Volume,而且讓NTFS/ReFS卷能夠被多臺服務器同時訪問,每一個協調者節點都具備CSVFS文件系統和CsvNsFlt/CsvFlt編排過濾器。在圖2中咱們能夠看到CSV具有多個I/O分發「管道」,應用訪問CSV卷時,數據經過這些管道進行傳輸,這幾個I/O分發「管道」包括:

(1)直接I/O

(2)文件系統重定向I/O

(3)塊級別重定向I/O

同時,不管是協調者節點仍是數據服務器節點,其所包含的過濾器以及CSVFS/NTFS/卷/硬盤均可以用高度(Altitude)來標識,咱們可使用fltmcinstances這個命令來查看Windows Server過濾器和其餘組件的高度,如圖3所示。

wKioL1ivuVCy3s5ZAAGoGZiLvMs719.jpg-wh_50

圖3

在寫入數據時候順序一般是從上往下發,就好像水流從高處往地處流同樣。固然,水能夠藉助水泵從低處往高處走,一樣CSV的I/O能夠藉助SMB協議從低處往高處傳輸。CSV組件裏的過濾器以及CSVFS/NTFS/卷/硬盤用高度(Altitude)來標識,你們再看看圖2,是否是組件和過濾器分佈得有上有下。一般各個實例的高度按照從高到低排列爲:CSVFS>NTFS>卷>硬盤,I/O在節點間能夠從低層過濾器實例發往高層過濾器實例,也即I/O重定向。總而言之,在CSV裏,I/O的路徑包括:

    (1) I/O從水平較高的層往水平低的層下發

    (2) I/O在節點間能夠從低層過濾器實例發往高層過濾器實例,也即I/O重定向

    (3) 各個實例的高度按照從高到低排列爲:CSVFS>NTFS>卷>硬盤

CSV這些個文件系統和過濾器處理不一樣的I/O: CsvFlt 做用於文件級I/O定向、CsvNsFlt 做用於塊級別I/O定向、CSV文件系統(CSVFS)做用於直接I/O。接下來咱們看看CSV的幾種I/O的特色,首先看看直接I/O,直接I/O指的是不會經過網絡傳輸的讀寫I/O,而是從CsvFs經過CsvVbus直接到硬盤堆棧。圖4所示的節點1和節點2物理鏈接到共享磁盤,它們能夠徹底不使用網絡而是直接發送讀寫到磁盤,節點3由於沒有鏈接到存儲於是沒法看到共享磁盤,因此不能使用直接I/O,可是節點3屬於羣集,因此節點3使用重定向I/O進行讀寫。

wKioL1ivugDhTTcGAAGoGZiLvMs270.jpg-wh_50

圖4

 再看看文件級重定向I/O,文件系統重定向I/O發生在節點文件系統之間,節點間經過SMB協議傳輸數據,如圖5所示,協調者節點2的CsvFS將數據發送到CsvFlt再到NTFS,而數據服務器節點1和節點3經過SMB協議將元數據發送給協調者節點2。須要強調一點的是,文件級的I/O重定向的路徑和CSV元數據更新的路徑是一致的(咱們這裏所描述的元數據指的是除了讀寫之外的全部操做,好比建立、關閉、重命名、刪除文件,修改文件屬性、修改文件大小等)。

wKiom1ivuiPinasuAAG-3G2lqqE093.jpg-wh_50

圖5

 最後看看塊級重定向I/O,塊級重定向I/O從CSV卷管理器發起I/O傳輸,節點間經過SMB協議傳輸數據。塊級重定向I/O徹底繞過CSV NTFS這一層直接訪問NTFS下面的硬盤(就像直接I/O繞過卷這一層直接訪問硬盤同樣)。協調節點不使用CsvFs來傳輸數據,而是直接經過CsvNsFlt把數據傳輸給硬盤,如圖6所示。如下3種狀況會發生塊級別重定向I/O:

  • 圖中節點3沒有物理鏈接到硬盤,因此可能會使用塊級別的重定向I/O

  • 節點1雖然物理鏈接到硬盤,可是也有可能發生重定向I/O,好比硬盤控制卡、鏈路故障等緣由致使I/O失敗的時候。這種狀況下,CsvVbus首先會嘗試發送I/O給硬盤,若是發送不成功,那麼就會經過塊級別重定向I/O發送給協調者節點。

  • WindowsServer 存儲空間。

wKioL1ivujqyTF7OAAG0Odx20H0671.jpg-wh_50

圖6

 

存儲分層和數據熱度收集

講完了CSV組件和I/O分發的管道,以及3種典型的I/O類型,接下來咱們講第三個概念:存儲分層和數據熱度收集。

Windows Server 內置的存儲分層管理服務(Storage Tiers Management Service)進行分層,默認,天天晚上1點啓動冷熱數據移動,在計劃任務程序裏自動執行,固然也能夠手動執行;使用和碎片整理相同的defrage命令完成;存儲分層服務按照1MB的單位分析數據熱度並移動數據到預期的層。那麼你們會問了,熱度怎麼計算和追蹤呢?

存儲空間若是設置了分層,默認會啓用Heatmap(數據熱度收集)。Heat map是數據訪問的總結視圖,它將跟蹤到的數據增長、更新、刪除、查詢、掃描等全部信息歸總到塊級別。其實,Oracle也在使用ILM Heat map對其數據庫進行表級別的跟蹤,這些跟蹤也最終彙總到塊級別。

熱度收集由一個參數控制,它就是TrNH,啓用該標識會將分層的卷設置爲「禁用數據熱度收集」,經過如下命令,就能夠給存儲空間「貼上」TrNH標識,也就禁用掉了Heatmap。

fsutil tiering setflags <卷> /TrNH

經過fsutil tiering clearflags <卷> /TrNH 能夠清除TrNH標識,也即啓用Heatmap

你們能夠打開你的電腦,在命令提示符裏輸入:

fsutil tiering clearflags <卷>

能夠看看是否有TrNH標識,不過你在電腦裏看到這個結果沒有實際意義,由於TrNH針對的分層的存儲空間卷纔有效。

 

存儲分層和數據熱度收集

3個主要概念講完了,接下來就要講存儲空間在節點級I/O分發了。咱們在環境中建立了4個存儲空間,並配置爲CSV, 分別分配給兩個不一樣的羣集節點,2個分層CSV分別使用簡單和鏡像佈局;另外2個不分層的CSV分別使用簡單和鏡像的佈局。如圖7所示。

wKiom1ivuq3hZi36AABhF4XBbSw243.jpg-wh_50

圖7

 而後,咱們使用Get‐ClusterSharedVolumeState查詢CSV狀態,篩選出發生文件級別重定向的I/O,在結果中能夠看到,這裏的兩個CSV基於分層存儲空間,對於全部節點來講都是文件級別的I/O重定向,與存儲空間佈局無關,如圖8所示。

wKioL1ivusCgoxHFAACgJjpQvpA741.jpg-wh_50

圖8

一樣,咱們使用Get‐ClusterSharedVolumeState查詢CSV狀態,篩選出發生塊級別重定向的I/O,在結果中能夠看到,這裏的兩個CSV,對於全部者節點來講是直接I/O,可是對於非全部者節點來講,是塊級別的重定向I/O,並且發生塊級別的重定向I/O的緣由與存儲空間佈局有關,如圖9所示,若是CSV是鏡像佈局的存儲空間,那麼緣由是StorageSpaceNotAttached,若是CSV是簡單佈局的存儲空間,那麼緣由是NoDiskConnectivity。

wKiom1ivus6z8EJsAACnu744vog603.jpg-wh_50

圖9

 關於Windows Server存儲空間I/O的分發方式,咱們能夠小結成下表:


FIL03

FIL04

Tier-Simple

文件系統重定向I/O

文件系統重定向I/O

Tier-Mirror

文件系統重定向I/O

文件系統重定向I/O

Non-Tier-Simple

塊級別重定向I/O

直接I/O

Non-Tier-Mirror

塊級別重定向I/O

直接I/O

 

而進一步來看,除了Windows Server 存儲空間會發生文件級I/O重定向以外,發生文件級I/O重定向的可能緣由還包括:

(1)人爲誤操做重定向模式(CSV重定向狀態在羣集控制檯可見)

(2)不兼容的文件系統過濾器附加到NTFS/ReFS文件系統棧

(3)不兼容的捲過濾器附加在NTFS/ReFS文件系統下

(4)存儲空間設置了分層,啓用了Heatmap(數據熱度收集)

 

發生塊級I/O重定向的可能緣由還包括:

(1)節點沒有物理鏈接到硬盤(NoDiskConnectivity)

(2)存儲空間沒有附加給節點(StorageSpaceNotAttached),一般是由於:

    a. 存儲空間的佈局設置爲鏡像和奇偶校驗

    b. 啓用了回寫緩存的簡單佈局(禁用回寫緩存,則使用直接I/O)


講完節點間的I/O分發,咱們再看硬盤級I/O分發,要結合以前的概念來理解。咱們先看看簡單佈局的存儲空間,列數爲2的配置下,數據如何分發。由於每一個列表明着一個I/O虛擬通道,每一個虛擬通道包含一塊硬盤,數據被條帶化後,由兩個列寫入到各自的一塊硬盤,同時咱們計算出分條尺寸=2*256=512KB,如圖10所示。

wKioL1ivu3ryjFbaAAUKbz-h0X0103.jpg-wh_50 

圖10

鏡像佈局的存儲空間,列數爲2的配置下,數據又如何分發呢?鏡像佈局和簡單、奇偶校驗佈局不一樣的一點是在條帶層底下添加了I/O鏡像層,也即數據複製層,因此雙重鏡像佈局要求每一個列必須包含兩塊硬盤。條帶後的數據寫入列以前在複製層將一份數據複製成兩份,而後將兩份數據分別寫入列的兩塊硬盤。如圖11所示。同時,數據被分條後,儘管寫入硬盤的分條尺寸爲1024KB,可是寫到兩個列的數據都是256KB,分條尺寸=2*256=512KB。


wKiom1ivu9HBH9x0AAqR_hLzrEU774.jpg-wh_50

圖11

固然,能夠類推出2列和三重鏡像,N列和其餘佈局的存儲空間I/O的下發。咱們就再也不一一展開了。

相關文章
相關標籤/搜索