Windows Server 软件定义存储

时间:2022-04-28 03:34:05

 SDS不仅是一个软件和硬件解耦的过程,更是一个存储数据平面和控制平面解耦的过程。同样,Windows Server SDS也是一个数据平面和控制平面解耦的过程,结构后分为3个部分:存储池、存储空间和服务曾。本文我们主要讲述Windows Server 存储空间I/O的分发,看看Windows Server SDS控制平面SDS如何对数据进行处理。我们将话题一分为二来看看不同层次的I/O分发:

(1)存储空间I/O在群集节点间的分发

(2)存储空间I/O在节点硬盘间的分发

本文我们就这两种I/O分发进行讨论,在进入正题前,我们先来了解在WindowsServer 存储空间中经常用到的几个技术,,这几个技术对我们认识WindowsServer 存储空间的数据读写有很大的帮助。所以在讲Windows Server 存储空间的I/O分发之前,我们先逐个认识下这3个技术:

存储空间列数(# of Column)

CSV组件和I/O分类

存储分层和数据热度收集

 

存储空间列数

存储空间的列用来组织I/O分发到硬盘,列类似于一个虚拟的通道,和RAID的分条宽度相似。但是存储空间分条数据写入列和RAID分条后往硬盘写入不同,存储空间分条的数据先找到列这个通道,再写到列里的硬盘,写入列数体现了数据写入通道数。每个列通道里包含一块到三块不等的硬盘,列和硬盘数之比称之为列/硬盘数比,如图1所示。

                            

Windows Server 软件定义存储

图1

列/硬盘数比以及最大和最小列数因存储空间布局不同而不同,通常,简单布局的存储空间有一块硬盘,所以列:硬盘为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客户端,三个节点共同完成应用数据的读写。

Windows Server 软件定义存储

 图2