部署群集集

适用于:Windows Server 2019

本文介绍了如何使用 PowerShell 为 Windows Server 故障转移群集部署群集集。 群集集是一组聚集在一起的故障转移群集。 通过使用群集集,可以将单个软件定义的数据中心 (SDDC) 云中的服务器节点数增加多个数量级。

群集集已经过测试,最多支持 64 个群集节点。 但群集集可缩放到更大的限制,并且不针对某一限制进行硬编码。

优点

群集集提供以下优势:

  • 通过将多个小型群集组合到一个大型结构中,可以显著增加运行高可用性虚拟机 (VM) 所需的 SDDC 云规模,同时将软件故障边界保留在单个群集中。 可以轻松地跨群集集迁移 VM。

  • 增强了复原能力。 相较于单个 16 节点群集,具有四个 4 节点群集的群集集拥有更好的复原能力,因为如果多个计算节点出现故障,生产不会受到影响。

  • 管理故障转移群集生命周期,包括在不影响租户 VM 可用性的情况下加入和退出群集。

  • 跨各群集的 VM 灵活性和统一的存储命名空间。

  • 轻松更改超融合环境中的计算与存储工作负载比率。

  • 在初始 VM 放置和后续迁移中,可受益于各群集中的类似 Azure 的容错域和可用性集

  • 即使群集节点之间的计算和存储硬件不同,也可以使用。

  • 在群集之间实时迁移 VM。

  • 各群集中的类似 Azure 的可用性集和容错域。

  • 在群集之间迁移 SQL Server VM。

要求和限制

使用群集集有一些要求和限制:

  • 群集集中的所有成员群集必须位于同一 Active Directory (AD) 林。

  • 集内的成员服务器必须运行相同的操作系统版本。 虚拟机无法在不同操作系统之间实时迁移。 可以拥有一个由以下选项中的任意一项(而不是多项)组成的群集集:

    • Windows Server 2019 故障转移群集和 Windows Server 2019 故障转移群集
    • Windows Server 2019 故障转移群集和 Windows Server 2019 存储空间直通
    • Windows Server 2019 存储空间直通和 Windows Server 2019 存储空间直通
  • 所有成员服务器都需要相同的处理器硬件,才能在成员群集之间进行实时迁移。否则,必须在虚拟机设置中选择“CPU 处理器兼容性”。

  • 必须手动跨群集实时迁移群集集 VM - 它们无法自动故障转移。

  • 必须在成员群集之间使用存储副本,以实现对群集故障的存储复原能力。 请记住,使用存储副本时,命名空间存储 UNC 路径不会在存储副本故障转移到副本目标群集时自动更改。

  • 存储空间直通无法跨群集集中的成员群集运行。 更确切地说,存储空间直通适用于具有自己的存储池的单个群集。

体系结构

下图大致说明了群集集:

Diagram showing a cluster set.

下面的内容概述了显示的每个元素:

管理群集

管理群集托管着群集集的高可用性管理平面和命名空间参考横向扩展文件服务器 (SOFS)。 管理群集在逻辑上与运行 VM 工作负载的各成员群集无关。 这使得群集集管理平面能够从任意本地群集范围的故障中复原,例如成员群集断电。

群集集命名空间引用 SOFS

群集集的命名空间随管理群集上运行的 SOFS 服务器角色一起提供。 这类似于分布式文件系统命名空间 (DFSN)。 但与 DFSN 不同,群集集命名空间参考元数据在所有群集节点上自动填充,无需任何干预,因此在存储访问路径中几乎不产生性能开销。 此轻量级参考机制不参与 I/O 路径。

群集集命名空间参考 SOFS 上的每个服务器消息块 (SMB) 参考共享均为 SimpleReferral 类型。 此参考允许 SMB 客户端访问成员群集 SOFS 上托管的目标 SMB 共享。 参考永久缓存在每个客户端节点上,并且群集集命名空间会根据需要自动动态更新参考。 即使在重新启动期间,参考信息也会永久缓存在每个群集集节点中。

群集集主节点

成员群集之间的通信是松散耦合的,由群集集主节点 (CS-Master) 资源进行协调。 与其他群集集资源类似,CS-Master 高度可用,并且对各成员群集故障或管理群集节点故障具有复原能力。 通过群集集 WMI 提供程序,CS-Master 为所有群集集管理操作提供管理终结点。

成员群集

成员群集运行 VM 和存储空间直通工作负载。 多个成员群集参与群集集部署,形成更大的 SDDC 云结构。 成员群集在两个关键方面与管理群集不同:成员群集参与容错域和可用性集构造,成员群集的大小适合托管 VM 和存储空间直通工作负载。 因此,跨成员群集移动的 VM 不托管在管理群集上。

群集集辅助角色

CS-Master 与成员群集上称为群集集辅助角色 (CS-Worker) 的群集资源进行交互。 CS-Worker 响应 CS-Master 的请求,包括 VM 放置和资源盘存。 每个成员群集都有一个 CS-Worker 实例。

容错域

容错域是一组可能同时发生故障的硬件和软件。 尽管可以将一个或多个群集同时指定为容错域,但每个节点都可以参与可用性集中的容错域。 容错域边界基于数据中心拓扑、网络体系结构和其他考虑因素。

可用性集

可用性集用于通过对工作负载进行分组和部署来跨容错域配置所需的群集工作负载冗余。 对于双层级应用程序,应在可用性集中为每一层级配置至少两个 VM,这可确保当可用性集中的容错域出现故障时,应用程序将在每个层级中至少有一个 VM 托管在其他容错域。

创建群集集

在以下示例工作流中通过 PowerShell 使用两个群集创建群集集。 此处设置的群集名称为 CSMASTER。

群集名称 基础结构 SOFS 名称
SET-CLUSTER SOFS-CLUSTERSET
CLUSTER1 SOFS-CLUSTER1
CLUSTER2 SOFS-CLUSTER2
  1. 使用运行 Windows Server 2022 或 Windows Server 2019 的管理客户端计算机。

  2. 在管理群集服务器上安装故障转移群集工具。

  3. 创建两个群集成员,并且每个群集中至少包含两个群集共享卷 (CSV)。

  4. 创建跨成员群集的管理群集(物理或来宾)。 这可确保即使可能发生成员群集故障,仍可继续使用群集集管理平面。

  5. 创建群集集:

    New-ClusterSet -Name CSMASTER -NamespaceRoot SOFS-CLUSTERSET -CimSession SET-CLUSTER
    

    注意

    如果使用的是静态 IP 地址,则必须在 New-ClusterSet 命令中加入 -StaticAddress x.x.x.x。

  6. 将群集成员添加到群集集:

    Add-ClusterSetMember -ClusterName CLUSTER1 -CimSession CSMASTER -InfraSOFSName SOFS-CLUSTER1
    Add-ClusterSetMember -ClusterName CLUSTER2 -CimSession CSMASTER -InfraSOFSName SOFS-CLUSTER2
    
  7. 枚举群集集中的所有成员群集:

    Get-ClusterSetMember -CimSession CSMASTER
    
  8. 枚举群集集中的所有成员群集,包括管理群集节点:

    Get-ClusterSet -CimSession CSMASTER | Get-Cluster | Get-ClusterNode
    
  9. 列出所有成员群集的所有服务器节点:

    Get-ClusterSetNode -CimSession CSMASTER
    
  10. 列出群集集中的所有资源组:

    Get-ClusterSet -CimSession CSMASTER | Get-Cluster | Get-ClusterGroup
    
  11. 验证群集集在每个群集成员 CSV 卷的基础结构 SOFS 上是否包含一个 SMB 共享(ScopeName 是基础结构文件服务器名称):

    Get-SmbShare -CimSession CSMASTER
    
  12. 查看群集集、管理群集和各群集成员的群集集调试日志文件:

    Get-ClusterSetLog -ClusterSetCimSession CSMASTER -IncludeClusterLog -IncludeManagementClusterLog -DestinationFolderPath <path>
    
  13. 在所有群集集成员之间配置具有约束委派的 Kerberos

  14. 在群集集中的每个节点上将跨群集 VM 实时迁移身份验证类型配置为 Kerberos:

    foreach($h in $hosts){ Set-VMHost -VirtualMachineMigrationAuthenticationType Kerberos -ComputerName $h }
    
  15. 在群集集中的每个群集成员服务器节点上将管理群集添加到本地管理员组:

    foreach($h in $hosts){ Invoke-Command -ComputerName $h -ScriptBlock {Net localgroup administrators /add <management_cluster_name>$} }
    

创建群集集 VM

创建群集集后,下一步是创建 VM。 应预先执行以下检查:

  • 检查每个群集服务器节点上的可用内存
  • 检查每个群集服务器节点上的可用磁盘空间
  • 检查速度和性能方面的任意特定 VM 存储需求

Get-ClusterSetOptimalNodeForVM 命令在群集集中识别最佳群集和节点,然后在其中部署 VM。 在以下示例中,新建具有以下规格的 VM:

  • 4 GB 可用内存
  • 一个虚拟处理器
  • 最低 10% 的可用 CPU
# Identify the optimal node to create a new virtual machine
$memoryinMB=4096
$vpcount = 1
$targetnode = Get-ClusterSetOptimalNodeForVM -CimSession CSMASTER -VMMemory $memoryinMB -VMVirtualCoreCount $vpcount -VMCpuReservation 10
$secure_string_pwd = convertto-securestring "<password>" -asplaintext -force
$cred = new-object -typename System.Management.Automation.PSCredential ("<domain\account>",$secure_string_pwd)

# Deploy the virtual machine on the optimal node
Invoke-Command -ComputerName $targetnode.name -scriptblock { param([String]$storagepath); New-VM CSVM1 -MemoryStartupBytes 3072MB -path $storagepath -NewVHDPath CSVM.vhdx -NewVHDSizeBytes 4194304 } -ArgumentList @("\\SOFS-CLUSTER1\VOLUME1") -Credential $cred | Out-Null

Start-VM CSVM1 -ComputerName $targetnode.name | Out-Null
Get-VM CSVM1 -ComputerName $targetnode.name | fl State, ComputerName

完成后,将显示 VM 所部署到的群集节点。 对于以上示例,显示结果如下所示:

State         : Running
ComputerName  : 1-S2D2

如果没有足够的内存、CPU 容量或磁盘空间可用来添加 VM,将显示以下错误:

Get-ClusterSetOptimalNodeForVM : A cluster node isn't available for this operation.

创建 VM 后,它将显示在指定的特定节点上的 Hyper-V 管理器中。 若要将其添加为群集集 VM 并添加到群集,请使用以下命令:

Register-ClusterSetVM -CimSession CSMASTER -MemberName $targetnode.Member -VMName CSVM1

完成后,输出如下所示:

Id  VMName  State  MemberName  PSComputerName
--  ------  -----  ----------  --------------
 1  CSVM1     On   CLUSTER1    CSMASTER

如果你已使用现有 VM 创建了群集,则需将 VM 注册到群集集。 若要同时注册所有 VM,请使用以下命令:

Get-ClusterSetMember -Name CLUSTER3 -CimSession CSMASTER | Register-ClusterSetVM -RegisterAll -CimSession CSMASTER

接下来,将 VM 路径添加到群集集命名空间。

例如,假设将现有群集添加到群集集,其中预配置的 VM 位于本地群集共享卷 (CSV)。 VHDX 的路径类似于 C:\ClusterStorage\Volume1\MYVM\Virtual Hard Disks\MYVM.vhdx1

需进行存储迁移,因为按设计 CSV 路径与单个成员群集之间为本地关系,因此跨成员群集对其进行实时迁移后,VM 无法对其进行访问。

在本例中,使用 Add-ClusterSetMember 与横向扩展文件服务器 SOFS-CLUSTER3 将 CLUSTER3 添加到群集集。 若要移动 VM 配置和存储,请使用以下命令:

Move-VMStorage -DestinationStoragePath \\SOFS-CLUSTER3\Volume1 -Name MyVM

完成后,可能会收到以下警告:

WARNING: There were issues updating the virtual machine configuration that may prevent the virtual machine from running. For more information view the report file below.
WARNING: Report file location: C:\Windows\Cluster\Reports\Update-ClusterVirtualMachineConfiguration '' on date at time.htm.

由于没有对虚拟机角色存储配置进行物理更改,因此此警告可能会被忽略。 实际物理位置不变;仅配置路径发生变化。

有关 Move-VMStorage 的详细信息,请参阅 Move-VMStorage

实时迁移群集集中的 VM 涉及以下内容:

Set-VMHost -UseAnyNetworkForMigration $true

例如,若要将群集集 VM 从 CLUSTER1 移动到 CLUSTER3 上的 NODE2-CL3,可使用以下命令:

Move-ClusterSetVM -CimSession CSMASTER -VMName CSVM1 -Node NODE2-CL3

此命令不会移动 VM 存储或配置文件,也不是必需的,因为 VM 的路径仍为 \\SOFS-CLUSTER1\VOLUME1。 将 VM 注册到基础结构文件服务器共享路径后,驱动器和 VM 无需与该 VM 位于同一节点。

创建基础结构横向扩展文件服务器

一个群集上具有一个基础结构 SOFS 群集角色。 基础结构 SOFS 角色是通过将 -Infrastructure 开关参数指定为 Add-ClusterScaleOutFileServerRole cmdlet 创建的。 例如:

Add-ClusterScaleoutFileServerRole -Name "my_infra_sofs_name" -Infrastructure

自动创建的每个 CSV 卷都会自动创建 SMB 共享并为其自动生成基于 CSV 卷名称的名称。 除了使用 CSV 卷创建和修改操作以外,无法直接在 SOFS 角色下创建或修改 SMB 共享。

在超融合配置中,基础结构 SOFS 使 SMB 客户端(Hyper-V 主机)可通过连续可用性 (CA) 与基础结构 SOFS SMB 服务器进行通信。 这种超融合 SMB 环回 CA 是 VM 通过访问其虚拟磁盘 (VHDX) 文件实现的,这些文件中的 VM 标识在客户端和服务器之间转发。 此标识转发允许对 VHDx 文件使用 ACL,就像以前在标准超融合群集配置中一样。

创建群集集后,群集集命名空间依赖于每个成员群集上的基础结构 SOFS,以及管理群集中的基础结构 SOFS。

将成员群集添加到群集集时,可以在该群集上指定基础结构 SOFS(如果已存在)的名称。 如果基础结构 SOFS 不存在,则会在新的成员群集上创建一个新的基础结构 SOFS 角色。 如果成员群集上已存在基础结构 SOFS 角色,则“添加”操作会根据需要将其隐式重命名为指定名称。 群集集不使用任何现有的 SMB 服务器,也不使用成员群集上的非基础结构 SOFS 角色。

创建群集集时,可以选择使用现有 AD 计算机对象作为管理群集上的命名空间根。 创建群集集时会在管理群集上创建基础结构 SOFS 群集角色或重命名现有的基础结构 SOFS 角色。 管理群集上的基础结构 SOFS 用作群集集命名空间参考 SOFS。

创建容错域和可用性集

可以在群集集中配置类似 Azure 的容错域和可用性集。 这有利于群集之间的初始 VM 放置和迁移。

以下示例在一个群集集中具有四个群集。 在集中,一个容错域是使用两个群集创建的,另一个容错域是使用另外两个群集创建的。 这两个容错域构成了可用性集。

在以下示例中,CLUSTER1 和 CLUSTER2 位于容错域 FD1,CLUSTER3 和 CLUSTER4 位于容错域 FD2 。 可用性集为 CSMASTER-AS。

若要创建容错域,可使用以下命令:

New-ClusterSetFaultDomain -Name FD1 -FdType Logical -CimSession CSMASTER -MemberCluster CLUSTER1,CLUSTER2 -Description "First fault domain"

New-ClusterSetFaultDomain -Name FD2 -FdType Logical -CimSession CSMASTER -MemberCluster CLUSTER3,CLUSTER4 -Description "Second fault domain"

若要确保它们已成功创建,可以运行 Get-ClusterSetFaultDomain,它针对 FD1 的输出如下所示:

PS C:\> Get-ClusterSetFaultDomain -CimSession CSMASTER -FdName FD1 | fl *

PSShowComputerName    : True
FaultDomainType       : Logical
ClusterName           : {CLUSTER1, CLUSTER2}
Description           : First fault domain
FDName                : FD1
Id                    : 1
PSComputerName        : CSMASTER

创建容错域后,接下来可创建可用性集:

New-ClusterSetAvailabilitySet -Name CSMASTER-AS -FdType Logical -CimSession CSMASTER -ParticipantName FD1,FD2

若要验证是否已创建,请使用以下命令:

Get-ClusterSetAvailabilitySet -AvailabilitySetName CSMASTER-AS -CimSession CSMASTER

新建 VM 时,请使用 -AvailabilitySet 参数来确定最佳放置节点。 下面是一个示例:

# Identify the optimal node to create a new VM
$memoryinMB=4096
$vpcount = 1
$av = Get-ClusterSetAvailabilitySet -Name CSMASTER-AS -CimSession CSMASTER
$targetnode = Get-ClusterSetOptimalNodeForVM -CimSession CSMASTER -VMMemory $memoryinMB -VMVirtualCoreCount $vpcount -VMCpuReservation 10 -AvailabilitySet $av
$secure_string_pwd = convertto-securestring "<password>" -asplaintext -force
$cred = new-object -typename System.Management.Automation.PSCredential ("<domain\account>",$secure_string_pwd)

从集中删除群集

有时需从群集集中删除群集。 最佳做法是预先将所有群集集 VM 从群集中移出。 可使用 Move-ClusterSetVMMove-VMStorage 命令实现此目的。

如果没有先将 VM 从群集中移出,则正在删除的群集上托管的所有剩余群集集 VM 都将成为绑定到该群集的高可用性 VM(假设它们可以访问其存储)。 群集集还通过不再跟踪已删除的群集及其中运行的 VM 的运行状况,以及通过删除命名空间和对已删除群集上托管的共享的所有参考来自动更新其清单。

例如,可使用以下命令从群集集中删除 CLUSTER1 群集:

Remove-ClusterSetMember -ClusterName CLUSTER1 -CimSession CSMASTER

系统状态备份

系统状态备份将备份群集状态和元数据。 使用 Windows Server 备份可以根据需要仅还原节点的群集数据库,或执行强制还原并在所有节点上回滚整个群集数据库。 对于群集集,建议先对成员群集进行强制还原,然后再对管理群集进行强制还原。 有关系统状态备份的详细信息,请参阅备份系统状态和裸机计算机

后续步骤