使用 Windows PowerShell 创建 Azure Stack HCI 群集

适用于:Azure Stack HCI 版本 22H2 和 21H2

本文介绍如何使用 Windows PowerShell 创建使用存储空间直通的 Azure Stack HCI 超融合群集。 如果希望使用 Windows Admin Center 中的群集创建向导来创建群集,请参阅使用 Windows Admin Center 创建群集

注意

如果要执行 Azure Stack HCI 21H2 的某一个服务器的安装,请使用 PowerShell 来创建群集。

有两种可选的群集类型:

  • 包含一个或两个服务器节点的标准群集,节点全部位于某一个站点中。
  • 包含至少四个跨两个站点的服务器节点的延伸群集,每个站点有两个节点。

对于单一服务器方案,请完成针对一台服务器的相同说明。

注意

单一服务器配置不支持拉伸群集。

在本文中,我们创建名为 Cluster1 的示例群集,该群集由名为 Server1、Server2、Server3 和 Server4 的四个服务器节点组成。

对于拉伸群集方案,我们使用 ClusterS1 作为名称,并使用跨站点 Site1 和 Site2 的四个相同服务器节点。

有关延伸群集的更多详细信息,请参阅延伸群集概述

要使用最少的硬件或无需额外的硬件来测试 Azure Stack HCI,可以查看 Azure Stack HCI 评估指南。 在本指南中,我们将引导你在 Azure VM 内使用嵌套虚拟化体验 Azure Stack HCI。 或尝试为 Azure Stack HCI 创建基于 VM 的实验室教程,在所选服务器上使用嵌套虚拟化创建自己的专用实验室环境,以便为群集部署运行 Azure Stack HCI 的 VM。

在开始之前

在开始之前,请确保:

  • 阅读并了解 Azure Stack HCI 系统要求
  • 阅读并了解 Azure Stack HCI 的物理网络要求主机网络要求
  • 在群集中的每台服务器上安装 Azure Stack HCI OS。 请参阅部署 Azure Stack HCI 操作系统
  • 确保所有服务器都位于正确的时区。
  • 在每台服务器上拥有一个帐户,并且该帐户是本地管理员组成员。
  • 具有在 Active Directory 中创建对象的权限。
  • 对于延伸群集,请在 Active Directory 中预先设置两个站点。

使用 Windows PowerShell

可以在主机服务器上的 RDP 会话中本地运行 PowerShell,也可以从管理计算机远程运行 PowerShell。 本文介绍远程选项。

从某一管理计算机运行 PowerShell 时,请将 -Name-Cluster 参数与所管理的服务器或群集的名称配合使用。 此外,在将 -ComputerName 参数用于服务器节点时,可能需要指定完全限定的域名 (FQDN)。

需要用于 Hyper-V 和故障转移群集的远程服务器管理工​​具 (RSAT) cmdlet 和 PowerShell 模块。 如果管理计算机上的 PowerShell 会话中尚未提供这些 cmdlet 和模块,则可以使用以下命令添加它们:Add-WindowsFeature RSAT-Clustering-PowerShell

步骤 1:设置服务器

首先,连接到每个服务器,将它们加入域(管理计算机所在的域),并安装所需的角色和功能。

步骤 1.1:连接到服务器

若要连接到服务器,首先必须具有网络连接,加入到同一个域或完全受信任的域中,并具有对服务器的本地管理权限。

打开 PowerShell,使用完全限定的域名或要连接到的服务器的 IP 地址。 在每个服务器上运行以下命令后,系统会提示你输入密码。

在此示例中,我们假定这些服务器命名为 Server1、Server2、Server3 和 Server4:

Enter-PSSession -ComputerName "Server1" -Credential "Server1\Administrator"

下面是执行相同操作的另一个示例:

$myServer1 = "Server1"
$user = "$myServer1\Administrator"

Enter-PSSession -ComputerName $myServer1 -Credential $user

提示

从管理计算机运行 PowerShell 命令时,可能会收到类似“WinRM 无法处理请求”的错误。若要解决此问题,请使用 PowerShell 将每个服务器添加到管理计算机的“受信任的主机”列表中。 此列表支持通配符,如 Server*

Set-Item WSMAN:\Localhost\Client\TrustedHosts -Value Server1 -Force

若要查看受信任的主机列表,请键入 Get-Item WSMAN:\Localhost\Client\TrustedHosts

若要清空该列表,请键入 Clear-Item WSMAN:\Localhost\Client\TrustedHost

步骤 1.2:加入域并添加域帐户

在上一步中,已使用本地管理员帐户 <ServerName>\Administrator 连接到每个服务器节点。

若要继续,必须将服务器加入域,并使用每个服务器上本地管理员组中的域帐户。

使用 Enter-PSSession cmdlet 连接到每个服务器并运行以下 cmdlet,并替换服务器名称、域名和域凭据:

Add-Computer -NewName "Server1" -DomainName "contoso.com" -Credential "Contoso\User" -Restart -Force  

如果你的管理员帐户不是域管理员组的成员,则请将你的管理员帐户添加到每个服务器上的本地管理员组中,或者更好的是,添加为管理员使用的组。 可使用以下命令执行此操作:

Add-LocalGroupMember -Group "Administrators" -Member "king@contoso.local"

步骤 1.3:安装角色和功能

下一步是在群集的每个服务器上安装所需的 Windows 角色和功能。 下面是要安装的角色:

  • BitLocker
  • 数据中心桥接
  • 故障转移群集
  • 文件服务器
  • FS-Data-Deduplication 模块
  • Hyper-V
  • Hyper-V PowerShell
  • RSAT-Clustering-PowerShell 模块
  • RSAT-AD-PowerShell 模块
  • NetworkATC
  • NetworkHUD
  • SMB 带宽限制
  • 存储副本(适用于拉伸群集)

请对每台服务器使用以下命令(如果你是通过远程桌面连接的,请省略此处及后续命令中的 -ComputerName 参数):

Install-WindowsFeature -ComputerName "Server1" -Name "BitLocker", "Data-Center-Bridging", "Failover-Clustering", "FS-FileServer", "FS-Data-Deduplication", "FS-SMBBW", "Hyper-V", "Hyper-V-PowerShell", "RSAT-AD-Powershell", "RSAT-Clustering-PowerShell", "NetworkATC", "NetworkHUD", "Storage-Replica" -IncludeAllSubFeature -IncludeManagementTools

若要同时在群集中的所有服务器上运行该命令,请使用以下脚本,修改开头的变量列表以适应你的环境:

# Fill in these variables with your values
$ServerList = "Server1", "Server2", "Server3", "Server4"
$FeatureList = "BitLocker", "Data-Center-Bridging", "Failover-Clustering", "FS-FileServer", "FS-Data-Deduplication", "Hyper-V", "Hyper-V-PowerShell", "RSAT-AD-Powershell", "RSAT-Clustering-PowerShell", "NetworkATC", "NetworkHUD", "FS-SMBBW", "Storage-Replica"

# This part runs the Install-WindowsFeature cmdlet on all servers in $ServerList, passing the list of features in $FeatureList.
Invoke-Command ($ServerList) {
    Install-WindowsFeature -Name $Using:Featurelist -IncludeAllSubFeature -IncludeManagementTools
}

接下来,重启所有服务器:

$ServerList = "Server1", "Server2", "Server3", "Server4"
Restart-Computer -ComputerName $ServerList -WSManAuthentication Kerberos

步骤 2:准备群集设置

接下来,请验证服务器是否已准备好进行群集。

作为健全性检查,请考虑运行以下命令以确保服务器尚未属于群集:

使用 Get-ClusterNode 显示所有节点:

Get-ClusterNode

使用 Get-ClusterResource 显示所有群集节点:

Get-ClusterResource

使用 Get-ClusterNetwork 显示所有群集网络:

Get-ClusterNetwork

步骤 2.1:准备驱动器

启用存储空间直通之前,请确保永久性驱动器为空。 运行以下脚本以删除所有旧分区及其他数据。

注意

从脚本中排除任何附加到服务器节点的可移动驱动器。 例如,如果要从某个服务器节点本地运行此脚本,则不建议擦除可能用于部署集群的可移动驱动器。

# Fill in these variables with your values
$ServerList = "Server1", "Server2", "Server3", "Server4"

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

步骤 2.2:测试群集配置

在此步骤中,请确保服务器节点已正确配置以创建群集。 Test-Cluster cmdlet 用于运行测试,以验证你的配置是否适合用作超融合群集。 以下示例使用 -Include 参数,并指定了特定的测试类别,以确保验证中包含正确的测试。

Test-Cluster -Node $ServerList -Include "Storage Spaces Direct", "Inventory", "Network", "System Configuration"

步骤 3:创建群集

现在,可以使用在前面的步骤中已验证的服务器节点来创建群集。

创建群集时,可能会收到一条显示 "There were issues while creating the clustered role that may prevent it from starting. For more information, view the report file below." 的警告,你可以放心地忽略此警告。 出现此警告是因为没有可供群集见证使用的磁盘。 群集见证将在后续步骤中创建。

注意

如果服务器使用的是静态 IP 地址,请通过添加以下参数并指定 IP 地址来修改以下命令以反映静态 IP 地址:-StaticAddress <X.X.X.X>;

$ClusterName="cluster1" 
New-Cluster -Name $ClusterName –Node $ServerList –nostorage

在创建群集后,通过 DNS 在整个域中复制群集名称可能要花费一些时间,尤其是在将工作组服务器新加到 Active Directory 的情况下。 虽然群集可能显示在 Windows Admin Center 中,但可能尚不能连接到它。

为了确保所有群集资源都处于联机状态,建议进行以下检查:

Get-Cluster -Name $ClusterName | Get-ClusterResource

如果一段时间后解析群集未成功,则在大多数情况下,你可以使用其中一个群集服务器的名称代替群集名称进行连接。

步骤 4:配置主机网络

如果运行的是 Azure Stack HCI 版本 21H2 或更高版本,Azure 推荐使用网络 ATC 来部署主机网络。 否则,请参阅主机网络要求以了解特定要求和信息。

如果为适配器指定了一个或多个意向类型,则网络 ATC 可以自动部署预期的网络配置。 有关特定意向类型的详细信息,请参阅:网络流量类型

步骤 4.1:查看物理适配器

在其中一个群集节点上,运行 Get-NetAdapter 查看物理适配器。 确保群集中的每个节点具有相同的命名物理适配器,并且它们报告状态为“正常运行”。

Get-NetAdapter -Name pNIC01, pNIC02 -CimSession $ClusterName | Select Name, PSComputerName

如果物理适配器名称在群集中的各节点之间有所不同,可以使用 Rename-NetAdapter 对其进行重命名。

Rename-NetAdapter -Name oldName -NewName newName

步骤 4.2:配置意向

在此示例中,将创建一个意向,用于指定计算和存储意向。 有关更多意向示例,请参阅使用网络 ATC 简化主机网络

运行以下命令,将存储和计算意向类型添加到 pNIC01 和 pNIC02。 请注意,我们指定了 -ClusterName 参数。

Add-NetIntent -Name Cluster_ComputeStorage -Compute -Storage -ClusterName $ClusterName -AdapterName pNIC01, pNIC02

在进行某些初始验证后,该命令应立即返回。

步骤 4.3:验证意向部署

运行 Get-NetIntent cmdlet 以查看群集意向。 如果有多个意向,可指定 Name 参数,以便仅查看特定意向的详细信息。

Get-NetIntent -ClusterName $ClusterName

若要查看意向的预配状态,请运行 Get-NetIntentStatus 命令:

Get-NetIntentStatus -ClusterName $ClusterName -Name Cluster_ComputeStorage

请注意显示为 Provisioning、Validating、Success 或 Failure 的状态参数。

状态应在几分钟后显示为成功。 如果没有出现成功状态或状态参数显示为 Failure,请检查事件查看器中是否存在问题。

注意

目前,网络 ATC 不会为其管理的任何适配器配置 IP 地址。 Get-NetIntentStatus 报告状态完成后,应将 IP 地址添加到适配器。

步骤 5:设置站点(延伸群集)

仅当在两个站点之间创建拉伸群集且每个站点中至少有两台服务器时,此任务才适用。

注意

如果已经预先设置了 Active Directory 站点和服务,则无需按下一部分所述来手动创建站点。

步骤 5.1:创建站点

在下面的 cmdlet 中,“FaultDomain”只是站点的另一个名称。 本示例使用“ClusterS1”作为延伸群集的名称。

New-ClusterFaultDomain -CimSession $ClusterName -FaultDomainType Site -Name "Site1"
New-ClusterFaultDomain -CimSession $ClusterName -FaultDomainType Site -Name "Site2"

使用 Get-ClusterFaultDomain cmdlet 验证是否已为群集创建了两个站点。

Get-ClusterFaultDomain -CimSession $ClusterName

步骤 5.2:分配服务器节点

接下来,我们将四个服务器节点分配给其各自的站点。 在下面的示例中,Server1 和 Server2 分配给 Site1,而 Server3 和 Server4 分配给 Site2。

Set-ClusterFaultDomain -CimSession $ClusterName -Name "Server1", "Server2" -Parent "Site1"
Set-ClusterFaultDomain -CimSession $ClusterName -Name "Server3", "Server4" -Parent "Site2"

使用 Get-ClusterFaultDomain cmdlet 验证节点是否已在正确的站点中。

Get-ClusterFaultDomain -CimSession $ClusterName

步骤 5.3:设置首选站点

你还可以定义全局首选站点,这意味着指定的资源和组必须在首选站点上运行。 可使用以下命令在站点级别定义此设置:

(Get-Cluster).PreferredSite = "Site1"

为延伸群集指定首选站点具有以下优势:

  • 冷启动 - 冷启动期间,虚拟机将放置在首选站点中

  • 仲裁投票

    • 对于动态仲裁,将首先从被动(复制)站点减少权重,以确保在所有其他条件都相同的情况下,首选站点仍然存在。 此外,在发生诸如非对称网络连接失败一类的事件后,在重组期间,将首先从被动站点中删除服务器节点。

    • 在两个站点的仲裁拆分期间,如果无法联系群集见证,则会自动选择首选站点获胜。 然后,被动站点中的服务器节点会退出群集成员资格,从而使群集可以承受同时产生的 50% 的投票损失。

还可以在群集角色或组级别配置首选站点。 在这种情况下,可以为每个虚拟机组配置不同的首选站点,从而使站点处于活动状态,且对于特定虚拟机而言是首选站点。

步骤 5.4:使用网络 ATC 设置拉伸群集

在版本 22H2 之后,可以使用网络 ATC 设置延伸群集。 网络 ATC 将“延伸”添加为版本 22H2 中的意向类型。 若要使用网络 ATC 通过延伸群集部署意向,请运行以下命令:

Add-NetIntent -Name StretchIntent -Stretch -AdapterName "pNIC01", "pNIC02"

使用网络 ATC 进行部署时,还可以将延伸意向与其他意向组合使用。

SiteOverride

可以根据步骤 5.1-5.3 将预先创建的站点添加到使用网络 ATC 部署的延伸意向中。 网络 ATC 使用 SiteOverride 来处理它。 若要创建 SiteOverride,请运行:

 $siteOverride = New-NetIntentSiteOverrides

创建 siteOverride 后,可以为 siteOverride 设置任何属性。 确保 siteOverride 的 name 属性的名称与站点在 ClusterFaultDomain 中的名称完全相同。 ClusterFaultDomain 和 siteOverride 之间的名称不匹配会导致不应用 siteOverride。

可以为特定 siteOverride 设置的属性有:Name、StorageVlan 和 StretchVlan。 例如,通过以下方式为两个站点(site1 和 site2)创建两个 siteOverride:

$siteOverride1 = New-NetIntentSiteOverrides
$siteoverride1.Name = "site1"
$siteOverride1.StorageVLAN = 711
$siteOverride1.StretchVLAN = 25

$siteOverride2 = New-NetIntentSiteOverrides
$siteOverride2.Name = "site2"
$siteOverride2.StorageVLAN = 712
$siteOverride2.StretchVLAN = 26

可在 PowerShell 窗口中运行 $siteOverride1$siteOverride2,确保以所需方式设置所有属性。

最后,若要将一个或多个 siteOverride 添加到意向,请运行:

Add-NetIntent -Name StretchIntent -Stretch -AdapterName "pNIC01" , "pNIC02" -SiteOverrides $siteOverride1, $siteOverride2

步骤 6:启用存储空间直通

创建群集后,请使用 Enable-ClusterStorageSpacesDirect cmdlet,该 cmdlet 将启用存储空间直通并自动执行以下操作:

  • 创建存储池: 为群集创建存储池,其名称类似于“Cluster1 存储池”。

  • 创建群集性能历史记录磁盘: 在存储池中创建群集性能历史记录虚拟磁盘。

  • 创建数据和日志卷: 在存储池中创建数据卷和日志卷。

  • 配置存储空间直通缓存:如果存在多个可用于存储空间直通的介质(驱动器)类型,则它将启用最快的介质作为缓存设备(在大多数情况下为读取和写入)

  • 创建层: 创建两个层作为默认层。 其中一个称为“容量”,另一个称为“性能”。 cmdlet 通过组合设备类型和复原能力来分析设备并配置每个层。

对于单一服务器方案,唯一的 FaultDomainAwarenessDefault 是 PhysicalDisk。 Enable-ClusterStorageSpacesDirect cmdlet 会检测单个服务器,并在启用期间自动将 FaultDomainAwarenessDefault 配置为 PhysicalDisk。

对于拉伸群集,Enable-ClusterStorageSpacesDirect cmdlet 还会:

  • 检查是否已设置站点
  • 确定哪些节点位于哪些站点中
  • 确定每个节点具有的可用存储
  • 检查是否在每个节点上均安装了存储副本功能
  • 为每个站点创建一个存储池,并使用站点名称标识它
  • 创建每个存储池中的数据和日志卷 - 每个站点一个

以下命令在多节点群集上启用存储空间直通。 你还可以指定存储池的易记名称,如下所示:

Enable-ClusterStorageSpacesDirect -PoolFriendlyName "$ClusterName Storage Pool" -CimSession $ClusterName

下面是在单节点群集上禁用存储缓存的示例:

Enable-ClusterStorageSpacesDirect -CacheState Disabled

要查看存储池,请使用以下命令:

Get-StoragePool -CimSession $ClusterName

创建群集后

现已创建群集,还需要完成其他重要任务:

后续步骤