使用 Windows PowerShell 建立 Azure Stack HCI 叢集

適用于:Azure Stack HCI 版本 22H2、21H2 和 20H2

在本文中,您將瞭解如何使用 Windows PowerShell 來建立使用儲存空間直接存取的 Azure Stack HCI 超融合式叢集。 如果您想要使用 Windows Admin Center 中的「叢集建立」精靈來建立叢集,請參閱使用 Windows Admin Center 建立叢集

注意

如果您要安裝 Azure Stack HCI 21H2 的單一伺服器,請使用 PowerShell 來建立叢集。

您可以選擇兩種叢集類型的其中一種:

  • 標準叢集:包含一或兩個皆位於單一站台的伺服器節點。
  • 延展式叢集:至少包含四個跨兩個站台的伺服器節點,每個站台至少有兩個節點。

針對單一伺服器案例,請為一部伺服器完成下列相同指示。

注意

單一伺服器設定不支援延展式叢集。

在本文中,我們將建立名為 Cluster1 的範例叢集,其是由名為 Server1、Server2、Server3 和 Server4 的四個伺服器節點所組成。

針對延展式叢集案例,我們將使用 ClusterS1 作為名稱並使用延伸至 Site1 和 Site 2 站台之間的四個相同伺服器節點。

如需延展式叢集的詳細資訊,請參閱延展式叢集的概觀

如果您想要測試 Azure Stack HCI,但硬體有限或沒有備用硬體,請參閱 Azure Stack HCI 評估指南,我們將引導您在 Azure VM 中使用巢狀虛擬化體驗 Azure Stack HCI。 或者,請嘗試建立 Azure Stack HCI 的 VM 實驗室教學課程,在所選的伺服器上使用巢狀虛擬化建立自己的私人實驗室環境來部署執行 Azure Stack HCI 的 VM 以供叢集之用。

開始之前

在您開始前,請確定:

使用 Windows PowerShell

您可以在主機伺服器的 RDP 工作階段中本機執行 PowerShell,或從管理電腦遠端執行 PowerShell。 本文將討論遠端選項。

從管理電腦執行 PowerShell 時,請將 -Name-Cluster 參數包含在您所管理伺服器或叢集的名稱中。 此外,將 -ComputerName 參數用於伺服器節點時,也必須指定完整網域名稱 (FQDN)。

針對 Hyper-V 和容錯移轉叢集,您也需要遠端伺服器管理工具 (RSAT) Cmdlet 和 PowerShell 模組。 如果您管理電腦上的 PowerShell 工作階段尚未有上述的項目可供使用,您可以使用下列命令加以新增: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  

如果您的系統管理員帳戶不是 Domain Admins 群組的成員,請在每個伺服器上將您的系統管理員帳戶新增至本機系統管理員群組,或您甚至可以新增您用於系統管理員的群組。 若要這麼做,您可使用下列命令:

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

步驟 1.3:安裝角色和功能

接著,在叢集的每個伺服器上安裝必要 Windows 角色和功能。 以下是要安裝的角色:

  • BitLocker
  • 資料中心橋接
  • 容錯移轉叢集
  • 檔案伺服器
  • FS-Data-Deduplication 模組
  • Hyper-V
  • Hyper-V PowerShell
  • RSAT-AD-Clustering-PowerShell 模組
  • RSAT-AD-PowerShell 模組
  • NetworkATC
  • NetworkHUD
  • 儲存體複本 (針對延展式叢集)

對每部伺服器使用下列命令 (如果您透過遠端桌面連線,則在此處和後續命令省略 -ComputerName 參數):

Install-WindowsFeature -ComputerName "Server1" -Name "BitLocker", "Data-Center-Bridging", "Failover-Clustering", "FS-FileServer", "FS-Data-Deduplication", "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", "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 位址:-StaticAddress <X.X.X.X>;,來修改下列參數並反映靜態 IP 位址。

$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 版或更新版本,Microsoft 建議您使用網路 ATC 以部署主機網路。 否則,如需特定需求和資訊,請參閱主機網路需求

如果您為介面卡指定一或多個意圖類型,網路 ATC 可以自動化預定網路設定的部署。 如需特定意圖類型的詳細資訊,請參閱: 網路流量類型

步驟 4.1:檢查實體介面卡

在其中一個叢集節點上,執行 Get-NetAdapter 以檢閱實體介面卡。 確定叢集中的每個節點都有相同命名的實體介面卡且回報的狀態為 'Up' (啟動)。

Get-NetAdapter -Name pNIC01, pNIC02 -CimSession (Get-ClusterNode).Name | 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

請注意,狀態參數會顯示正在佈建、正在驗證、成功、失敗。

狀態應會在幾分鐘內顯示成功。 如果未發生此情況或您看到狀態參數失敗,請檢查式事件檢視器以瞭解問題。

注意

網路 ATC 目前不會設定任何其受管理介面卡的 IP 位址。 Get-NetIntentStatus 回報狀態已完成後,您應將 IP 位址新增至介面卡。

步驟 5:設定站台 (延展式叢集)

僅當您在兩個站台之間建立延展式叢集且每個站台中至少有兩部伺服器時,才適用這項工作。

注意

如果您預先已設定 Active Directory 站台及服務,則不須依下列所述手動建立站台。

步驟 5.1:建立站台

在下方的 Cmdlet 中,FaultDomain 僅是站台的另一個名稱。 此範例會使用 "ClusterS1" 作為延展式叢集的名稱。

New-ClusterFaultDomain -CimSession "ClusterS1" -FaultDomainType Site -Name "Site1"
New-ClusterFaultDomain -CimSession "ClusterS1" -FaultDomainType Site -Name "Site2"

使用 Get-ClusterFaultDomain Cmdlet 確認已為叢集建立兩個站台。

Get-ClusterFaultDomain -CimSession "ClusterS1"

步驟 5.2:指派伺服器節點

接著,我們會將四個伺服器節點指派給各自的站台。 在下方範例中,Server1 和 Server2 指派給 Site1,而 Server3 和 Server4 則指派給 Site2。

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

使用 Get-ClusterFaultDomain Cmdlet 確認節點皆位於正確的站台。

Get-ClusterFaultDomain -CimSession "ClusterS1"

步驟 5.3:設定慣用站台

您也可以定義全域慣用站台,這表示指定的資源和群則皆必須在慣用的站台上執行。 您也可以使用下列命令,在站台層級中定義此設定:

(Get-Cluster).PreferredSite = "Site1"

為延伸叢集指定慣用的站台有下列優點:

  • 冷啟動 - 在冷啟動期間,虛擬機器會置於慣用的站台

  • 仲裁投票

    • 使用動態仲裁時,會先從被動 (已複寫) 站台減少加權,確保在所有其他項目相等時,慣用的站台仍存留其中。 此外,伺服器節點會在非對稱網路連線失敗等事件之後,先從被動月臺剪除。

    • 在仲裁分割成兩個站台期間,如果無法連線至叢集見證,則會自動將慣用的站台選為贏。 被動站台中的伺服器節點則會中斷叢集成員資格。 這可允許叢集在同時具有 50% 輸票數 (Loss of Votes) 時存留。

您也可以在叢集角色或群組層級設定慣用的站台。 在此情況下,每個虛擬機器群組可以設定不同的慣用站台。 這可讓站台處於作業中並慣用於特定虛擬機器。

步驟 5.4:使用網路 ATC 設定 Stretch Clustering

22H2 版之後,您可以使用網路 ATC 來設定 Stretch 叢集。 網路 ATC 會將 Stretch 新增為 22H2 版的意圖類型。 若要使用網路 ATC 使用 Stretch 叢集部署意圖,請執行下列命令:

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

使用網路 ATC 部署時,延展意圖也可以與其他意圖結合。

SiteOverrides

根據步驟 5.1-5.3,您可以將預先建立的網站新增至使用網路 ATC 部署的延展意圖。 網路 ATC 會使用 SiteOverrides 來處理此作業。 若要建立 SiteOverride,請執行:

 $siteOverride = New-NetIntentSiteOverrides

建立 siteOverride 之後,您可以設定 siteOverride 的任何屬性。 您可以針對特定 siteOverride 設定的屬性清單為:Name、StorageVlan、StretchVlan 和 ManagementVlan。 例如:

$siteoverride.Name = "A"
$siteoverride.StorageVLAN = 711
$siteoverride.StretchVLAN = 25

最後,執行 $siteOverride 以確定所有屬性都以所需的方式設定。

最後,若要將一或多個 siteOverrides 新增至您的意圖,請執行:

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

步驟 6:啟用儲存空間直接存取

建立叢集後,請使用 Enable-ClusterStorageSpacesDirect Cmdlet 來啟用儲存空間直接存取並自動執行下列動作:

  • 建立存放集區:為叢集建立具有名稱的存放集區,例如 "Cluster1 Storage Pool"。

  • 建立叢集效能歷程記錄磁碟:在存放集區中,建立叢集效能歷程記錄虛擬磁碟。

  • 建立資料和記錄磁碟區:在存放集區中,建立資料磁碟區和記錄磁碟區。

  • 設定儲存空間直接存取快取:如果有多個媒體 (磁碟機) 可供儲存空間直接存取使用,可讓快取磁碟機以最快速度進行 (在大部分讀取和寫入情況下)。

  • 建立階層:建立兩個階層作為預設階層。 一個稱為「容量」,另一個稱為「效能」。 此 Cmdlet 會分析裝置,並使用混合的裝置類型和復原功能來設定每一層。

針對單一伺服器案例,唯一 FaultDomainAwarenessDefault 是 PhysicalDisk。 Enable-ClusterStorageSpacesDirect Cmdlet 會偵測單一伺服器,並在啟用期間自動將 FaultDomainAwarenessDefault 設定為 PyhsicalDisk。

針對延展式叢集,Enable-ClusterStorageSpacesDirect Cmdlet 也會執行下列動作:

  • 檢查以查看站台是否皆已設定
  • 決定節點位於的站台
  • 決定每個節點的可用儲存空間
  • 檢查以查看是否已在每個節點上安裝儲存體複本功能
  • 建立每個站台的存放集區,並以站台的名稱加以識別
  • 在每個存放集區中建立資料和記錄磁碟區 (每一站台一組)

下列命令會在多節點叢集上啟用儲存空間直接存取。 您也可以為存放集區指定易記的名稱,如下所示:

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

以下是單一節點叢集上停用儲存空間快取的範例:

Enable-ClusterStorageSpacesDirect -CacheState Disabled

若要查看存放集區,請使用:

Get-StoragePool -CimSession $session

建立叢集之後

現在您已經完成了,但仍必須完成下列重要的工作:

後續步驟