本文提供在 Windows Server 上部署存储空间直连的分步说明。 若要将存储空间直通部署为 Azure Local 的一部分,请参阅关于 Azure Local
提示
想要获取超融合基础设施? Microsoft建议从合作伙伴购买经过验证的硬件/软件 Azure 本地解决方案。 这些解决方案是依据我们的参考体系结构设计和汇编的,并且经过了验证,能够确保兼容性和可靠性,因此你可以快速起步和运行。 若要查阅兼容 Azure 本地的硬件/软件解决方案目录,请参阅 Azure 本地目录。
提示
可以使用 Hyper-V 虚拟机(包括在 Microsoft Azure 中)评估 Storage Spaces Direct,而无需额外硬件。 你可能还想审查我们用于培训的便捷的 Windows Server 快速实验室部署脚本。
开始之前
查看 存储空间直连硬件要求,以熟悉相关步骤的整体方法及重要说明。
收集以下信息:
部署选项:存储空间直通支持两种部署方式:超聚合和聚合,也称为解耦。 熟悉每种选项的优势,以确定哪种选项适合自己。 下面的步骤 1-3 适用于这两个部署选项。 只有融合部署才需要步骤 4。
服务器名称:了解并熟悉您组织中关于计算机、文件、路径和其他资源的命名策略。 需要预配多个服务器,并且每个服务器具有唯一名称。
请熟悉组织的域名命名和域关联策略。 您将把服务器加入到您的域中,并且需要指定域名。
RDMA 网络:有两种类型的 RDMA 协议:iWarp 和 RoCE。 请记下你的网络适配器使用哪一种。如果是 RoCE,还请记下版本(v1 或 v2)。 对于 RoCE,还请记下架顶式交换机的型号。
VLAN ID:请记下用于服务器上的管理 OS 网络适配器的 VLAN ID(如果有)。 应该能够从网络管理员处获取此信息。
步骤 1:部署 Windows Server
步骤 1.1:安装操作系统
第一步是在群集中的每个服务器上安装 Windows Server。 存储空间直通 (Storage Spaces Direct) 需要 Windows Server Datacenter Edition。 可以使用“服务器核心”安装选项或“带桌面体验的服务器”。
使用安装向导安装 Windows Server 时,可以在 Windows Server(指服务器核心)和 Windows Server(带桌面体验的服务器)之间进行选择,这等效于 Windows Server 2012 R2 中提供的完全安装选项。 如果不选择,将获得“服务器核心”安装选项。 有关详细信息,请参阅安装服务器核心。
步骤 1.2:连接到服务器
本指南重点介绍“服务器核心”安装选项,以及从单独的管理系统远程部署/管理,该系统必须符合以下条件:
- Windows Server 或 Windows 10 的版本至少与它管理的服务器一样新,并且具有最新更新。
- 网络连接到它所管理的服务器。
- 已加入到同一域或完全受信任的域。
- Hyper-V 和故障转移群集的远程服务器管理工具 (RSAT) 和 PowerShell 模块。 RSAT 工具和 PowerShell 模块在 Windows Server 上可用,并且无需安装其他功能便可安装。 还可以在 Windows 10 管理 PC 上安装远程服务器管理工具。
在管理系统上安装故障转移群集和 Hyper-V 管理工具,这可以通过服务器管理器使用添加角色和功能向导完成。 在“功能”页上,选择“远程服务器管理工具”,然后选择要安装的工具。
进入 PowerShell 会话,并使用要连接的服务器名称或节点的 IP 地址。 执行此命令后,系统将提示输入密码,输入在设置 Windows 时指定的管理员密码。
Enter-PSSession -ComputerName <myComputerName> -Credential LocalHost\Administrator
下面是一个在脚本中以更有用的方式执行相同事情的示例:
$myServer1 = "myServer-1"
$user = "$myServer1\Administrator"
Enter-PSSession -ComputerName $myServer1 -Credential $user
提示
如果从管理系统进行远程部署,可能会收到类似“WinRM 无法处理请求”的错误。若要解决此问题,请使用 Windows PowerShell 将每个服务器添加到管理计算机的“受信任的主机”列表中:
Set-Item WSMAN:\Localhost\Client\TrustedHosts -Value Server01 -Force
受信任的主机列表支持通配符,例如 Server*
。
- 若要查看受信任的主机列表,请键入
Get-Item WSMAN:\Localhost\Client\TrustedHosts
。 - 若要清空该列表,请键入
Clear-Item WSMAN:\Localhost\Client\TrustedHost
。
步骤 1.3:加入域并添加域帐户
若要管理存储空间直通 (Storage Spaces Direct),需要将服务器加入域,并使用位于每台服务器的管理员组中的 Active Directory 域服务 (AD DS) 域账户。
在管理系统中,使用管理员权限打开 PowerShell 控制台。 使用 Enter-PSSession
连接到每个服务器并运行以下 cmdlet,替换你自己的计算机名称、域名和域凭据:
Add-Computer -NewName "Server01" -DomainName "contoso.com" -Credential "CONTOSO\User" -Restart -Force
如果存储帐户不是域管理员组的成员,请将存储帐户添加到每个节点上的本地管理员组,或添加用于存储管理员的组。 可以使用以下命令,或创建 PowerShell 脚本来执行此步骤。 若要了解详细信息,请参阅 使用 PowerShell 将域用户添加到本地组。
Net localgroup Administrators <Domain\Account> /add
步骤 1.4:安装角色和功能
下一步是通过 Windows Admin Center、Server Manager 或 PowerShell 在每台服务器上安装服务器角色。 下面是要安装的角色:
- 故障转移群集
- Hyper-V
- 文件服务器(如果要托管任何文件共享,例如用于融合部署)
- 数据中心桥接(如果使用 RoCEv2 而不是 iWARP 网络适配器)
- RSAT-Clustering-PowerShell
- Hyper-V-PowerShell
若要通过 PowerShell 进行安装,请使用 Install-WindowsFeature cmdlet。 可以在单个服务器上使用它,如下所示:
Install-WindowsFeature -Name "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer"
若要同时在群集中的所有服务器上运行该命令,请运行此脚本,该脚本修改脚本开头的变量列表以适应环境。
# Fill in these variables with your values
$ServerList = "Server01", "Server02", "Server03", "Server04"
$FeatureList = "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer"
# This part runs the Install-WindowsFeature cmdlet on all servers in $ServerList, passing the list of features into the script block with the "Using" scope modifier so you don't have to hard-code them here.
Invoke-Command ($ServerList) {
Install-WindowsFeature -Name $Using:Featurelist
}
步骤 2:配置网络
如果要在虚拟机中部署存储空间直连,请跳过此部分。
存储空间直通需要在群集中的服务器之间建立高带宽、低延迟的网络。 至少需要 10-GbE 网络,建议使用远程直接内存访问(RDMA)。 你可以使用 iWARP 或 RoCE,只要它们具有与你的操作系统版本匹配的 Windows Server 徽标,但 iWARP 更易于设置。
重要
根据网络设备,尤其是使用 RoCE v2 时,可能需要对架顶式交换机进行某些配置。 正确地配置交换机对于确保存储空间直通的可靠性和性能非常重要。
Windows Server 2016 在 Hyper-V 虚拟交换机中引入了交换机嵌入式组合 (SET)。 这允许使用 RDMA 时对所有网络流量使用相同的物理网络接口卡(NIC)端口,从而减少所需的物理 NIC 端口数。 建议将交换机嵌入式组合用于存储空间直通。
- Switched: 必须正确配置网络交换机以便处理带宽和网络类型。 如果使用的 RDMA 实现了 RoCE 协议,则网络设备和交换机配置更为重要。
- 不使用交换机:节点可以通过直接连接进行互连,避免使用交换机。 每个节点都必须与群集的其他每个节点建立直接连接。
有关为存储空间直通设置网络的说明,请参阅 Windows Server 2016 和 2019 RDMA 部署指南。
步骤 3:配置存储空间直通
以下步骤将在一个与配置的服务器版本相同的管理系统上完成。 以下步骤不应使用 PowerShell 会话远程运行,而应在具有管理权限的管理系统上在本地 PowerShell 会话中运行。
步骤 3.1:清理驱动器
启用存储空间直通之前,请确保驱动器为空:没有旧分区或其他数据。 运行以下脚本,替换计算机名称以删除所有旧分区或其他数据。
重要
此脚本将永久删除操作系统启动驱动器以外的任何驱动器上的所有数据!
# Fill in these variables with your values
$ServerList = "Server01", "Server02", "Server03", "Server04"
foreach ($server in $serverlist) {
Invoke-Command ($server) {
# Check for the Azure Temporary Storage volume
$azTempVolume = Get-Volume -FriendlyName "Temporary Storage" -ErrorAction SilentlyContinue
If ($azTempVolume) {
$azTempDrive = (Get-Partition -DriveLetter $azTempVolume.DriveLetter).DiskNumber
}
# Clear and reset the disks
$disks = Get-Disk | Where-Object {
($_.Number -ne $null -and $_.Number -ne $azTempDrive -and !$_.IsBoot -and !$_.IsSystem -and $_.PartitionStyle -ne "RAW")
}
$disks | ft Number,FriendlyName,OperationalStatus
If ($disks) {
Write-Host "This action will permanently remove any data on any drives other than the operating system boot drive!`nReset disks? (Y/N)"
$response = read-host
if ( $response.ToLower() -ne "y" ) { exit }
$disks | % {
$_ | Set-Disk -isoffline:$false
$_ | Set-Disk -isreadonly:$false
$_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false -verbose
$_ | Set-Disk -isreadonly:$true
$_ | Set-Disk -isoffline:$true
}
#Get-PhysicalDisk | Reset-PhysicalDisk
}
Get-Disk | Where-Object {
($_.Number -ne $null -and $_.Number -ne $azTempDrive -and !$_.IsBoot -and !$_.IsSystem -and $_.PartitionStyle -eq "RAW")
} | Group -NoElement -Property FriendlyName
}
}
输出如下所示,其中 计数 是每台服务器中每个型号的驱动器数量:
Count Name PSComputerName
----- ---- --------------
4 ATA SSDSC2BA800G4n Server01
10 ATA ST4000NM0033 Server01
4 ATA SSDSC2BA800G4n Server02
10 ATA ST4000NM0033 Server02
4 ATA SSDSC2BA800G4n Server03
10 ATA ST4000NM0033 Server03
4 ATA SSDSC2BA800G4n Server04
10 ATA ST4000NM0033 Server04
步骤 3.2:验证群集
在此步骤中,将运行群集验证工具,确保正确配置服务器节点,以便使用存储空间直通来创建群集。 当群集验证 (Test-Cluster
) 在创建群集之前运行时,它会运行测试,验证配置是否适合成功充当故障转移群集。 以下示例直接使用-Include
参数,接着指定特定的测试类别。 这样可以确保验证中包含存储空间直通特定的测试。
使用以下 PowerShell 命令验证一组用作存储空间直通群集的服务器。
Test-Cluster -Node <MachineName1, MachineName2, MachineName3, MachineName4> -Include "Storage Spaces Direct", "Inventory", "Network", "System Configuration"
步骤 3.3:创建群集
在此步骤中,将使用以下 PowerShell cmdlet,通过在前面步骤中已经验证可用于创建群集的节点来创建群集。
创建群集时,将收到一条警告,指出“#A0 创建群集角色时出现问题,可能会阻止其启动。有关详细信息,请查看下面的报表文件。#A1“可以安全地忽略此警告。 出现此警告是因为群集仲裁上没有可用的磁盘。 建议在创建群集后配置文件共享见证或云见证。
注意
如果服务器正在使用静态 IP 地址,通过添加以下参数和指定 IP 地址来修改以下命令以反映静态 IP 地址:-StaticAddress <X.X.X.X>。 在以下命令中,ClusterName 占位符应被唯一的且字符数等于或少于 15 个的 netbios 名称替换。
New-Cluster -Name <ClusterName> -Node <MachineName1,MachineName2,MachineName3,MachineName4> -NoStorage
创建群集后,可能需要一段时间才能复制群集名称的域名系统(DNS)条目。 时间取决于环境和 DNS 复制配置。 如果解析群集未成功,在大多数情况下,可以使用节点的计算机名称来完成,它是可用于取代群集名称的群集的活动成员。
步骤 3.4:配置群集见证
建议为群集配置见证,以便具有三个或更多服务器的群集可以承受两个服务器发生故障或处于脱机状态。 双服务器部署需要群集见证,否则任一服务器进入脱机状态会导致另一个服务器也变得不可用。 通过这些系统,可以使用文件共享作为见证或使用云见证。 若要了解详细信息,请参阅部署仲裁见证。
步骤 3.5:启用存储空间直通
创建群集后,使用 Enable-ClusterStorageSpacesDirect
PowerShell cmdlet(它会将存储系统置于存储空间直通模式),并自动执行以下操作:
创建池:创建具有类似于“S2D on Cluster1”的名称的单个大型池。
** 配置储存空间直通缓存:如果储存空间直通可以使用多种存储介质(驱动器)类型,它将选择最快的类型作为缓存设备(通常用于读取和写入)。
层:创建 2 层作为默认层。 其中一个称为“容量”,另一个称为“性能”。 cmdlet 分析设备,并通过组合设备类型和恢复能力来配置每个层级。
在管理系统中,打开提升的 PowerShell 窗口,启动以下命令。 群集名称是在前面的步骤中创建的群集的名称。 如果在节点之一本地运行此命令,则不需要 -CimSession
参数。
Enable-ClusterStorageSpacesDirect -CimSession <ClusterName>
此命令启用存储空间直通,可在其中选择使用节点名称而不是群集名称。 使用节点名称可能更可靠,因为新创建的群集名称可能出现 DNS 复制延迟。
此命令完成之后(可能需要几分钟时间),系统将准备好要创建卷。
步骤 3.6:创建卷
我们建议使用 New-Volume
cmdlet,因为它可以提供最快且最简单的体验。 此单个 cmdlet 会自动创建虚拟磁盘、分区和格式化它,创建具有匹配名称的卷,并将其添加到群集共享卷 – 只需一个简单的步骤即可。
有关详细信息,请查看在存储空间直通中创建卷。
步骤 3.7:(可选)启用 CSV 缓存
可以选择使用系统内存(RAM)作为写入块级缓存来启用群集共享卷(CSV)缓存,以执行 Windows 缓存管理器不缓存的读取作。 这可以提高 Hyper-V 等应用程序的性能。 CSV 缓存可以提高读取请求的性能,对于横向扩展文件服务器方案也很有用。
启用 CSV 缓存会减少可用于在超融合群集上运行 VM 的内存量,因此必须平衡存储性能与 VHD 可用的内存。
若要设置 CSV 缓存的大小,请使用对存储群集具有管理员权限的帐户在管理系统上打开 PowerShell 会话,然后使用此脚本,根据需要更改 $ClusterName
和 $CSVCacheSize
变量(此示例为每个服务器设置 2 GB 的 CSV 缓存):
$ClusterName = "StorageSpacesDirect1"
$CSVCacheSize = 2048 #Size in MB
Write-Output "Setting the CSV cache..."
(Get-Cluster $ClusterName).BlockCacheSize = $CSVCacheSize
$CSVCurrentCacheSize = (Get-Cluster $ClusterName).BlockCacheSize
Write-Output "$ClusterName CSV cache size: $CSVCurrentCacheSize MB"
有关详细信息,请参阅使用 CSV 内存中读取缓存。
步骤 3.8:为超融合部署部署虚拟机
如果要部署超融合群集,最后一步是在存储空间直通群集上预配虚拟机。
虚拟机的文件应存储在系统的 CSV 命名空间上(示例:c:\ClusterStorage\Volume1),就像群集 VM 在故障转移群集上的存储方式。
可以使用现成工具或其他工具来管理存储和虚拟机,例如 System Center Virtual Machine Manager。
步骤 4:部署横向扩展文件服务器以实现融合解决方案
如果要部署聚合解决方案,下一步是创建 Scale-Out 文件服务器实例并设置文件共享。 如果要部署超融合群集 - 已完成,不需要此部分。
步骤 4.1:创建横向扩展文件服务器角色
为文件服务器设置群集服务的下一步是创建群集文件服务器角色,即创建托管持续可用文件共享的横向扩展文件服务器实例。
使用故障转移群集管理器创建横向扩展文件服务器角色
在故障转移群集管理器中,选择群集,转到“角色”,然后选择“配置角色…”。
此时会显示高可用性向导。在选择角色页面上,选择文件服务器。
在“ 文件服务器类型 ”页上,为 应用程序数据选择Scale-Out 文件服务器。
在“客户端访问点”页上,键入扩展文件服务器的名称。
转到角色页面,确认在您创建的群集文件服务器角色旁边的状态列中是否显示正在运行,从而验证角色是否已成功设置,如图 1 所示。
图 1 显示状态为“正在运行”的横向扩展文件服务器的故障转移群集管理器
注意
创建群集角色后,可能会出现一些网络传播延迟,这会使你在几分钟或更长的时间内无法在其上创建文件共享。
使用 Windows PowerShell 创建可扩展的文件服务器角色
在连接到文件服务器群集的 Windows PowerShell 会话中,输入以下命令以创建横向扩展文件服务器角色,更改 FSCLUSTER 以匹配群集的名称,并更改 SOFS 以匹配要为横向扩展文件服务器角色指定的名称:
Add-ClusterScaleOutFileServerRole -Name SOFS -Cluster FSCLUSTER
注意
创建群集角色后,可能会出现一些网络传播延迟,这会使你在几分钟或更长的时间内无法在其上创建文件共享。 如果 SOFS 角色立即失败且未启动,可能是因为群集的计算机对象无权为 SOFS 角色创建计算机帐户。 有关此方面的帮助,请参阅此博客文章:横向扩展文件服务器角色无法启动,事件 ID 为 1205、1069 和 1194。
步骤 4.2:创建文件共享
创建虚拟磁盘并将其添加到 CSV 后,即可在其上创建文件共享 - 每个 CSV 的每个虚拟磁盘上创建一个文件共享。 System Center Virtual Machine Manager (VMM) 可能是执行此操作的最轻松方法,因为它会为你处理权限,但如果环境中没有 VMM,则可以使用 Windows PowerShell 部分自动执行部署。
使用适用于 Hyper-V 工作负载的 SMB 共享配置脚本中包含的脚本,该脚本可部分自动执行创建组和共享的过程。 它是针对 Hyper-V 工作负载编写的,因此,如果要部署其他工作负载,可能需要在创建共享后修改设置或执行其他步骤。 例如,如果使用的是 Microsoft SQL Server ,则必须向 SQL Server 服务帐户授予对共享和文件系统的完全控制权限。
注意
除非使用 System Center Virtual Machine Manager 创建共享,否则在添加群集节点时必须更新组成员身份。
若要使用 PowerShell 脚本创建文件共享,请执行以下步骤:
将适用于 Hyper-V 工作负载的 SMB 共享配置中包含的脚本下载到文件服务器群集的某个节点。
在管理系统上使用域管理员凭据打开 Windows PowerShell 会话。 使用以下脚本为 Hyper-V 计算机对象创建 Active Directory 组,根据环境更改变量的值:
# Replace the values of these variables $HyperVClusterName = "Compute01" $HyperVObjectADGroupSamName = "Hyper-VServerComputerAccounts" <#No spaces#> $ScriptFolder = "C:\Scripts\SetupSMBSharesWithHyperV" # Start of script itself CD $ScriptFolder .\ADGroupSetup.ps1 -HyperVObjectADGroupSamName $HyperVObjectADGroupSamName -HyperVClusterName $HyperVClusterName
在其中一个存储节点上使用管理员凭据打开 Windows PowerShell 会话。 使用以下脚本为每个 CSV 创建共享,并向域管理员组和计算群集授予共享的管理权限。
# Replace the values of these variables $StorageClusterName = "StorageSpacesDirect1" $HyperVObjectADGroupSamName = "Hyper-VServerComputerAccounts" <#No spaces#> $SOFSName = "SOFS" $SharePrefix = "Share" $ScriptFolder = "C:\Scripts\SetupSMBSharesWithHyperV" # Start of the script itself CD $ScriptFolder Get-ClusterSharedVolume -Cluster $StorageClusterName | ForEach-Object { $ShareName = $SharePrefix + $_.SharedVolumeInfo.friendlyvolumename.trimstart("C:\ClusterStorage\Volume") Write-host "Creating share $ShareName on "$_.name "on Volume: " $_.SharedVolumeInfo.friendlyvolumename .\FileShareSetup.ps1 -HyperVClusterName $StorageClusterName -CSVVolumeNumber $_.SharedVolumeInfo.friendlyvolumename.trimstart("C:\ClusterStorage\Volume") -ScaleOutFSName $SOFSName -ShareName $ShareName -HyperVObjectADGroupSamName $HyperVObjectADGroupSamName }
步骤 4.3启用 Kerberos 约束委派
若要设置 Kerberos 约束委派以进行远程方案管理和提高实时迁移安全性,请从其中一个存储群集节点使用适用于 Hyper-V 工作负荷的 SMB 共享配置中包含的 KCDSetup.ps1 脚本。 下面是该脚本的一个小包装器:
$HyperVClusterName = "Compute01"
$ScaleOutFSName = "SOFS"
$ScriptFolder = "C:\Scripts\SetupSMBSharesWithHyperV"
CD $ScriptFolder
.\KCDSetup.ps1 -HyperVClusterName $HyperVClusterName -ScaleOutFSName $ScaleOutFSName -EnableLM