部署群集集

适用于:Windows Server 2019

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

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

优点

集群集合具有以下优势:

  • 通过将多个较小的群集组合成单个大型结构,同时将软件故障边界保留在单个群集中,显著增加了支持的 SDDC 云规模,以便运行高度可用的虚拟机(VM)。 您可以轻松地在群集间迁移 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 路径不会在存储副本故障转移到副本目标群集时自动更改。

  • 存储空间直通无法跨群集集中的成员群集运行。 相反,存储空间直通适用于单个群集,每个群集都有自己的存储池。

建筑

下图演示了一个高层次的群集组。

示意图显示群集集。

下面提供了所示每个元素的摘要:

管理群集

管理群集托管着群集集的高可用性管理平面和命名空间参考横向扩展文件服务器 (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) 的特定存储要求。

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 管理器中。 若要将其作为集群设置虚拟机添加到群集,请使用以下命令:

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 群集角色。 通过在 Add-ClusterScaleOutFileServerRole cmdlet 中指定 -Infrastructure switch 参数来创建基础设施 SOFS 角色。 例如:

Add-ClusterScaleoutFileServerRole -Name "my_infra_sofs_name" -Infrastructure

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

在超融合配置中,基础设施 SOFS 允许 SMB 客户端(Hyper-V 主机)以持续可用的方式与基础设施 SOFS SMB 服务器进行通信。 此超聚合 SMB 环回 CA 是通过访问其虚拟磁盘 (VHDX) 文件的 VM 实现的,其中具有所有权的 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 备份,您可以仅还原节点的单个群集数据库,也可以执行主导还原,以在所有节点上恢复整个群集数据库。 对于群集集,我们建议先对成员群集执行权威还原,然后再对管理群集执行权威还原。 有关系统状态备份的详细信息,请参阅 备份系统状态和裸机

后续步骤