在部署之前还是需要了解下硬件要求:

https://docs.microsoft.com/zh-cn/windows-server/storage/storage-spaces/storage-spaces-direct-hardware-requirements

其中重点是:

  • 最少 2 台服务器,最多 16 台服务器

  • 对于Storage Spaces Direct元数据,每个服务器上每TB缓存磁盘容量为4 GB RAM,换言之每台服务器上SSD是每1TB需要耗费4G内存

  • 系统磁盘大小不低于200G,一般都是300G作为系统磁盘

  • 小规模测试环境2-3台服务器,用于生产环境4台服务器起

  • SSD必须提供电源中断保护

  • 缓存设备大于等于32GB

  • S2D磁盘链接方式:

    • 直接连接 SATA 驱动器

    • 直连 NVMe 驱动器

    • SAS 驱动器的 SAS 主机总线适配器 (HBA)

    • SATA 驱动器的 SAS 主机总线适配器 (HBA)

    • 不支持: RAID 控制器卡或 SAN (光纤通道、 iSCSI、 FCoE) 存储。 主机总线适配器 (HBA) 卡必须实现简单的传递模式

  • 用于缓存的SSD每台至少2个;容量的SAS每台至少4个

在这里我的测试环境是2台服务器(这里我是利用物理机创建的2台Hyper-V虚拟机,故这2台虚拟机我开启了嵌套虚拟化),每台服务器1个系统磁盘127G,每台配置了2个SSD磁盘和4个HDD磁盘(每一个SSD磁盘为10G大小;每一个HDD磁盘为20G大小)

为每一台服务器完成了如下准备工作:

  • 加域

  • 安装角色或功能如下:

Install-WindowsFeature -Name "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer"

  • 故障转移群集

  • Hyper-V

  • 文件服务器 (如果您想要托管任何文件共享,例如,针对聚合部署)

  • Data-Center-Bridging(如果正在使用 RoCEv2,而不是 iWARP 网络适配器)

  • RSAT-Clustering-PowerShell

  • Hyper-V-PowerShell

clip_image001

  • 清空磁盘驱动器

在其中一台S2D服务器上执行如下脚本:

备注:此脚本将永久删除操作系统启动驱动器以外的任何驱动器上的任何数据 !

# Fill in these variables with your values

$ServerList = "Server01", "Server02", "Server03", "Server04"

Invoke-Command ($ServerList) {

Update-StorageProviderCache

Get-StoragePool | ? IsPrimordial -eq $false | Set-StoragePool -IsReadOnly:$false -ErrorAction SilentlyContinue

Get-StoragePool | ? IsPrimordial -eq $false | Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false -ErrorAction SilentlyContinue

Get-StoragePool | ? IsPrimordial -eq $false | Remove-StoragePool -Confirm:$false -ErrorAction SilentlyContinue

Get-PhysicalDisk | Reset-PhysicalDisk -ErrorAction SilentlyContinue

Get-Disk | ? Number -ne $null | ? IsBoot -ne $true | ? IsSystem -ne $true | ? PartitionStyle -ne RAW | % {

$_ | Set-Disk -isoffline:$false

$_ | Set-Disk -isreadonly:$false

$_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false

$_ | Set-Disk -isreadonly:$true

$_ | Set-Disk -isoffline:$true

}

Get-Disk | Where Number -Ne $Null | Where IsBoot -Ne $True | Where IsSystem -Ne $True | Where PartitionStyle -Eq RAW | Group -NoElement -Property FriendlyName

} | Sort -Property PsComputerName, Count

例如:

# Fill in these variables with your values

$ServerList = "S2D1", "S2D2"

Invoke-Command ($ServerList) {

Update-StorageProviderCache

Get-StoragePool | ? IsPrimordial -eq $false | Set-StoragePool -IsReadOnly:$false -ErrorAction SilentlyContinue

Get-StoragePool | ? IsPrimordial -eq $false | Get-VirtualDisk | Remove-VirtualDisk -Confirm:$false -ErrorAction SilentlyContinue

Get-StoragePool | ? IsPrimordial -eq $false | Remove-StoragePool -Confirm:$false -ErrorAction SilentlyContinue

Get-PhysicalDisk | Reset-PhysicalDisk -ErrorAction SilentlyContinue

Get-Disk | ? Number -ne $null | ? IsBoot -ne $true | ? IsSystem -ne $true | ? PartitionStyle -ne RAW | % {

$_ | Set-Disk -isoffline:$false

$_ | Set-Disk -isreadonly:$false

$_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false

$_ | Set-Disk -isreadonly:$true

$_ | Set-Disk -isoffline:$true

}

Get-Disk | Where Number -Ne $Null | Where IsBoot -Ne $True | Where IsSystem -Ne $True | Where PartitionStyle -Eq RAW | Group -NoElement -Property FriendlyName

} | Sort -Property PsComputerName, Count

输出结果中计数是每个模型中的每个服务器的磁盘数

clip_image002

  • 验证群集

在每一台S2D服务器补充安装如下管理工具

clip_image003

在其中一台S2D服务器上执行验证:

clip_image004

clip_image005

clip_image006

clip_image007

  • 创建群集

在其中一台S2D的服务器上执行:

New-Cluster -Name S2D01 -Node "S2D1","S2D2" -StaticAddress 10.20.30.60 -NoStorage

clip_image008

  • 配置群集见证

配置在群集的见证服务器,以便具有三个或多个服务器群集可以承受两台服务器发生故障或处于脱机状态。双服务器部署需要群集见证,否则进入脱机状态的任一服务器会导致另一个也变得不可用

在这里我是2节点的S2D测试环境,因此我在DC服务器上创建一个共享文件夹

clip_image009

clip_image010

clip_image011

clip_image012

clip_image013

clip_image014

在DC的共享见证文件夹里就自动生成了见证文件了

clip_image015

  • 启用S2D

Enable-ClusterStorageSpacesDirect -CimSession <ClusterName>

在其中一台S2D服务器上执行:

例如:

Enable-ClusterStorageSpacesDirect -CimSession S2D01

出现如下报错:

clip_image016

在Windows Server 2019中禁用了Enable-ClusterStorageSpacesDirect功能。其原因在于Microsoft正在为硬件供应商提供Windows Server 2019的硬件认证,但是您可以添加到群集节点的简单注册表项通过开启S2D(当然微软不建议这样操作)

在每台S2D的服务器上用powershell执行

New-ItemProperty "HKLM:\SYSTEM\CurrentControlSet\Services\ClusSvc\Parameters" -Name S2D -Value 1 -PropertyType DWORD -Force

clip_image017

执行完成后注册表会新增如下一条记录

clip_image018

接下来再启用S2D

Enable-ClusterStorageSpacesDirect -CimSession S2D01

可通过Get-ClusterStorageSpacesDirect检查S2D状态

clip_image023

 

  • 创建卷

可以参考https://docs.microsoft.com/zh-cn/windows-server/storage/storage-spaces/create-volumes

在这里我使用Windows Admin Center来创建卷

clip_image026

添加好后点击进入超聚合群集管理器

clip_image027

clip_image028

clip_image029

clip_image030

clip_image031

也可以打开卷,添加上传文件等操作

clip_image032

这就等于创建好了群集共享卷

clip_image033

剩下的就是按照传统方式可以在这个群集共享卷里去创建虚拟机来跑了

接下来要给大家介绍一个新特性,是Windows Server 2019针对双节点保证数据可用性的新功能:

S2D的嵌套复原能力:

参考自:https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/nested-resiliency

群集里的两个服务器能够承受多个硬件故障时不会丢失存储可用性,因此用户、应用、 Windows Server 2019和虚拟机继续运行而不发生中断

与经典双向镜像复原能力不同的是:使用嵌套的复原能力的卷即使多个硬件故障发生在同一时间也将保持联机和可访问。例如,如果两个磁盘故障一次或一台服务器出现故障时,使用嵌套复原能力的卷将保持联机和可访问。对于超聚合基础结构,这将增加应用和虚拟机;的运行的时间,对于文件服务器工作负载意味着用户享有不间断地的访问他们的文件能力

clip_image034

弊端是比经典的双向镜像而言,具有该嵌套复原能力会进一步降低可用容量空间。

使用此功能,将拥有比传统双向镜像更低的容量,但可以获得更高的可靠性,这是超融合基础架构的基础,克服了以前版本的Windows Server中存在的群集环境限制:只有两节。不需要特定的硬件实现两个新的选项:

嵌套双向镜像:在每个服务器中,本地使用双向镜像,两个服务器之间的双向镜像保证了进一步的弹性。实际上它是一个四向镜像,每个服务器有两个数据副本。

嵌套镜像加速奇偶校验:前面描述的双向镜像与嵌套奇偶校验相结合

clip_image035

先决条件:

  • 可用使用嵌套复原能力

群集中运行的是Windows Server 2019且群集里只有2个服务器节点

  • 不能使用嵌套复原能力

群集中运行的是Windows Server 2016或群集里有3个或3个以上的服务器节点

具体的容量消耗保证数据可用性的嵌套复原能力可用空间算法请参看上面链接,我大概总结下就是:

嵌套复原能力也分为2种

  • 嵌套双向镜像:可用空间为总磁盘可用空间的25%

  • 嵌套的镜像加速奇偶校验:可用空间为总磁盘可用空间的35%~40%

传统的双向镜像可用空间为总磁盘可用空间的50%

  • 在这里我创建一个嵌套双向镜像存储模板和一个嵌套的镜像加速奇偶校验存储模板

    • 嵌套双向镜像存储模板

New-StorageTier -StoragePoolFriendlyName S2D* -FriendlyName NestedMirror -ResiliencySettingName Mirror -MediaType HDD -NumberOfDataCopies 4

clip_image036

  • 嵌套的镜像加速奇偶校验存储模板

New-StorageTier -StoragePoolFriendlyName S2D* -FriendlyName NestedParity -ResiliencySettingName Parity -MediaType HDD -NumberOfDataCopies 2 -PhysicalDiskRedundancy 1 -NumberOfGroups 1 -FaultDomainAwareness StorageScaleUnit -ColumnIsolation PhysicalDisk

clip_image037

备注:如果容量磁盘是固态硬盘 (SSD),设置-MediaType为SSD即可,不要修改其他参数

验证是否创建成功:Get-StorageTier

clip_image038

  • 接下来创建嵌套的双向镜像卷

New-Volume -StoragePoolFriendlyName S2D* -FriendlyName Volume02 -StorageTierFriendlyNames NestedMirror -StorageTierSizes 10GB

  • 最后再创建一个嵌套的镜像加速奇偶校验卷

若要使用嵌套的镜像加速奇偶校验,可以同时引用NestedMirror和NestedParity层模板并指定两个大小,用于不同的卷(首先是镜像部分大小,其次是奇偶校验部分大小)。 例如,若要创建一个是 20%嵌套双向镜像和 80%的 10GB 卷嵌套奇偶校验

New-Volume -StoragePoolFriendlyName S2D* -FriendlyName Volume03 -StorageTierFriendlyNames NestedMirror, NestedParity -StorageTierSizes 2GB, 8GB

clip_image039

除了这些好的功能外,当然还有其他类似Azure公有云上的故障感知域功能,在本地也可以实现了,从站点机柜刀片服务器刀箱刀片服务器都可以做不同的容错域级别,如果对这块感兴趣,可以参看:https://docs.microsoft.com/zh-cn/windows-server/failover-clustering/fault-domains

好了,这么好的功能就介绍到这了,更多精彩内容期待您的关注,谢谢。