前言
本文,要向大家介紹微軟的「軟體定義儲存 (Software-Defined Storage,SDS)」技術,它是從 Windows Server 2016 TP2 技術預覽版本開始內建,並且是由 Windows Server 2012 R2 當中的「Storage Space」技術演化而來,在 Windows Server 2016 當中稱之為「Storage Spaces Direct (S2D)」。事實上,目前的微軟 SDS 技術名稱 Storage Spaces Direct,在 Windows Server vNext 開發時期稱之為「Storage Spaces Shared Nothing」。接下來,要向大家介紹在 Microsoft S2D 技術當中,最重要的底層運作機制「SSB(Software Storage Bus)」。
SSB (Software Storage Bus) 簡介
- 負責在 S2D Cluster 當中,串起所有伺服器儲存資源的「虛擬儲存匯流排 (Virtual Storage Bus)」運作機制。
- 它可以讓「每台」叢集節點,彼此之間能夠互相看到在此叢集當中「所有」的硬碟。
- 在 S2D Cluster 當中,每台叢集節點有二個主要運作元件 ClusPort 及 ClusBlft,其中「ClusPort」元件達成 Virtual HBA 的功能,允許叢集當中每台叢集節點互相連接彼此的硬碟。而「ClusBlft」元件則是整合每台叢集節點的硬碟及 Enclosures,並與 ClusPort 協同運作。
圖片來源: TechNet Blogs - clausjor - Storage Spaces Direct - Under the hood with the Software Storage Bus
S2D 採用 SMB 3 協定進行資料傳輸
- 在 S2D 叢集當中,採用 SMB 3 協定進行 S2D 運作環境的資料傳輸用途,並且搭配 SMB Multichannel 及 SMB Direct (RDMA) 機制達到傳輸流量負載平衡及容錯移轉,同時還能降低主機工作負載。
- 採用「具名執行個體 (Named Instance)」機制,分隔 S2D 叢集當中的每台叢集節點,同時結合 CSVFS 機制提供給 SMB Client 進行存取及額外的彈性。
- 整合 SMB Multichannel 及 SMB Direct 機制進行資料傳輸,其中「SMB Multichannel」機制為整併多張網路介面卡,以提供更高的吞吐量及彈性(負載平衡及容錯移轉),而「SMB Direct (RDMA)」支援 iWARP / RoCE,以降低 CPU 在處理網路 I/O 的工作負載,同時降低整個硬碟裝置的延遲時間。
SSB 頻寬管理機制
SSB 採用下列三種不同的演算法機制,達成叢集中每台叢集節點能夠平均取得資源,同時在 IO 表現上也相對突出的目的。- SSB 採用「公平存取演算法 (Fair Access Algorithm)」,確保每台叢集節點都可以存取儲存資源,避免某台叢集節點運作異常影響叢集中其它節點的運作。
- SSB 同時也採用「IO 優先順序演算法 (IO Prioritization Algorithm)」,確保 VM 虛擬主機當中「應用程式 IO (Application IO)」能夠優先於「系統 IO (System IO)」。
- SSB 採用「去隨機化 IO 演算法 (De-randomizes IO Algorithm)」,簡單來說,在 VM 虛擬主機當中的 IO 工作負載,雖然都是「隨機 IO (Random IO)」的工作負載居多,但是此演算法會儘量將 Random IO 轉換成「循序 IO 模式 (Sequential IO Pattern)」,以便在某些程度上能提升整體 IO 效能。
SSB 快取機制
SSB 的快取機制稱之為「SBC (Storage Bus Cache)」,必須在「叢集 (Cluster)」當中啟用,當順利啟用成功後便會在「每台 (per Node Cache)」叢集節點當中運作。SBC 機制與系統中定義的 Storage Pools 及 Virtual Disks 機制並不相干。因為,SBC 機制座落在 Virtual Disk 之下因此可以提供容錯機制,並且透過「複製寫入資料」給其它叢集節點達到提供快取機制的彈性。
SBC 機制會辨別在叢集節點當中,哪些儲存裝置為「快取裝置 (Caching Devices)」哪些為「儲存裝置 (Capacity Devices)」。其中,快取裝置 (Caching Devices) 顧名思義便是擔任儲存裝置的快取,簡單來說就是建立成「混合式磁碟 (Hybrid Disks)」的運作模式。
圖片來源: TechNet Blogs - clausjor - Storage Spaces Direct - Under the hood with the Software Storage Bus
當 SBC 機制定義好,哪些儲存裝置為快取及儲存空間用途之後,便會將儲存裝置以「輪詢 (Round-Robin)」的方式綁定到快取裝置上。日後,當快取裝置發生故障損壞事件時,便會重新進行儲存裝置對應及綁定的動作。
從下列表格中可以了解到,當 SBC 機制運作在「混合式環境 (SSD + HDD)」時,那麼 SBC 便會負責資料的「Read / Write Cahce」,若是採用「All Flash 環境 (NVMe SSD + SATA SSD)」的話,那麼 SBC 便會負責資料的「Write Cahce Only」。但是,若環境為「All NVMe」或「All SATA SSD」的話,那麼必須要「停用 (Disable)」SBC 機制。
表格來源: TechNet Blogs - clausjor - Storage Spaces Direct - Under the hood with the Software Storage Bus
預設情況下,被 SBC 機制辨別為快取裝置的磁碟,將會建立一個「32 GB」的特殊分割區,其餘可用空間則成為 SBC 的快取空間,這 32 GB 的分割區是用來儲存「Storage Pool 及 Virtual Disk」的「中繼資料 (Metadata)」之用。
此外,每當 SBC 機制管理「1 TB」的快取空間時,便需要消耗該台叢集節點「10 GB」的記憶體空間。舉例來說,當一台叢集節點擁有「4 顆 800 GB SSD 固態硬碟」時,便需要消耗該台叢集節點「32 GB」的記憶體空間。
參考資源
- TechNet Blogs - clausjor - Storage Spaces Direct - Under the hood with the Software Storage Bus
- TechNet Blogs - clausjor - Storage Spaces Direct
- TechNet Library - Storage Spaces Direct in Windows Server 2016 Technical Preview
- TechDays Taiwan 2015 - 軟體定義儲存 (Software-Defined Storage): 以 Windows Server 打造高成本效益的儲存方案