在 Windows Server 上部署儲存空間直接存取

適用於:Windows Server 2022、Windows Server 2019、Windows Server 2016

本主題提供用來在 Windows Server 上部署儲存空間直接存取的逐步指示。 若要將儲存空間直接存取部署為 Azure Stack HCI 的一部分,請參閱什麼是 Azure Stack HCI 的部署程序?

提示

想要取得超融合式基礎結構嗎? Microsoft 的建議是,向我們的合作夥伴購買經過驗證的硬體/軟體 Azure Stack HCI 解決方案。 這些解決方案會針對我們的參考架構進行設計、組合及驗證以確保相容性和可靠性,因此您可以快速地啟動並執行。 若要瀏覽可與 Azure Stack HCI 搭配運作的硬體/軟體解決方案目錄,請參閱 Azure Stack HCI 目錄

提示

您可以使用 Hyper-V 虛擬機器 (包括在 Microsoft Azure 中) 來評估沒有硬體的儲存空間直接存取。 您也可以檢閱方便使用的 Windows Server 快速實驗室部署指令碼,這是我們用於定型的部署指令碼。

在您開始使用 Intune 之前

請檢閱儲存空間直接存取的硬體需求,並瀏覽本文件以熟悉整體方法以及與某些步驟相關聯的重要注意事項。

收集以下資訊:

  • 部署選項。 儲存空間直接存取支援兩個部署選項:超融合式和融合式 (也稱為分離式)。 請熟悉每個選項的優點,以決定適合您使用的選項。 下面的步驟 1-3 同時適用於這兩個部署選項。 步驟 4 則只有融合式部署才需要。

  • 伺服器名稱。 請熟悉組織對於電腦、檔案、路徑和其他資源的命名原則。 您必須佈建數部伺服器,每部伺服器都有唯一的名稱。

  • 網域名稱。 請熟悉組織對於網域命名和網域加入的原則。 您會將伺服器加入網域,而且必須指定網域名稱。

  • RDMA 網路功能。 RDMA 通訊協定有兩種類型:iWarp 和 RoCE。 請記下網路介面卡使用的通訊協定,如果使用的是 RoCE,也請記下版本 (v1 或 v2)。 若為 RoCE,也請記下 Top-of-Rack 交換器的型號。

  • VLAN 識別碼。 請記下伺服器上管理 OS 網路介面卡所使用的 VLAN 識別碼 (如果有的話)。 您應該能夠從您的網路管理員取得。

步驟 1︰部署 Windows Server

步驟 1.1:安裝作業系統

第一步是在每部會位於叢集中的伺服器上安裝 Windows Server。 儲存空間直接存取需要 Windows Server Datacenter Edition。 您可以使用 Server Core 安裝選項或具有桌面體驗的伺服器。

當您使用設定精靈安裝 Windows Server 時,您可以選擇的有 Windows Server (指的是 Server Core) 和 Windows Server (具有桌面體驗的伺服器),後者相當於 Windows Server 2012 R2 中提供的完整安裝選項。 如果您未選擇,則會得到 Server Core 安裝選項。 如需詳細資訊,請參閱安裝 Server Core

步驟 1.2:連線到伺服器

本指南將重點放在 Server Core 安裝選項以及從不同的管理系統進行遠端部署/管理,而這必須有:

  • 至少和其管理的伺服器一樣新的 Windows Server 或 Windows 10 版本,而且有最新的更新
  • 與其所管理伺服器的網路連線的能力
  • 加入相同網域或完全信任的網域
  • 適用於 Hyper-V 和容錯移轉叢集的遠端伺服器管理工具 (RSAT) 和 PowerShell 模組。 Windows Server 上有 RSAT 工具和 PowerShell 模組,可加以安裝但不安裝其他功能。 您也可以在 Windows 10 管理電腦上安裝遠端伺服器管理工具

在管理系統上,安裝容錯移轉叢集與 Hyper-V 管理工具。 這可以透過伺服器管理員使用「新增角色及功能」精靈完成。 在 [功能] 頁面上,選取 [遠端伺服器管理工具],然後選取要安裝的工具。

進入 PS 工作階段,並使用伺服器名稱,或是您要連線之節點的 IP 位址。 執行此命令之後,系統會提示您輸入密碼,請輸入您在設定 Windows 時指定的系統管理員密碼。

Enter-PSSession -ComputerName <myComputerName> -Credential LocalHost\Administrator

如果您必須執行這項操作多次,下列範例會以在指令碼中更加實用的方式執行相同的操作︰

$myServer1 = "myServer-1"
$user = "$myServer1\Administrator"

Enter-PSSession -ComputerName $myServer1 -Credential $user

提示

如果您要從管理系統進行遠端部署,您可能會收到如下錯誤:WinRM 無法處理要求。若要修正此問題,請使用 Windows PowerShell 將每部伺服器新增至管理電腦上的 [信任主機] 清單:

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

注意:信任主機清單支援萬用字元,例如 Server*

若要檢視 [信任主機] 清單,請輸入 Get-Item WSMAN:\Localhost\Client\TrustedHosts

若要將清單清空,請輸入 Clear-Item WSMAN:\Localhost\Client\TrustedHost

步驟 1.3:加入網域並新增網域帳戶

到目前為止,您已使用本機系統管理員帳戶 <ComputerName>\Administrator 設定個別伺服器。

若要管理儲存空間直接存取,您必須將伺服器加入網域,並使用位於每部伺服器上 Administrators 群組中的 Active Directory Domain Services 網域帳戶。

從管理系統以系統管理員權限開啟 PowerShell 主控台。 使用 Enter-PSSession 連線到每部伺服器,然後執行下列 Cmdlet,並替換成您自己的電腦名稱、網域名稱和網域認證:

Add-Computer -NewName "Server01" -DomainName "contoso.com" -Credential "CONTOSO\User" -Restart -Force

如果儲存體的系統管理員帳戶不是 Domain Admins 群組的成員,請將儲存體的系統管理員帳戶新增至每個節點上的本機 Administrators 群組,或者,更好的方式是新增您用於儲存體系統管理員的群組。 您可以使用下列命令 (或撰寫 Windows PowerShell 函式來這麼做 - 如需詳細資訊,請參閱使用 PowerShell 將網域使用者新增至本機群組):

Net localgroup Administrators <Domain\Account> /add

步驟 1.4:安裝角色和功能

下一步是在每部伺服器上安裝伺服器角色。 若要這麼做,您可以使用 Windows Admin Center伺服器管理員 或 PowerShell。 以下是要安裝的角色:

  • 容錯移轉叢集
  • Hyper-V
  • 檔案伺服器 (如果您想要裝載任何檔案共用,例如用於融合式部署)
  • Data-Center-Bridging (如果您使用 RoCEv2 而非 iWARP 網路介面卡的話)
  • RSAT-Clustering-PowerShell
  • Hyper-V-PowerShell

若要透過 PowerShell 進行安裝,請使用 Install-WindowsFeature Cmdlet。 您可以在單一伺服器上以如下方式加以使用:

Install-WindowsFeature -Name "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer"

若要同時在叢集中的所有伺服器上執行命令,請使用這個少量的指令碼,並修改指令碼開頭的變數清單以符合您的環境。

# Fill in these variables with your values
$ServerList = "Server01", "Server02", "Server03", "Server04"
$FeatureList = "Hyper-V", "Failover-Clustering", "Data-Center-Bridging", "RSAT-Clustering-PowerShell", "Hyper-V-PowerShell", "FS-FileServer"

# This part runs the Install-WindowsFeature cmdlet on all servers in $ServerList, passing the list of features into the scriptblock with the "Using" scope modifier so you don't have to hard-code them here.
Invoke-Command ($ServerList) {
    Install-WindowsFeature -Name $Using:Featurelist
}

步驟 2:設定網路

如果您要在虛擬機器內部署儲存空間直接存取,請略過本節。

儲存空間直接存取需要叢集中的伺服器之間有高頻寬、低延遲的網路功能。 至少需要 10 GbE 的網路功能,且建議使用遠端直接記憶體存取 (RDMA)。 您可以使用 iWARP 或 RoCE,前提是其具有符合您作業系統版本的 Windows Server 標誌,但 iWARP 通常會比較容易設定。

重要

根據您的網路設備 (特別是使用 RoCE v2 時),您可能需要進行一些 Top-of-Rack 交換器設定。 正確的交換器設定很重要,如此才能確保儲存空間直接存取的可靠性和效能。

Windows Server 2016 在 Hyper-V 虛擬交換器內引進了交換器內嵌小組 (SET)。 這可在使用 RDMA 時讓所有網路流量使用相同的實體 NIC 連接埠,從而減少所需的實體 NIC 連接埠數目。 建議針對儲存空間直接存取使用交換器內嵌小組。

交換或無交換的節點互連

  • 已切換:必須正確設定網路交換器,才能處理頻寬和網路類型。 如果使用實作 RoCE 通訊協定的 RDMA,網路裝置和交換器設定會更加重要。
  • 無交換:節點可以使用直接連線進行互連,以避免使用交換器。 每個節點都必須與叢集的其他每個節點直接連線。

如需如何為儲存空間直接存取設定網路功能的指示,請參閱 Windows Server 2016 和 2019 RDMA 部署指南

步驟 3:設定儲存空間直接存取

下列步驟要在管理系統 (與要設定的伺服器相同版本) 上完成。 下列步驟「不」應該使用 PowerShell 工作階段從遠端執行,而應該使用系統管理權限,在管理系統的本機 PowerShell 工作階段中執行。

步驟 3.1:清除磁碟機

在啟用儲存空間直接存取之前,請確定磁碟機是空的:沒有舊的磁碟分割或其他資料。 執行下列指令碼 (替換成您的電腦名稱),以移除所有舊的磁碟分割或其他資料。

警告

此指令碼會永久移除作業系統開機磁碟機以外的任何磁碟機上的任何資料!

# Fill in these variables with your values
$ServerList = "Server01", "Server02", "Server03", "Server04"

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

輸出看起來會像這樣,其中 Count 是每部伺服器中每個模型的磁碟機數目:

Count Name                          PSComputerName
----- ----                          --------------
4     ATA SSDSC2BA800G4n            Server01
10    ATA ST4000NM0033              Server01
4     ATA SSDSC2BA800G4n            Server02
10    ATA ST4000NM0033              Server02
4     ATA SSDSC2BA800G4n            Server03
10    ATA ST4000NM0033              Server03
4     ATA SSDSC2BA800G4n            Server04
10    ATA ST4000NM0033              Server04

步驟 3.2:驗證叢集

在此步驟中,您將執行叢集驗證工具,確保伺服器節點都正確設定以使用儲存空間直接存取建立叢集。 在建立叢集之前執行叢集驗證 (Test-Cluster) 時,會執行測試來驗證設定是否適合而能夠作為容錯移轉叢集順利運作。 下面的範例使用 -Include 參數,然後指定特定的測試類別。 這可確保驗證中包含與儲存空間直接存取相關的測試。

您可以使用下列 PowerShell 命令驗證一組用來做為儲存空間直接存取叢集的伺服器。

Test-Cluster -Node <MachineName1, MachineName2, MachineName3, MachineName4> -Include "Storage Spaces Direct", "Inventory", "Network", "System Configuration"

步驟 3.3:建立叢集

在此步驟中,您將使用下列 PowerShell Cmdlet 建立一個叢集,其中包含您在上一個步驟中已驗證過可用來建立叢集的節點。

建立叢集時,您會收到一則警告指出:「建立叢集角色時發生問題,可能導致它無法啟動。 如需詳細資訊,請檢視下面的報表檔案。」您可以放心忽略這個警告。 這是因為沒有磁碟可供叢集仲裁使用。 建議您在建立叢集之後設定檔案共用見證或雲端見證。

注意

如果伺服器使用靜態 IP 位址,請修改下列命令,新增下列參數並指定 IP 位址:-StaticAddress <X.X.X.X> 以反映靜態 IP 位址。 在下列命令中,ClusterName 預留位置應取代為唯一的 netbios 名稱 (15 個以下的字元)。

New-Cluster -Name <ClusterName> -Node <MachineName1,MachineName2,MachineName3,MachineName4> -NoStorage

叢集建立之後,叢集名稱的 DNS 項目需要一些時間才會被複寫。 時間則取決於環境和 DNS 複寫組態。 如果解析叢集不成功,在大多數情況下,使用節點 (屬於叢集的作用中成員) 的電腦名稱而不是叢集名稱可能會成功。

步驟 3.4:設定叢集見證

建議您為叢集設定見證,讓有三部以上伺服器的叢集可以承受兩個節點失敗或離線的情況。 雙伺服器部署需要一個叢集見證,否則其中一部伺服器離線會導致另一部伺服器也變得無法使用。 您可以使用檔案共用作為見證,或使用雲端見證來搭配這些系統。

如需詳細資訊,請參閱下列主題:

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

建立叢集之後,請使用 Enable-ClusterStorageSpacesDirect PowerShell Cmdlet,讓儲存系統處於儲存空間直接存取模式,並自動執行下列作業︰

  • 建立集區︰建立有類似「S2D on Cluster1」名稱的單一大型集區。

  • 設定儲存空間直接存取快取︰如果有多個媒體 (磁碟機) 類型可供儲存空間直接存取使用,則允許以最快速的快取裝置來執行 (在大部分情況下可讀取和寫入)

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

從管理系統以系統管理員權限開啟的 PowerShell 命令視窗中,起始下列命令。 叢集名稱是您在先前步驟中建立的叢集名稱。 如果此命令在其中一個本機節點上執行,則不需要 -CimSession 參數。

Enable-ClusterStorageSpacesDirect -CimSession <ClusterName>

若要使用上面的命令啟用儲存空間直接存取,您也可以使用節點名稱而不是叢集名稱。 使用節點名稱可能更可靠,因為新建立的叢集名稱可能會發生 DNS 複寫延遲。

此命令完成可能需要幾分鐘的時間,完成之後,系統就可以建立磁碟區。

步驟 3.6:建立磁碟區

建議您使用 New-Volume Cmdlet,因為其可提供最快、最簡單的體驗。 這個單一 Cmdlet 會自動建立虛擬磁碟、為虛擬磁碟建立磁碟分割並將其格式化、建立具有相符名稱的磁碟區,並將其新增至叢集共用磁碟區;一個簡單的步驟舊能完成上述所有作業。

如需詳細資訊,請參閱在儲存空間直接存取中建立磁碟區

步驟 3.7:選擇性地啟用 CSV 快取

您可以選擇性地啟用叢集共用磁碟區 (CSV) 快取,以使用系統記憶體 (RAM) 作為 Windows 快取管理員尚未快取之讀取作業的寫入區塊層級快取。 這可以改善 Hyper-V 等應用程式的效能。 CSV 快取可以提升讀取要求的效能,而且也適用於向外延展檔案伺服器案例。

啟用 CSV 快取會減少可在超融合式叢集上執行 VM 的記憶體數量,因此您必須在儲存體效能與 VHD 可用的記憶體之間取得平衡。

若要設定 CSV 快取的大小,請使用具有儲存體叢集系統管理員權限的帳戶在管理系統上開啟 PowerShell 工作階段,然後使用此指令碼並視情況變更 $ClusterName$CSVCacheSize 變數 (本範例會為每部伺服器設定 2 GB 的 CSV 快取):

$ClusterName = "StorageSpacesDirect1"
$CSVCacheSize = 2048 #Size in MB

Write-Output "Setting the CSV cache..."
(Get-Cluster $ClusterName).BlockCacheSize = $CSVCacheSize

$CSVCurrentCacheSize = (Get-Cluster $ClusterName).BlockCacheSize
Write-Output "$ClusterName CSV cache size: $CSVCurrentCacheSize MB"

如需詳細資訊,請參閱使用 CSV 記憶體內部讀取快取

步驟 3.8:部署超融合式部署的虛擬機器

如果您要部署超融合式叢集,最後一步是在儲存空間直接存取叢集上佈建虛擬機器。

虛擬機器的檔案應該儲存在系統的 CSV 命名空間 (範例︰c:\ClusterStorage\Volume1),就像叢集容錯移轉叢集上的叢集 VM。

您可以使用內建工具或其他工具來管理儲存體和虛擬機器,例如 System Center Virtual Machine Manager。

步驟 4:部署融合式解決方案的向外延展檔案伺服器

如果您要部署融合式解決方案,下一步是建立向外延展檔案伺服器執行個體,並設定一些檔案共用。 如果您要部署超融合式叢集,則您已完成且不需要閱讀這一節。

步驟 4.1:建立向外延展檔案伺服器角色

為檔案伺服器設定叢集服務的下一步是建立叢集檔案伺服器角色,也就是當您建立持續可用檔案共用裝載所在的向外延展檔案伺服器執行個體時。

使用伺服器管理員建立向外延展檔案伺服器角色

  1. 在 [容錯移轉叢集管理員] 中選取叢集,移至 [角色],然後按一下 [設定角色...]
    [高可用性精靈] 便會出現。

  2. 在 [選取角色] 頁面上,按一下 [檔案伺服器]

  3. 在 [檔案伺服器類型] 頁面上,按一下 [用於應用程式資料的向外延展檔案伺服器]

  4. 在 [用戶端存取點] 頁面上,輸入向外延展檔案伺服器的名稱。

  5. 移至 [角色] 並確認 [狀態] 資料行在所建立的叢集檔案伺服器角色旁顯示 [執行中],以確認您已成功設定角色,如圖 1 所示。

    顯示向外延展檔案伺服器之容錯移轉叢集管理員的螢幕擷取畫面

    圖 1 容錯移轉叢集管理員,顯示具有 [執行中] 狀態的向外延展檔案伺服器

注意

在建立叢集角色後,系統可能會發生些許網路傳播延遲,而導致您會有幾分鐘或更長的時間無法在其上建立檔案共用。

使用 Windows PowerShell 建立向外延展檔案伺服器角色

在連線至檔案伺服器叢集的 Windows PowerShell 工作階段中,輸入下列命令以建立向外延展檔案伺服器角色,並變更 FSCLUSTER 以符合叢集的名稱,以及變更 SOFS 以符合您想要提供給向外延展檔案伺服器角色的名稱:

Add-ClusterScaleOutFileServerRole -Name SOFS -Cluster FSCLUSTER

注意

在建立叢集角色後,系統可能會發生些許網路傳播延遲,而導致您會有幾分鐘或更長的時間無法在其上建立檔案共用。 如果 SOFS 角色立即失敗且不會啟動,可能是因為叢集的電腦物件沒有可用來為 SOFS 角色建立電腦帳戶的權限。 如需相關說明,請參閱此部落格文章:向外延展檔案伺服器角色無法啟動,且出現事件識別碼 1205、1069 和 1194

步驟 4.2:建立檔案共用

在建立虛擬磁碟並將其新增至 CSV 後,就可以在其上建立檔案共用 (每個虛擬磁碟每個 CSV 一個檔案共用)。 若要執行此作業,最簡單的方式可能是透過 System Center Virtual Machine Manager (VMM),因為其會為您處理權限,但如果環境中沒有 VMM,則可以使用 Windows PowerShell 來將部署局部自動化。

請使用 Hyper-V 工作負載的 SMB 共用設定指令碼中包含的指令碼,其會將建立群組和共用的程序局部自動化。 該文章是針對 Hyper-V 工作負載所撰寫的,因此如果您要部署其他工作負載,則可能必須修改設定,或在建立共用後執行其他步驟。 例如,如果您使用 Microsoft SQL Server,則必須向 SQL Server 服務帳戶授與共用和檔案系統的完整控制權。

注意

除非您使用 System Center Virtual Machine Manager 來建立共用,否則您必須在新增叢集節點時更新群組成員資格。

若要使用 PowerShell 指令碼建立檔案共用,請執行下列動作:

  1. 將 Hyper-V 工作負載的 SMB 共用設定中包含的指令碼下載到檔案伺服器叢集的其中一個節點。

  2. 在管理系統上使用網域系統管理員認證開啟 Windows PowerShell 工作階段,然後使用下列指令碼為 Hyper-V 電腦物件建立 Active Directory 群組,並視情況針對您的環境變更變數值:

    # Replace the values of these variables
    $HyperVClusterName = "Compute01"
    $HyperVObjectADGroupSamName = "Hyper-VServerComputerAccounts" <#No spaces#>
    $ScriptFolder = "C:\Scripts\SetupSMBSharesWithHyperV"
    
    # Start of script itself
    CD $ScriptFolder
    .\ADGroupSetup.ps1 -HyperVObjectADGroupSamName $HyperVObjectADGroupSamName -HyperVClusterName $HyperVClusterName
    
  3. 在其中一個儲存體節點上使用系統管理員認證開啟 Windows PowerShell 工作階段,然後使用下列指令碼為每個 CSV 建立共用,並向 Domain Admins 群組和計算叢集授與共用的系統管理權限。

    # Replace the values of these variables
    $StorageClusterName = "StorageSpacesDirect1"
    $HyperVObjectADGroupSamName = "Hyper-VServerComputerAccounts" <#No spaces#>
    $SOFSName = "SOFS"
    $SharePrefix = "Share"
    $ScriptFolder = "C:\Scripts\SetupSMBSharesWithHyperV"
    
    # Start of the script itself
    CD $ScriptFolder
    Get-ClusterSharedVolume -Cluster $StorageClusterName | ForEach-Object {
        $ShareName = $SharePrefix + $_.SharedVolumeInfo.friendlyvolumename.trimstart("C:\ClusterStorage\Volume")
        Write-host "Creating share $ShareName on "$_.name "on Volume: " $_.SharedVolumeInfo.friendlyvolumename
        .\FileShareSetup.ps1 -HyperVClusterName $StorageClusterName -CSVVolumeNumber $_.SharedVolumeInfo.friendlyvolumename.trimstart("C:\ClusterStorage\Volume") -ScaleOutFSName $SOFSName -ShareName $ShareName -HyperVObjectADGroupSamName $HyperVObjectADGroupSamName
    }
    

步驟 4.3 啟用 Kerberos 限制委派

若要設定 Kerberos 限制委派以管理遠端案例並提升即時移轉的安全性,請從其中一個儲存體叢集節點使用 Hyper-V 工作負載的 SMB 共用設定中包含的 KCDSetup.ps1 指令碼。 以下是指令碼的一些包裝函式:

$HyperVClusterName = "Compute01"
$ScaleOutFSName = "SOFS"
$ScriptFolder = "C:\Scripts\SetupSMBSharesWithHyperV"

CD $ScriptFolder
.\KCDSetup.ps1 -HyperVClusterName $HyperVClusterName -ScaleOutFSName $ScaleOutFSName -EnableLM

其他參考