故障域感知

故障转移群集允许多台服务器协同工作以提供高可用性,换句话说即提供节点容错能力。 但如今的企业需要其基础结构提供越来越高的可用性。 要实现类似于云的正常运行时间,即使是极不可能发生的情况(例如底盘故障、机架中断或自然灾害等)也必须进行防护。 这就是为什么 Windows Server 2016 中的故障转移群集引入了底盘、机架和站点容错功能。

容错域和容错能力

容错域和容错能力是密切相关的概念。 容错域是一组共享单一故障点的硬件组件。 要使容错能力达到某个级别,需要相应级别的多个容错域。 例如,要使机架具备容错能力,服务器和数据必须分布在多个机架。

此简短视频概括介绍了 Windows Server 2016 中的容错域

Windows Server 2019 中的容错域感知

容错域感知在 Windows Server 2019 中可用,但默认情况下处于禁用状态,并且必须通过 Windows 注册表启用。

若要在 Windows Server 2019 中启用容错域感知,请转到 Windows 注册表并将 (Get-Cluster).AutoAssignNodeSite 注册表项设置为 1。

    (Get-Cluster).AutoAssignNodeSite=1

若要在 Windows 2019 中禁用容错域感知,请转到 Windows 注册表并将 (Get-Cluster).AutoAssignNodeSite 注册表项设置为 0.

    (Get-Cluster).AutoAssignNodeSite=0

好处

  • 存储空间(包括存储空间直通)使用容错域来最大化数据安全性。 从概念上讲,存储空间复原类似软件定义的分布式 RAID。 所有数据的多个副本都保持同步,如果硬件出现故障,一个副本丢失,其他副本会被重新复制,以修复复原功能。 要获得可能的最佳复原,副本应保存在单独的容错域中。

  • 运行状况服务使用容错域来提供更多有用的警报。 每个容错域可与位置元数据关联,这些数据将自动包含在任何后续警报中。 这些描述符可以协助操作或维护人员,并通过消除硬件歧义减少错误。

  • 拉伸群集使用容错域进行存储关联。 拉伸群集允许远程服务器加入通用群集。 为了获得最佳性能,应用程序或虚拟机应运行在靠近为其提供存储空间的服务器上。 容错域感知启用此存储关联。

容错域级别

有四个规范级别的容错域:站点、机架、底盘和节点。 系统会自动发现节点;其他每个级别是可选的。 例如,如果部署未使用刀片服务器,则底盘级别可能就没有意义。

不同级别的容错域的示意图

使用情况

PowerShell 或 XML 标记可用于指定容错域。 这两种方法是等效的并可提供完整功能。

重要

如果可以,在启用存储空间直通前指定容错域。 这样可为底盘或机架容错启用自动配置,以准备池、层和类似复原及列计数的设置。 一旦创建了池和卷,数据不会追溯地移动以响应容错域拓扑的变化。 启用存储空间直通后,要在底盘或机架之间移动节点,首先应使用 Remove-ClusterNode -CleanUpDisks 从池中退出节点及其驱动器。

使用 PowerShell 定义容错域

Windows Server 2016 引入了以下 cmdlet 来处理容错域:

  • Get-ClusterFaultDomain
  • Set-ClusterFaultDomain
  • New-ClusterFaultDomain
  • Remove-ClusterFaultDomain

此简短视频演示了群集容错域 PowerShell 命令的用法。

使用 Get-ClusterFaultDomain 查看当前容错域拓扑。 它将列出群集中的所有节点,以及已创建的任何底盘、机架或站点。 可以使用类似于 -Type-Name 的参数进行筛选,但这不是必需操作。

Get-ClusterFaultDomain
Get-ClusterFaultDomain -Type Rack
Get-ClusterFaultDomain -Name "server01.contoso.com"

使用 New-ClusterFaultDomain 创建新底盘、机架或站点。 -Type-Name 参数是必需的。 -TypeChassisRackSite 的可能值。 -Name 可以是任意字符串。 (对于 Node 类型的容错域,名称必须是自动设置的实际节点名称)。

New-ClusterFaultDomain -Type Chassis -Name "Chassis 007"
New-ClusterFaultDomain -Type Rack -Name "Rack A"
New-ClusterFaultDomain -Type Site -Name "Shanghai"

重要

Windows Server 无法也不会验证你所创建的任何容错域在实际的物理世界中是否会有响应。 (这可能听起来平淡无奇,但请务必了解。)在物理世界中,如果节点都位于一个机架中,那么在软件中创建两个 -Type Rack 容错域并不能就神奇地提供机架容错能力。 你有责任确保使用这些 cmdlet 创建的拓扑匹配硬件的实际排列方式。

使用 Set-ClusterFaultDomain 将一个容错域移到另一个中。 术语“父项”和“子项”通常用于描述此嵌套关系。 -Name-Parent 参数是必需的。 -Name 提供正在移动的容错域的名称;-Parent 提供目标的名称。 要一次移动多个容错域,请列出它们的名称。

Set-ClusterFaultDomain -Name "server01.contoso.com" -Parent "Rack A"
Set-ClusterFaultDomain -Name "Rack A", "Rack B", "Rack C", "Rack D" -Parent "Shanghai"

重要

移动容错域时,其子项随其移动。 在上面的示例中,如果机架 A 是 server01.contoso.com 的父项,后者不需要单独移动到上海站点 - 由于其父项已存在于此站点,因此它也已在此站点存在,就像在物理世界中一样。

可以在 ParentNameChildrenNames 列中的 Get-ClusterFaultDomain 输出中查看父-子关系。

还可以使用 Set-ClusterFaultDomain 修改容错域的某些其他属性。 例如,可以为任何容错域提供可选 -Location-Description 元数据。 如果提供,此信息将包含在运行状况服务发出的硬件警报中。 此外,还可以使用 -NewName 参数重命名容错域。 不要重命名 Node 类型的容错域。

Set-ClusterFaultDomain -Name "Rack A" -Location "Building 34, Room 4010"
Set-ClusterFaultDomain -Type Node -Description "Contoso XYZ Server"
Set-ClusterFaultDomain -Name "Shanghai" -NewName "China Region"

使用 Remove-ClusterFaultDomain 可删除已创建的底盘、机架或站点。 -Name 参数是必需的。 不能删除包含子项的容错域 – 可以删除子项,或使用 Set-ClusterFaultDomain 将其移动到外部。 要将某个容错域移动到所有其他容错域之外,将该容错域的 -Parent 设置为空字符串 ("")。 无法删除 Node 类型的容错域。 要一次删除多个容错域,请列出它们的名称。

Set-ClusterFaultDomain -Name "server01.contoso.com" -Parent ""
Remove-ClusterFaultDomain -Name "Rack A"

使用 XML 标记定义容错域

使用 XML 极具创意的语法来指定容错域。 建议使用你最喜欢的文本编辑器,如 Visual Studio Code(可从此处免费获取)或记事本,创建一个可以保存并重复使用的 XML 文档。

此简短视频演示了如何使用 XML 指定故障转移群集中的容错域

在 PowerShell 中运行以下 cmdlet:Get-ClusterFaultDomainXML 这将返回群集的当前容错域规范,例如 XML。 该操作反映了每个已发现的 <Node>,这些节点包装在打开和关闭的 <Topology> 标记中。

运行以下操作,将此输出保存到文件中。

Get-ClusterFaultDomainXML | Out-File <Path>

打开该文件,然后添加 <Site><Rack><Chassis> 标记,以指定这些节点如何在站点、机架和底盘间分发。 每个标记必须通过唯一的 Name 进行识别。 对于节点,必须保持默认填充的节点名称。

重要

虽然所有其他标记均为可选,但它们必须遵循可传递的 Site > Rack > Chassis > Node 层次结构,并且必须正确关闭。 除了名称以外,自由格式 Location="..."Description="..." 描述符可以添加到任何标记。

示例:两个站点,每个站点一个机架

<Topology>
  <Site Name="SEA" Location="Contoso HQ, 123 Example St, Room 4010, Seattle">
    <Rack Name="A01" Location="Aisle A, Rack 01">
      <Node Name="Server01" Location="Rack Unit 33" />
      <Node Name="Server02" Location="Rack Unit 35" />
      <Node Name="Server03" Location="Rack Unit 37" />
    </Rack>
  </Site>
  <Site Name="NYC" Location="Regional Datacenter, 456 Example Ave, New York City">
    <Rack Name="B07" Location="Aisle B, Rack 07">
      <Node Name="Server04" Location="Rack Unit 20" />
      <Node Name="Server05" Location="Rack Unit 22" />
      <Node Name="Server06" Location="Rack Unit 24" />
    </Rack>
  </Site>
</Topology>

示例:两个底盘,刀片服务器

<Topology>
  <Rack Name="A01" Location="Contoso HQ, Room 4010, Aisle A, Rack 01">
    <Chassis Name="Chassis01" Location="Rack Unit 2 (Upper)" >
      <Node Name="Server01" Location="Left" />
      <Node Name="Server02" Location="Right" />
    </Chassis>
    <Chassis Name="Chassis02" Location="Rack Unit 6 (Lower)" >
      <Node Name="Server03" Location="Left" />
      <Node Name="Server04" Location="Right" />
    </Chassis>
  </Rack>
</Topology>

要设置新容错域规范,请保存 XML,然后在 PowerShell 中运行操作。

$xml = Get-Content <Path> | Out-String
Set-ClusterFaultDomainXML -XML $xml

本指南仅提供两个示例,但 <Site><Rack><Chassis><Node> 标记可以多种方式进行混合和匹配,以反映部署的任何物理拓扑。 我们希望这些示例可阐明这些标记的灵活性,以及自由格式位置描述符消除它们歧义的价值。

可选:位置和说明元数据

可以为任何容错域提供可选“位置”或“说明”元数据。 如果提供,此信息将包含在运行状况服务发出的硬件警报中。

此简短视频展示了将位置描述符添加到容错域的价值。