Amazon Elastic Compute Cloud
Windows 实例用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

教程:在 Amazon EC2 上部署 Storage Spaces Direct (S2D)

Storage Spaces Direct (S2D) 是软件定义的、高度可扩展的一种存储架构,使用户可以将本地存储与 Windows Server 2016 中的功能聚集在一起。S2D 是传统 SAN 或 NAS 阵列的替代方案。它使用内置的 Windows 功能和工具配置跨集群中多个节点的高度可用的存储。有关更多信息,请参阅 Microsoft 文档中的 Storage Spaces Direct

下图显示了 Amazon EC2 Windows 上的 S2D 的架构。


			
			Amazon EC2 上的 Storage Spaces Direct

技能级别

需要基本了解 Windows Server 计算以及如何在 VPC 中创建和管理加入域的 Amazon EC2 Windows 实例。了解 适用于 Windows PowerShell 的 AWS 工具 和 Windows 故障转移集群会有所帮助,但不是必需的。

在本教程中您将学到

  • 使用 Storage Spaces Direct (S2D) 预配置高度可用的存储集群。

  • 在集群上预配置具有容错能力的集群共享卷 (CSV)。

开始前的准备工作

  • 打开 http://www.amazonaws.cn/ 并创建一个 AWS 账户(如果尚未执行此操作)。

  • 为您的实例创建具有一个公有子网和两个私有子网的 Virtual Private Cloud (VPC)。应为 AWS Directory Service 配置第三个私有子网。

  • 为 Windows Server 2016 选择一个最新 Amazon 系统映像 (AMI)。您可以按原样使用此 AMI,也可以将其用作您的自定义 AMI 的基础。AWS 建议使用最新的公有 EC2 Windows Server 2016 AMI。

  • 创建 AWS Directory Service 目录。在 Windows Server 2016 中不再需要启用故障转移集群功能。但是,本教程假定您的实例将加入 EC2 或 AWS 托管的 Active Directory 上的 Active Directory 域。有关更多信息,请参阅 AWS Directory Service Administration Guide中的 AWS Directory Service 入门

  • 在您的计算机上安装并配置 适用于 Windows PowerShell 的 AWS 工具。有关更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南

重要注意事项

  • 如果未备份或复制数据,则停止带有实例存储卷的实例可能会导致数据丢失。实例存储内的数据仅在与关联的实例的生命周期内保留。如果实例重启 (无论是故意还是意外),实例存储内的数据都会保留下来。然而,在以下情况下,实例存储中的数据会丢失:

    • 底层磁盘驱动器发生故障。

    • 实例停止。

    • 实例终止。

  • 如果未备份或复制数据,则停止集群中的过多实例可能会导致数据丢失。当您在 AWS 上使用 S2D 时,与任何集群一样,只要丢失的节点超出容错能力允许的数量,就会导致数据丢失。对于任何集群来说,最大的风险之一就是丢失所有节点。集群冗余会防止单个实例(或多个实例,前提是容错能力支持这些实例)发生故障。但是,如果集群中发生磁盘驱动器故障的实例数超出容错能力,您可能会丢失数据。此外,如果已停止或已终止的实例数超出容错能力,您也可能会丢失数据。要降低风险,请限制人员或系统可在集群中停止或终止的实例数。要减轻终止集群节点实例的风险,请对这些实例启用终止保护。您也可以配置 IAM 策略,以便仅允许用户从 AWS 控制台重新启动节点而不是停止节点。

  • S2D 无法防止影响整个集群的联网或数据中心故障。要降低风险,请考虑使用专用主机来确保实例不放入同一机架中。

下图显示了两个节点的 EC2 Windows S2D 集群的架构,该架构在 AWS 中使用了托管在现有堡垒计算机上的文件共享见证。


			
			两个节点的 EC2 S2D 集群

步骤 1:启动域加入实例

所有 Nitro 实例均支持使用 EBS 和/或 NVMe 的 Storage Spaces Direct。所有最新一代基于 Xen 的实例都支持 Storage Spaces Direct,并且安装了 AWS PV 驱动程序 8.2.3 或更高版本。可通过使用 I3 实例获得最佳存储性能,因为这种实例提供了具有 NVMe 和高网络性能的本地实例存储。在 Amazon EC2 上配置 S2D 需要至少包含 2 个但不能超过 16 个实例的集群。其中每个实例必须至少具有两个 NVMe 设备,这些设备在两个节点之间具有高性能网络连接并运行 Windows Server 2016。有关更多信息,请参阅 Microsoft 文档中的 Storage Spaces Direct 硬件要求

我们建议 I3 实例大小是因为它满足 S2D 硬件要求 并包含最大和最快的可用实例存储设备。此外,它还包含增强联网,这为每个实例最大限度地提供了 S2D 可用资源。您可以使用 M5D 和 R5D 实例类型,它们至少具有 2 个 NVMe 磁盘,但本地实例存储磁盘将用作 Storage Spaces Direct 集群的缓存磁盘,因此必须至少向每个实例添加 2 个 EBS 卷才能提供容量存储。

我们建议您启动三个实例来利用三向镜像 S2D 容错能力,这使您可以在单个节点上执行维护,同时在配置了见证(如文件共享见证)的情况下在集群中维护容错能力。此外,您还可以使用带两个实例的双向镜像作为比较便宜的解决方案,但有必要使用一个见证,并且在集群节点上进行维护期间将不会维护高可用性。

我们将使用堡垒计算机(充当管理工作站)上托管的文件共享见证部署两个节点的集群架构。每个集群节点都必须部署在不同的子网中。此架构将部署到单可用区,因为 Microsoft 当前不支持带有 Storage Spaces Direct 的延伸集群。但是,由于我们对可用区的极低延迟和高带宽设计,单可用区和多可用的性能将完全相同。

启动集群的实例

  1. 使用 Amazon EC2 控制台或 New-EC2Instance cmdlet 启动两个 i3.8xlarge 实例和一个 t2.medium 实例;前者用于创建集群,后者用作管理工作站并托管文件共享见证。为每个实例使用不同的子网如果您要按照逻辑进行 IP 分配,请在创建时定义主要私有 IP 地址。在此情况下,您将需要为每个集群节点定义一个辅助私有 IP 地址,因为该辅助 IP 随后将分配给集群 VIP。

    要使用 PowerShell 创建每个实例,请使用 New-EC2Instance 命令。

    New-EC2Instance -ImageId ami-c49c0dac -MinCount 1 -MaxCount 1 -KeyName myPSKeyPair -SecurityGroupId mySGID -InstanceType i3.8xlarge -SubnetId mysubnetID

    要使用 PowerShell 创建 AWS AD 目录,请使用 New-DSMicrosoftAD 命令(或参阅在 AWS 中创建 AWS 托管的 Microsoft AD 目录)。

    New-DSMicrosoftAD -Name corp.example.com –ShortName corp –Password P@ssw0rd –Description “AWS DS Managed” - VpcSettings_VpcId vpc-xxxxxxxx -VpcSettings_SubnetId subnet-xxxxxxxx, subnet-xxxxxxxx

    我们将使用以下 S2D-node1 网络接口配置:

    
	    				
	    				S2D-node1 网络接口配置

    注意

    此集群上部署的每个角色(如 SQL 故障转移集群实例或文件服务器)都将需要在每个节点上有一个额外的辅助 IP 地址。扩展文件服务器角色则例外,它不需要接入点。

    我们将使用以下配置:

    服务器 NetBIOS 名称 IP 地址 子网
                       

    S2D-Node1

                   
                       

    172.16.1.199(主 IP)

    172.16.1.200(辅助 IP,将用于集群 VIP)

    172.16.1.201(辅助 IP,随后将用于 SQL FCI 等角色)

                   

    AZ1(例如 eu-west-1a)

    – 私有子网 1

                       

    S2D-Node2

                   
                       

    172.16.3.199(主 IP)

    172.16.3.200(辅助 IP,将用于集群 VIP)

    172.16.3.201(辅助 IP,随后将用于 SQL FCI 等角色)

                   

    AZ1(例如 eu-west-1a)

    – 私有子网 2

    ADM01

    未指定

    AZ1(例如 eu-west-1a)

    – 公有子网

  2. 您可在创建时使用无缝域加入来将实例加入域。如果您在要启动域后加入这些域,请使用 Add-Computer 命令。我们建议使用 SSM 和 AWS Directory Service 将 EC2 实例无缝加入域

    本教程其余部分中的步骤需要使用对每个实例具有本地管理权的域账户执行。在移到该配置之前,根据需要重命名实例。确保安全组和 Windows 防火墙已正确配置,以允许在这些节点上进行远程 PowerShell 连接和集群通信。

步骤 2:安装和配置实例的先决条件

S2D 需要文件服务和故障转移集群 Window 功能以及一个至少 10 Gbps 的网络接口。我们建议您配置 SMB 以使用 SMB 多通道,其中 RSS 客户端连接数与增强型网络适配器的 RSS 队列数相匹配。

将从堡垒实例 ADM01 完成下列步骤。

安装所需的 Windows 功能

  • 在集群节点上安装文件服务和带有管理工具的故障转移集群 Windows 功能。在 ADM01 上仅安装故障转移管理工具。

    注意

    更改“S2D-Node1”和“S2D-Node2”以反映要为两个实例设置的计算机名称;否则,这两个值将不会更改。

    $nodes = "S2D-Node1", "S2D-Node2" foreach ($node in $nodes) { Install-WindowsFeature -ComputerName $node -Name File-Services, Failover-Clustering -IncludeManagementTools } Install-WindowsFeature -Name RSAT-Clustering

配置联网

  1. 启用多通道并设置 RSS 连接数。

    foreach ($node in $nodes) { Invoke-Command -ComputerName $node -ScriptBlock { [int]$RssQCount = (Get-NetAdapterAdvancedProperty | Where DisplayName -like "Maximum Number of RSS Queues").RegistryValue | Select -First 1 $Params = @{ EnableMultiChannel = $true; ConnectionCountPerRssNetworkInterface = $RssQCount; Confirm = $false; } Set-SmbClientConfiguration @Params } }
  2. 配置 RSS。

    foreach ($node in $nodes) { Invoke-Command -ComputerName $node -ScriptBlock { Get-WmiObject –class Win32_processor | ft systemname, Name, DeviceID, NumberOfCores, NumberOfLogicalProcessors $maxvcpu = (Get-WmiObject –class Win32_processor).NumberOfLogicalProcessors Get-NetAdapter | Set-NetAdapterRss -BaseProcessorNumber 2 -MaxProcessors $maxvcpu } }

    注意

    执行此命令期间,您将会看到一个断开连接消息,因为在设置 RSS 配置后网络适配器会重新启动。

    接收端缩放 (RSS) 是 Windows 联网中一项十分重要的技术。RSS 可确保传入网络流量分布在服务器中的可用处理器之间以供处理。如果不使用 RSS,网络处理将绑定到一个处理器,这会将流量限定为大约 4GBps。目前,默认情况下每个 NIC 都启用 RSS,但配置未进行优化。默认情况下每个 NIC 都配置有“基础处理器”0,这意味着它将与其他 NIC 一起从处理器 0 开始处理。要优化配置 RSS,请从处理器 1 开始,这样我们就不会干扰处理器 0 上的默认登录进程。

  3. 将存储空间 I/O 超时值增加为 30 秒(配置到来宾集群时建议这么做)。

    foreach ($node in $nodes) { Invoke-Command -ComputerName $node -ScriptBlock { Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\spaceport\Parameters -Name HwTimeout -Value 0x00007530 -Verbose } }
  4. 重启所有节点以应用所有更改。

    Restart-Computer -ComputerName $nodes -Wait -For Wmi -Force

步骤 3:创建故障转移集群

S2D 是一项在现有故障转移集群上启用的功能。在故障转移集群上启用 S2D 后,它将控制集群中的每个节点的本地存储。因此,我们建议您在创建时安装不带存储的集群,然后启用 S2D。

在 AWS 上创建集群时,您必须从部署节点的每个子网分配静态 IP 地址。在控制台中,它们必须设置为每个节点上的辅助私有 IP 地址。在本教程中,我们在部署每个节点时配置了 172.16.1.200 和 172.16.3.200。

您可以使用内置的 Test-Cluster 命令验证并查看集群配置。

测试并验证集群配置

  1. Storage Spaces DirectInventoryNetworkSystem Configuration 测试运行 Test-Cluster 命令。

    $report = Test-Cluster -Node $nodes -Include 'Storage Spaces Direct', 'Inventory', 'Network', 'System Configuration'
  2. 查看测试结果。

    $reportFilePath = $report.FullName Start-Process $reportFilePath
  3. 使用 New-Cluster 创建集群。虚拟 IP 必须从 AWS 控制台中的辅助私有 IP 地址分配到每个相应的节点。

    $vips = "172.16.1.200", "172.16.3.200" New-Cluster -Name S2D -Node $nodes -StaticAddress $vips -NoStorage
  4. 配置文件共享见证。

    New-Item -ItemType Directory -Path c:\Share\Witness [string]$DomainName = (Get-WmiObject win32_computersystem).domain New-SmbShare -Name fsw -Path c:\Share\Witness -FullAccess ($DomainName + "\Domain Computers") Set-ClusterQuorum -Cluster S2D -FileShareWitness \\$env:COMPUTERNAME\fsw

步骤 4:启用 S2D

当集群准备就绪时,使用 Enable-ClusterS2D 在其中一个节点上启用 S2D,如下所示。由于我们的设置中只有一种类型的磁盘(本地 NVMe),因此我们不会使用任何磁盘作为缓存磁盘。

  1. 使用 Enable-ClusterS2D 命令对 i3 实例类型启用 S2D。

    Enable-ClusterS2D -PoolFriendlyName S2DPool -Confirm:$false -SkipEligibilityChecks:$true -CimSession $nodes[0]
  2. 如果您使用的是带有 NVMe 和 EBS 的 m5d 或 r5d 实例类型,请使用 NVMe 磁盘作为缓存磁盘。该命令将如下所示:

    Enable-ClusterS2D -PoolFriendlyName S2DPool -CacheDeviceModel "NVMe Amazon EC2 NVMe" -Confirm:$false -SkipEligibilityChecks:$true -CimSession $nodes[0]

步骤 5:预配置存储

要预配置存储,请创建一个存储池,然后在该池中创建卷。为了简单起见,默认情况下 Enable-ClusterS2D 命令使用集群中可用的所有磁盘创建一个池。通过此命令,我们将存储池名称配置为了“S2D 池”。

在创建卷后,它们即可供集群中的每个节点访问。然后,可将这些卷分配给集群中的特定角色,如文件服务器角色;或者,也可将这些卷指定为集群共享卷 (CSV)。CSV 可供整个集群访问,这意味着此集群中的每个节点都可以读写此卷。

为提高性能,我们建议您对 CSV 使用固定预配置和 ReFS 文件系统。扇区大小取决于将在集群上部署哪些类型的工作负载。有关扇区大小的更多信息,请参阅 ReFS 和 NTFS 的集群大小建议。为提高本地读取性能,我们建议您使 CSV 与托管应用程序或工作负载的节点保持一致。您可以将多个 CSV 和多个应用程序分布在各节点中。

创建集群共享卷 (CSV)

  • 使用 New-Volume 命令创建一个新的 1TB CSV。

    $Params = @{ FriendlyName = 'CSV1'; FileSystem = 'CSVFS_ReFS'; StoragePoolFriendlyName = 'S2DPool'; Size = 1TB; AllocationUnitSize = 65536; ProvisioningType = 'Fixed'; CimSession = $nodes[0]; } New-Volume @Params

步骤 6:查看 S2D 资源

您配置的 S2D 资源将显示在故障转移集群管理器中。

查看您的 CSV

  1. 打开服务器管理器。

  2. 选择 Tools (工具)Failover Cluster Manager (故障转移集群管理器)

  3. 展开集群的名称,展开 Storage (存储),然后选择 Disks (磁盘)

    此时将列出友好名称、容量、托管 CSV 的节点及其他数据。有关管理 CSV 的更多信息,请参阅在故障转移集群中使用集群共享卷

在 CSV 上合成负载

使用一个工具,如 Diskspd 实用工具。通过 RDP 连接到其中一个集群节点,并使用 Diskspd 工具运行以下命令。

$mycsv = (gci C:\ClusterStorage\ | select -First 1).Fullname .\diskspd.exe -d60 -b4k -o1024 -t32 -L -Sh -r -w50 -W60 -c100G $mycsv\test.dat

查看集群的 S2D 存储性能

使用 Get-StorageHealthReport 命令查看其中一个集群节点上的集群性能。

  1. 打开一个新的 PowerShell 窗口并启动您的合成工作负载。

  2. 在原始 PowerShell 窗口中,运行 Get-StorageSubSystem *cluster* | Get-StorageHealthReport,以便在工作负载正在运行期间查看存储子系统的性能结果。

PS C:\> Get-StorageSubSystem *cluster* | Get-StorageHealthReport CPUUsageAverage : 60.44 % CapacityPhysicalPooledAvailable : 9.82 GB CapacityPhysicalPooledTotal : 13.82 TB CapacityPhysicalTotal : 13.82 TB CapacityPhysicalUnpooled : 0 B CapacityVolumesAvailable : 1.89 TB CapacityVolumesTotal : 2 TB IOLatencyAverage : 257.56 ms IOLatencyRead : 255.87 ms IOLatencyWrite : 259.25 ms IOPSRead : 64327.37 /S IOPSTotal :128582.85 /S IOPSWrite : 64255.49 /S IOThroughputRead : 251.28 MB/S IOThroughputTotal : 502.28 MB/S IOThroughputWrite : 251 MB/S MemoryAvailable : 477.77 GB MemoryTotal : 488 GB

步骤 7:清除

如果您按照本教程使用 EC2 Windows 中的 S2D 创建高度可用的存储集群,则从堡垒服务器创建了包含两个实例的 Storage Spaces Direct 集群,该服务器还充当集群的文件共享见证。您将需要对保持实例正在运行的每小时或不足一小时的时间付费。当您不再需要集群时,请使用 EC2 控制台或适用于 Windows 的 AWS 工具删除为此项目创建的资源。为此,请从故障转移集群管理 mmc 删除集群,终止实例并删除集群的计算机对象及其在 Active Directory 中的相应节点。

其他资源

Storage Spaces Direct 计算器(预览版)

规划 Storage Spaces Direct

Storage Spaces Direct 概述

Storage Spaces Direct 中的容错能力和存储效率