網管人 197 期 - 啟用內建 SBC 機制單機打造高效軟體定義儲存



網管人雜誌

本文刊載於 網管人雜誌第 197 期 - 2022 年 6 月 1 日出刊,NetAdmin 網管人雜誌 為一本介紹 Trend Learning 趨勢觀念、Solution Learning 解決方案、Technology Learning 技術應用的雜誌,下列筆記為本站投稿網管人雜誌獲得刊登的文章,網管人雜誌於每月份 1 日出刊您可於各大書店中看到它,或透過城邦出版人讀者服務網進行訂閱。





本文目錄






前言

當企業和組織嘗試建立「雲端原生」(Cloud Native)的各項應用時,卻經常會忽略「雲端基礎架構」(Cloud Infrastructure)的重要性,舉例來說,由於雲端基礎架構效能不佳,導致上層的應用中,雖然已經將應用服務拆分為多台 VM 虛擬主機或多個容器或多項微服務,卻因為雲端基礎架構效能不佳,導致各項服務之間溝通緩慢,進而造成整體回應時間過長或等候逾時等問題。

此外,對於中小型企業和組織來說,在 IT 預算並不充足的情況下,經常難以建構完整的雲端基礎架構,舉例來說,擔任運算資源的伺服器數量不多、無法配置高階儲存設備、無法建構 HCI 超融合基礎架構或 SDS 軟體定義儲存環境……等。

因此,在本文中將說明和實戰演練,如何透過最新 Windows Server 2022 作業系統中,內建的「儲存匯流排快取」(Storage Bus Cache,SBC)機制,讓「單台主機」(Standalone Server)輕鬆建構出軟體定義儲存環境,為上層各項雲端原生應用程式,提供充足的儲存效能讓上層的 VM 虛擬主機、容器、微服務……等應用,能無後顧之憂盡情發揮效能和靈活性,讓有限的 IT 預算發揮最大的優勢。





SBC 儲存匯流排快取運作架構

在舊版的 Windows Server 運作環境中,獨立伺服器並無法使用 Storage Spaces Direct 相關技術,必須整合多台 Windows Server 並建構容錯移轉叢集後才能使用。

現在,最新的 Windows Server 2022 版本中,單台的獨立伺服器只要硬體配置時,採用混合式的儲存媒體裝置,例如,SSD + HDD 或 NVMe + HDD 的情況下,便能啟用 SBC 儲存匯流排快取機制,讓獨立伺服器能夠大幅提升資料讀取和寫入效能(如圖 1 所示)。

圖 1、獨立伺服器支援 SBC 儲存匯流排快取機制運作架構示意圖





實戰演練 - 獨立伺服器啟用 SBC 快取機制

在本小節實戰演練的部份,將採用最新 Windows Server 2022 伺服器版本,除了安裝 Window Server 2022 作業系統的硬碟之外,額外配置「4 個」容量 300GB 的 SSD 固態硬碟,以及「6 個」容量 1TB 的 HDD 機械式硬碟,這 10 個不同儲存媒介的硬碟裝置,將會透過 Storage Spaces 儲存堆疊技術融合在一起,然後啟用 SBC 儲存匯流排快取機制,達到大幅提升資料讀取和寫入儲存效能,同時具備高靈活性和高可用性的目標。

值得注意的是,當獨立伺服器啟用 SBC 儲存匯流排快取機制時,硬碟類型僅支援混合式儲存架構,例如,NVMe + HDD 或 SSD + HDD(如圖 2 所示),不支援採用 All-Flash 儲存架構,例如,全部 NVMe 或 SSD 或 NVMe + SSD(如圖 3 所示)。





安裝容錯移轉叢集功能

首先,雖然是獨立伺服器的運作環境,但是在啟用 SBC 儲存匯流排快取機制之前,必須為 Windows Server 2022 安裝「容錯移轉叢集」伺服器功能才行,因為系統需要叢集元件才能順利啟用 SBC 儲存匯流排快取機制。

請登入主機後依序點選「Server Manager > Manage > Add Roles and Features > Role-based or feature-based installation > Failover Clustering」項目,進行伺服器功能的安裝即可(如圖 4 所示),或執行 PowerShell 指令「Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools」進行安裝作業。

圖 4、為獨立伺服器安裝容錯移轉叢集伺服器功能

值得注意的是,雖然為獨立伺服器安裝容錯移轉叢集伺服器功能,但是它並不能加入任何一個容錯移轉叢集中,也就是它不能成為任何一個容錯移轉叢集的成員節點主機。

簡單來說,獨立伺服器要能成功啟用 SBC 儲存匯流排快取機制,必須滿足三個條件分別是,採用 Windows Server 2022 伺服器版本,採用混合式儲存架構、安裝容錯移轉叢集伺服器功能。倘若,主機有下列任一情況出現時,便無法成功啟用 SBC 儲存匯流排快取機制:
  • 採用 Windows Server 2019 或更舊的伺服器版本。
  • 採用 All-Flash 全快閃儲存架構。
  • 主機已經加入容錯移轉叢集成為叢集中的成員節點主機。



調整部署模式和快取百分比

在正式啟用 SBC 儲存匯流排快取機制之前,請先在 PowerShell 視窗中執行「Get-PhysicalDisk | Sort-Object Size」指令,確認獨立伺服器額外配置的儲存裝置(如圖 5 所示),可以看到總共配置 4 個 300GB 的 SSD 固態硬碟,以及 6 個 1TB 的 HDD 機械式硬碟,並且除了安裝 Windows Server 2022 的系統磁碟之外,其餘額外配置的硬碟在「CanPool」欄位皆為「True」,表示這些硬碟稍後可以加入 Storage Pool 當中。

圖 5、獨立伺服器額外配置 4 個 300GB 的 SSD 固態硬碟和 6 個 1TB 的 HDD 機械式硬碟

接著,執行「Get-StorageBusCache」指令,查詢系統預設的 SBC 儲存匯流排快取進階參數值內容,例如,部署模式和快取百分比(如圖 6 所示)。因為,一旦獨立伺服器啟用 SBC 儲存匯流排快取機制後,這些進階參數值內容系統將會自動鎖定且無法進行任何變動,所以管理人員倘若希望調整進階參數值內容的話,必須在啟用 SBC 儲存匯流排快取機制之前進行調整才行。

圖 6、查詢系統預設的 SBC 儲存匯流排快取進階參數值內容

原則上,資料存取類型為一般用途時,管理人員無須調整任何系統預設值,倘若需要調整也建議僅調整部署模式和共用取快百分比即可,其它進階欄位並不建議調整。下列為 SBC 儲存匯流排快取進階參數值內容各項欄位說明:
  • ProvisionMode: 部署模式,在 SBC 儲存匯流排快取架構中共支援兩種部署模式,分別是「共享」(Shared)「快取」(Cache),系統預設值為採用「共享」部署模式。簡單來說,採用共享部署模式時,資料快取空間僅會佔用較快媒體裝置,例如,SSD 或 NVMe 的固定百分比,而採用快取部署模式時,則資料快取空間會佔用較快媒體裝置的所有儲存空間。管理人員可以執行 PowerShell 的「Set-StorageBusCache -ProvisionMode Cache」指令,即可調整為快取部署模式。
  • SharedCachePercent: 共用快取百分比,當採用共享部署模式時此進階參數值才會套用生效,系統預設值為「15%」,管理人員可以調整的百分比範圍為「5% - 90%」。值得注意的是,當管理人員規劃採用「鏡像加速同位元」(Mirror-Accelerated Parity)磁碟區時,共用快取百分比不建議使用超過「50%」,因為必須快取資料和鏡像層級之外必須保持平衡,否則儲存比例失衡的情況下將會影響儲存效能造成反效果。舉例來說,管理人員可以執行 PowerShell 的「Set-StorageBusCache -SharedCachePercent 30」指令,將共用快取百分比調整至 30%。
  • CacheMetadataReserveBytes: 中繼資料儲存空間,當採用快取部署模式時此進階參數值才會套用生效,系統預設建立 32GB 儲存空間,用途為存放屆時 Storage Pool 和 Virtual Disk 等中繼資料。
  • CacheModeHDD: HDD 儲存層級快取模式,系統預設採用「ReadWrite」組態設定,表示允許 HDD 儲存層級快取資料的方式為讀取和寫入。當管理人員規劃採用「簡單空間」(Simple Space)磁碟區時,則快取資料方式支援「ReadWrite」或「WriteOnly」類型。
  • CacheModeSSD: SSD 儲存層級快取模式,系統預設採用「WriteOnly」組態設定,表示 SSD 儲存層級快取資料的方式為寫入。
  • CachePageSizeKBytes: 快取資料大小,系統預設為「16 KB」,管理人員可以視資料型態調整大小為「8 KB、16 KB、32 KB、64 KB」。
  • Enabled : 確認 SBC 儲存匯流排快取機制,是否為啟用狀態。



啟用 SBC 儲存匯流排快取機制

獨立伺服器運作環境準備完畢,並且管理人員依據需求調整 SBC 儲存匯流排快取進階參數值內容後,請執行 PowerShell 的「Import-Module StorageBusCache」指令,匯入 SBC 儲存匯流排快取 Cmdlet。

接著,執行「Enable-StorageBusCache」指令,系統將會自動執行多個動作,以便將 SSD 固態硬碟和 HDD 機械式硬碟融合在一起,包括,將所有硬碟融合後建立 Storage Pool、自動為較快的 SSD 固態硬碟和較慢的 HDD 機械式硬碟建立儲存層級、新增並啟用 SBC 儲存匯流排快取機制……等。

順利啟用 SBC 儲存匯流排快取機制後,執行「Get-StoragePool」指令,查看系統自動建立的 Storage Pool 資訊,並再次執行「Get-PhysicalDisk」指令,可以發現融合後的 SSD 固態硬碟和 HDD 機械式硬碟,在「Number」欄位數值改變為大於 500,表示該儲存裝置已經被 SBC 儲存匯流排快取機制,宣告為使用中的儲存裝置,並且「CanPool」欄位也從原本的 True 改變為「False」(如圖 7 所示)。
倘若採用快取部署模式時,Usage 欄位中 SSD 固態硬碟將會改變為「Journal」。
圖 7、啟用 SBC 儲存匯流排快取機制

管理人員可以再次執行「Get-StorageBusCache」指令,確認目前 SBC 儲存匯流排快取的部署模式,以及「Enabled」欄位是否為「True」,確認系統已經正確啟用。此外,管理人員應該好奇,6 個 HDD 機械式硬碟如何使用 SSD 固態硬碟,從剛才的「Get-PhysicalDisk」指令結果中,可以看到 SSD 固態硬碟的編號為「506 - 509」,而 HDD 機械式硬碟的編號為「500 - 505」,請執行「Get-StorageBusBinding」指令,可以看到哪個 HDD 機械式硬碟使用哪個 SSD 固態硬碟,例如,本文實作環境中,編號 500 的 HDD 機械式硬碟搭配使用編號 509 的 SSD 固態硬碟(如圖 8 所示)。

圖 8、確認 SBC 儲存匯流排快取啟用狀態和檢查儲存裝置繫結狀態



建立磁碟區

現在,管理人員可以依據需求,建立不同用途的磁碟區,在 SBC 儲存匯流排快取儲存架構中,可以建立具備災難復原機制的「鏡像加速同位」,但快取類型僅「讀取」的磁碟區,或是建立無法容忍任何硬碟故障的「Simple」,但快取類型支援「讀取和寫入」的磁碟區。

在本文實作環境中,鍵入 PowerShell 指令「New-Volume –FriendlyName "Mirror-Parity" -FileSystem ReFS -StoragePoolFriendlyName Storage* -StorageTierFriendlyNames MirrorOnSSD,ParityOnHDD -StorageTierSizes 200GB,800GB」,建立鏡像加速同位類型且儲存空間為 1TB 的磁碟區,其中佔用 200GB 位於 SSD 固定態硬碟的鏡像層,以及 800GB 位於 HDD 機械式硬碟中的同位層所組成。

接著鍵入 PowerShell 指令「New-Volume -FriendlyName "TestVolume" -FileSystem ReFS -StoragePoolFriendlyName Storage* -ResiliencySettingName Simple -Size 1TB」,建立 Simple 類型儲存空間為 1TB 的磁碟區,具備讀取和寫入快取機制,但無法容忍任何硬碟發生故障。

完成建立兩種不同類型的磁碟區後,鍵入 PowerShell 指令「Get-VirtualDisk」,查詢磁碟區健康情況和相關資訊,可以看到建立的 1TB 鏡像加速同位類型磁碟區,其實在 Storage Pool 中佔用 1.76TB 儲存空間,這也是為何鏡像加速同位類型磁碟區具備災難復原的原因(如圖 9 所示)。

圖 9、建立鏡像加速同位類型和 Simple 類型的磁碟區

值得注意的是,剛才建立的磁碟區並未指定磁碟區代號,為了稍後方便測試災難復原機制,可以透過 PowerShell 指令,先以「Get-Disk」查詢要指定磁碟機代號的磁碟,接著以「Get-Partition -DiskNumber」查詢磁碟中的分割區,之後執行「Set-Partition -NewDriveLetter」指令,即可指定磁碟機代號,最後以「Get-Volume」指令確認磁碟機代號是否套用生效,可以看到本文實作環境中指派,鏡像加速同位類型磁碟區採用「M」而 Simple 類型採用「S」磁碟機代號(如圖 10 所示)。

圖 10、為鏡像加速同位和 Simple 指定磁碟機代號



擴充磁碟區儲存空間

因應企業和組織不斷成長的專案需求,一開始建立的磁碟區儲存空間可能會發生不足的情況。此時,管理人員能夠輕鬆透過 PowerShell 指令,擴充原有的磁碟區儲存空間,值得注意的是鏡像加速同位類型和 Simple 類型的磁碟區,這兩種不同類型的磁碟區作法可能稍有不同,並且了解儲存架構的階層,從上層的「Volume > Partition > Disk > Virtual Disk」到底層的「Storage Tier」,這將有助於擴充磁碟區儲存空間工作任務(如圖 11 所示)。


首先,執行「Get-VirtualDisk」指令,了解磁碟區的 FriendlyName,接著搭配「Get-StorageTier」指令,檢查需要擴充儲存空間的磁碟區是否使用儲存層,在本文實作環境中,Simple 類型磁碟區便沒有使用儲存層,而鏡像加速同位類型磁碟區則有使用儲存層(如圖 12 所示)。

圖 12、檢查需要擴充儲存空間的磁碟區是否使用儲存層

針對沒有使用儲存層的磁碟區,可以直接使用「Resize-VirtualDisk -Size」指令擴充磁碟區儲存空間。針對 1TB 的 Simple 類型磁碟區,先將底層的 VirtualDisk 儲存空間進行擴充,請執行「Get-VirtualDisk Simple | Resize-VirtualDisk -Size 1.5TB」指令,即可看到 VirtualDisk 已經從原本的 1TB 擴充為 1.5TB,但磁碟區的部份仍顯示為 1TB 儲存空間(如圖 13 所示)。
擴充 VirtualDisk 儲存空間時,系統將會針對 Disk 進行擴充,管理人員可以執行「Get-VirtualDisk Simple | Get-Disk」指令進行確認。
圖 13、擴充 Simple 類型磁碟區的 VirtualDisk 儲存空間

順利擴充 VirtualDisk 儲存空間後,可以透過「Get-Partition | Where PartitionNumber -Eq 2」指令,指定磁碟區中的 PartitionNumber =2 進行分割區擴充儲存空間的工作任務,最後執行「Get-Volume S」指令,確認 Simple 類型磁碟區已經順利擴充至 1.5TB 的儲存空間(如圖 14 所示),並且資料讀取和寫入也正常無誤。

圖 14、順利擴充 Simple 類型磁碟區至 1.5TB 的儲存空間

和擴充 Simple 類型磁碟區工作任務類似,只是在擴充 VirtualDisk 的部份,必須先針對鏡像加速同位類型磁碟區的儲存層進行擴充之後,才進行分割區擴充的工作任務。首先,執行「Get-VirtualDisk Mirror-Parity | Get-StorageTier」指令,確認每個儲存層級的儲存空間大小,在本文實作環境中,僅將 HDD 機械式硬碟的儲存空間,由原本的 800GB 擴充為 1TB 儲存空間,至於 SSD 固態硬碟儲存層則保持原有的 200GB,之後再執行「Resize-Partition」指令擴充鏡像加速同位類型磁碟區分割區,最後執行「Get-Volume M」指令,確認鏡像加速同位類型磁碟區已經順利擴充至 1.2TB 的儲存空間(如圖 15 所示),並且資料讀取和寫入也正常無誤。
執行擴充 VirtualDisk 儲存空間之前,可以透過「Get-StorageTierSupportedSize」指定,確認 Storage Pool 還有多少儲存空間能夠執行擴充工作任務。
圖 15、順利擴充鏡像加速同位類型磁碟區至 1.2TB 的儲存空間



擴充 Storage Pool 儲存空間

當磁碟區空間不足時,管理人員可以透過上述 PowerShell 指令,線上擴充鏡像加速同位和 Simple 類型磁碟區儲存空間。同樣的,最底層 Storage Pool 儲存空間不足時,可以為 Windows Server 2022 主機,額外增加實體 SSD 固態硬碟或 HDD 機械式硬碟,以便擴充底層 Storage Pool 儲存空間。

在本文實作環境中,為 Windows Server 2022 主機再新增 1 個 300GB 的 SSD 固態硬碟,以及 2 個 1TB 的 HDD 機械式硬碟,執行「Get-StoragePool」指令,確認目前 Storage Pool 的整體空間為 6.99TB,並且透過「Get-PhysicalDisk」指令,可以看到稍後要加入 Storage Pool 的 3 個硬碟,並且 CanPool 欄位為「True」(如圖 16 所示)。

圖 16、準備將新增的 SSD 固態硬碟和 HDD 機械式硬碟加入 Storage Pool

執行「Update-StorageBusCache」指令,系統便會自動將 SSD 固態硬碟和 HDD 機械式硬碟,加入至 Storage Pool 整體儲存空間當中,完成後再次執行「Get-StoragePool」指令,可以看到 Storage Pool 儲存空間,由原本的 6.99TB 擴充為「9.23TB」,並且所有的硬碟 CanPool 欄位皆為「False」(如圖 17 所示)。

圖 17、順利擴充 Storage Pool 儲存空間

實務上,需要擴充 Storage Pool 儲存空間時,表示原有的硬碟中儲存空間已經耗盡,新加入的硬碟則是許多儲存空間,這表示資料的分佈並不平均會影響資料讀取和寫入效能,建議管理人員在加入新的硬碟之後,執行「Get-StoragePool Storage* | Optimize-StoragePool」指令,針對 Storage Pool 執行資料「最佳化」(Optimize)「重新平衡」(Rebalance)的工作任務。

順利加入新增的 SSD 固態硬碟和 HDD 機械式硬碟後,執行「Get-StorageBusBinding」指令,再次查看 SSD 固態硬碟和 HDD 機械式硬碟的對應關係(如圖 18 所示)。

圖 18、查看 SSD 固態硬碟和 HDD 機械式硬碟的對應關係

值得注意的是,新增硬碟並不會影響資料「讀取快取」的部份,因為先前執行「Enable-StorageBusCache」指令後,系統便會自動鎖定進階功能,無法變更部署模式、共用快取百分比、快取模式和對應關系……等,管理人員只能透過「Remove-StorageBusBinding」和「New-StorageBusBinding」重新指定快取模式對應關系,但是將會遺失現有的「讀取快取」。



災難復原測試

無論儲存架構多麼靈活並具備高效能,倘若無法承受災難事件,例如,SSD 固態硬碟或 HDD 機械式硬碟故障損壞,相信無法被企業和組織所接受。

現在,針對 Windows Server 2022 主機,分別隨機移除 1 個 SSD 固態硬碟和 2 顆 HDD 機械式硬碟,模擬硬碟發生故障損壞的情況,驗證剛才建立的鏡像加速同位類型和 Simple 類型,是否能夠承受災難事件資料不致遺失或損壞,並驗證災難事件發生後磁碟區能否繼續進行資料讀取和寫入等動作。

執行「Get-StoragePool」指令,可以看到 Storage Pool 的健康狀態欄位 OperationalStatus 和 HealthStatus,從原本的「OK、Healthy」轉變成目前發生災難事件的「Degraded、Warning」,表示雖然有硬碟發生故障損壞,但是 Storage Pool 整體仍然能夠正常運作。

執行「Get-VirtualDisk」指令,可以看到 VirtualDisk 健康狀態欄位的轉變,其中 Simple 類型磁碟區從原本的「OK、Healthy」變為「No Redundancy、Unhealthy」,並且磁碟機「S :」已經無法存取,而鏡像加速同位類型磁碟區從原本的「OK、Healthy」變為「Degraded,Incomplete、Warning」,並且磁碟機「M :」仍然能夠正常存取進行資料讀取和寫入,表示鏡像加速同位類型具備災難復原的能力,而 Simple 類型則無。

最後,執行「Get-PhysicalDisk」指令,可以看到發生故障損壞的實體硬碟,除了硬碟代號消失之外,在健康狀態欄位的轉變從原本的「OK、Healthy」,轉變為「Lost Communication、Warning」狀態(如圖 19 所示)。

圖 19、查詢 Storage Pool、VirtualDisk、實體硬碟健康狀態

後續,管理人員只要為 Windows Server 2022 主機,更換故障損壞的實體硬碟,然後確認系統偵測到新加入的實體硬碟,並且 CanPool 欄位為「True」之後,再次執行「Update-StorageBusCache」指令,即可成功更換故障損壞的實體硬碟,並將新增的實體硬碟加入 Storage Pool 儲存空間內。





結語

透過本文的深入剖析和實戰演練後,相信管理人員對於最新 Windows Server 2022 作業系統中,內建的 SBC 儲存匯流排快取機制,確實能為中小型的企業和組織,以最少的 IT 預算提供高靈活性和高儲存效能方案。