在 Windows Server 上部署存储空间直通

适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2016

本主题提供在 Windows Server 上部署存储空间直通的分步说明。 如需在 Azure Stack HCI 中部署存储空间直通,请参阅 Azure Stack HCI 的部署过程是什么?

提示

想要获取超融合基础设施? Microsoft 建议从我们的合作伙伴那里购买经过验证的硬件/软件 Azure Stack HCI 解决方案。 这些解决方案是依据我们的参考体系结构设计和汇编的,并且经过了验证,能够确保兼容性和可靠性,因此你可以快速起步和运行。 若要细读适用于 Azure Stack HCI 的硬件/软件解决方案目录,请参阅 Azure Stack HCI 目录

提示

可以使用 Hyper-V 虚拟机(包括在 Microsoft Azure 中)在没有硬件的情况下评估存储空间直通。 你可能还想要轻松查看用于培训的 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。 存储空间直通需要 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 管理工具。 这可以通过使用“添加角色和功能”向导的服务器管理器来完成。 在“功能”页上,选择“远程服务器管理工具”,然后选择要安装的工具。

输入 PS 会话并使用服务器名称或想要连接到的节点的 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:加入域并添加域帐户

到目前为止,你已使用本地管理员帐户 <ComputerName>\Administrator 配置了各个服务器。

若要管理存储空间直通,需要将服务器加入域,并使用每个服务器上管理员组中的 Active Directory 域服务域帐户。

在管理系统中,使用管理员权限打开 PowerShell 控制台。 使用 Enter-PSSession 连接到每个服务器并运行以下 cmdlet,替换你自己的计算机名称、域名和域凭据:

Add-Computer -NewName "Server01" -DomainName "contoso.com" -Credential "CONTOSO\User" -Restart -Force

如果你的存储管理员帐户不是域管理员组的成员,则请将你的存储管理员帐户添加到每个节点上的本地管理员组中,或者更好的是,添加用于存储管理员的组。 可以使用以下命令(也可以编写 Windows PowerShell 函数来执行此操作 - 有关详细信息,请参阅使用 PowerShell 将域用户添加到本地组):

Net localgroup Administrators <Domain\Account> /add

步骤 1.4:安装角色和功能

下一步是在每个服务器上安装服务器角色。 可以使用 Windows Admin Center服务器管理器或 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 scriptblock 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,但 iWARP 通常更易于设置。

重要

根据网络设备,尤其是使用 RoCE v2 时,可能需要对架顶式交换机进行某些配置。 正确地配置交换机对于确保存储空间直通的可靠性和性能非常重要。

Windows Server 2016 在 Hyper-V 虚拟交换机中引入了交换机嵌入式组合 (SET)。 这样,在使用 RDMA 时,可以将相同的物理 NIC 端口用于所有网络流量,从而减少所需的物理 NIC 端口数。 建议将交换机嵌入式组合用于存储空间直通。

交换机或无交换机节点互连

  • 交换式:必须正确配置网络交换机以处理带宽和网络类型。 如果使用的 RDMA 实现了 RoCE 协议,则网络设备和交换机配置更为重要。
  • 无交换机:节点可以使用直接连接进行互连,避免使用交换机。 每个节点都必须与群集的每个其他节点建立直接连接。

有关为存储空间直通设置网络的说明,请参阅 Windows Server 2016 和 2019 RDMA 部署指南

步骤 3:配置存储空间直通

以下步骤将在一个与配置的服务器版本相同的管理系统上完成。 以下步骤不应使用 PowerShell 会话远程运行,而应在具有管理权限的管理系统上在本地 PowerShell 会话中运行。

步骤 3.1:清理驱动器

启用存储空间直通之前,请确保驱动器为空:没有旧分区或其他数据。 运行以下脚本,替换你的计算机名称,以删除所有旧分区或其他数据。

警告

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

# 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

输出将如下所示,其中 Count 是每个服务器中每个模型的驱动器数

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,通过在前面步骤中已经验证可用于创建群集的节点来创建群集。

创建群集时,将收到此警告:“创建群集角色时出现的问题可能会阻止其启动。 有关详细信息,请查看下面的报告文件。”可以放心地忽略此警告。 出现此警告是因为群集仲裁上没有可用的磁盘。 建议在创建群集后配置文件共享见证或云见证。

注意

如果服务器正在使用静态 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 缓存

可以选择启用群集共享卷 (CSV) 缓存,以将系统内存 (RAM) 用作 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:为融合解决方案部署横向扩展文件服务器

如果要部署融合解决方案,下一步是创建横向扩展文件服务器实例并设置一些文件共享。 如果要部署超融合群集 - 已完成,不需要此部分。

步骤 4.1:创建横向扩展文件服务器角色

为文件服务器设置群集服务的下一步是创建群集文件服务器角色,即创建托管持续可用文件共享的横向扩展文件服务器实例。

使用服务器管理器创建横向扩展文件服务器角色

  1. 在故障转移群集管理器中,选择群集,转到“角色”,然后单击“配置角色...”
    此时会显示高可用性向导。

  2. 在“选择角色”页上,单击“文件服务器”

  3. 在“文件服务器类型”页上,单击“应用程序数据的横向扩展文件服务器”

  4. 在“客户端访问点”页上,键入横向扩展文件服务器的名称

  5. 转到“角色”并确认创建的群集文件服务器角色旁边的“状态”列是否显示“正在运行”,从而验证角色是否已成功设置,如图 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 脚本创建文件共享,请执行以下操作:

  1. 将适用于 Hyper-V 工作负载的 SMB 共享配置中包含的脚本下载到文件服务器群集的某个节点。

  2. 在管理系统上使用域管理员凭据打开 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
    
  3. 在其中一个存储节点上使用管理员凭据打开 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

其他参考