在部署之前还是需要了解下硬件要求:
其中重点是:
最少 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
清空磁盘驱动器
在其中一台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
输出结果中计数是每个模型中的每个服务器的磁盘数
验证群集
在每一台S2D服务器补充安装如下管理工具
在其中一台S2D服务器上执行验证:
创建群集
在其中一台S2D的服务器上执行:
New-Cluster -Name S2D01 -Node "S2D1","S2D2" -StaticAddress 10.20.30.60 -NoStorage
配置群集见证
配置在群集的见证服务器,以便具有三个或多个服务器群集可以承受两台服务器发生故障或处于脱机状态。双服务器部署需要群集见证,否则进入脱机状态的任一服务器会导致另一个也变得不可用
在这里我是2节点的S2D测试环境,因此我在DC服务器上创建一个共享文件夹
在DC的共享见证文件夹里就自动生成了见证文件了
启用S2D
Enable-ClusterStorageSpacesDirect -CimSession <ClusterName>
在其中一台S2D服务器上执行:
例如:
Enable-ClusterStorageSpacesDirect -CimSession S2D01
出现如下报错:
在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
执行完成后注册表会新增如下一条记录
接下来再启用S2D
Enable-ClusterStorageSpacesDirect -CimSession S2D01
可通过Get-ClusterStorageSpacesDirect检查S2D状态
创建卷
可以参考https://docs.microsoft.com/zh-cn/windows-server/storage/storage-spaces/create-volumes
在这里我使用Windows Admin Center来创建卷
添加好后点击进入超聚合群集管理器
也可以打开卷,添加上传文件等操作
这就等于创建好了群集共享卷
剩下的就是按照传统方式可以在这个群集共享卷里去创建虚拟机来跑了
接下来要给大家介绍一个新特性,是Windows Server 2019针对双节点保证数据可用性的新功能:
S2D的嵌套复原能力:
参考自:https://docs.microsoft.com/en-us/windows-server/storage/storage-spaces/nested-resiliency
群集里的两个服务器能够承受多个硬件故障时不会丢失存储可用性,因此用户、应用、 Windows Server 2019和虚拟机继续运行而不发生中断
与经典双向镜像复原能力不同的是:使用嵌套的复原能力的卷即使多个硬件故障发生在同一时间也将保持联机和可访问。例如,如果两个磁盘故障一次或一台服务器出现故障时,使用嵌套复原能力的卷将保持联机和可访问。对于超聚合基础结构,这将增加应用和虚拟机;的运行的时间,对于文件服务器工作负载意味着用户享有不间断地的访问他们的文件能力
弊端是比经典的双向镜像而言,具有该嵌套复原能力会进一步降低可用容量空间。
使用此功能,将拥有比传统双向镜像更低的容量,但可以获得更高的可靠性,这是超融合基础架构的基础,克服了以前版本的Windows Server中存在的群集环境限制:只有两节。不需要特定的硬件实现两个新的选项:
嵌套双向镜像:在每个服务器中,本地使用双向镜像,两个服务器之间的双向镜像保证了进一步的弹性。实际上它是一个四向镜像,每个服务器有两个数据副本。
嵌套镜像加速奇偶校验:前面描述的双向镜像与嵌套奇偶校验相结合
先决条件:
可用使用嵌套复原能力
群集中运行的是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
嵌套的镜像加速奇偶校验存储模板
New-StorageTier -StoragePoolFriendlyName S2D* -FriendlyName NestedParity -ResiliencySettingName Parity -MediaType HDD -NumberOfDataCopies 2 -PhysicalDiskRedundancy 1 -NumberOfGroups 1 -FaultDomainAwareness StorageScaleUnit -ColumnIsolation PhysicalDisk
备注:如果容量磁盘是固态硬盘 (SSD),设置-MediaType为SSD即可,不要修改其他参数
验证是否创建成功:Get-StorageTier
接下来创建嵌套的双向镜像卷
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
除了这些好的功能外,当然还有其他类似Azure公有云上的故障感知域功能,在本地也可以实现了,从站点到机柜到刀片服务器刀箱到刀片服务器都可以做不同的容错域级别,如果对这块感兴趣,可以参看:https://docs.microsoft.com/zh-cn/windows-server/failover-clustering/fault-domains
好了,这么好的功能就介绍到这了,更多精彩内容期待您的关注,谢谢。