この記事では、Windows Server に記憶域スペース ダイレクト 展開する手順について説明します。 Azure Local の一部として記憶域スペース ダイレクトをデプロイするには、「 Azure Local について」を参照してください。
ヒント
ハイパーコンバージド インフラストラクチャの取得を検討されている場合、 Microsoft では、パートナーから検証済みのハードウェア/ソフトウェア Azure ローカル ソリューションを購入することをお勧めします。 これらのソリューションは、互換性と信頼性を確保するために、Microsoft の参照アーキテクチャに照らして設計、組み立て、検証されているため、迅速に稼働させることができます。 Azure Local で動作するハードウェア/ソフトウェア ソリューションのカタログを確認するには、Azure ローカル カタログ
ヒント
Hyper-V 仮想マシン (Microsoft Azure など) を使用して、ハードウェアなしで記憶域スペース ダイレクトを評価することができます。 また、トレーニング目的で使用する 便利な Windows Server の迅速なラボ展開スクリプトを確認することもできます。
開始する前に
記憶域スペース ダイレクトのハードウェア要件 を確認して、一部の手順に関連する全体的なアプローチと重要な注意事項について理解します。
次の情報を収集してください。
展開オプション: 記憶域スペース ダイレクトでは、ハイパーコンバージドとコンバージド (非集約とも呼ばれます) の 2 つの展開オプションサポートされています。 それぞれの利点を理解して、自分に適したオプションを決定します。 この記事の手順 1 から 3 は、両方のデプロイ オプションに適用されます。 手順 4 は、コンバージド展開でのみ必要です。
サーバー名: コンピューター、ファイル、パス、およびその他のリソースに関する組織の名前付けポリシーを理解します。 一意の名前を持つ複数のサーバーをプロビジョニングする必要があります。
ドメイン名: ドメインの名前付けとドメイン参加に関する組織のポリシーを知っておいてください。 サーバーをドメインに参加させ、ドメイン名を指定する必要があります。
RDMA ネットワーク: RDMA プロトコルには、iWarp と RoCE の 2 種類があります。 ネットワーク アダプターでどちらの種類が使用されているか確認し、RoCE の場合は、そのバージョン (v1 または v2) にも注意してください。 RoCE では、Top-of-Rack スイッチのモデルも確認してください。
VLAN ID: サーバー上の管理 OS ネットワーク アダプターに使用する VLAN ID (存在する場合) をメモします。 ネットワーク管理者からこの情報を取得できる必要があります。
手順 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 モジュール。 RSAT ツールと PowerShell モジュールは Windows Server で使用でき、他の機能をインストールしなくてもインストールできます。 また、Windows 10 管理 PC にリモート サーバー管理ツールをインストールすることもできます。
管理システムに、フェールオーバー クラスターと Hyper-V 管理ツールをインストールします。 サーバー マネージャーを使用してこれを行うには、 役割と機能の追加 ウィザードを使用します。 [ 機能 ] ページで、[ リモート サーバー管理ツール] を選択し、インストールするツールを選択します。
PowerShell セッションを入力し、接続先のノードのサーバー名または 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: ドメインに参加してドメイン アカウントを追加する
記憶域スペース ダイレクトを管理するには、サーバーをドメインに参加させ、すべてのサーバーの Administrators グループにある Active Directory Domain Services ドメイン アカウントを使用する必要があります。
管理システムから、管理者特権で PowerShell コンソールを開きます。
Enter-PSSession を使用して各サーバーに接続し、自分のコンピューター名、ドメイン名、ドメイン資格情報を置き換え、次のコマンドレットを実行します。
Add-Computer -NewName "Server01" -DomainName "contoso.com" -Credential "CONTOSO\User" -Restart -Force
ストレージ管理者アカウントが Domain Admins グループのメンバーでない場合は、各ノードのローカル Administrators グループにストレージ管理者アカウントを追加するか、ストレージ管理者に使用するグループを追加します。 次のコマンドを使用するか、PowerShell スクリプトを作成してこの手順を実行できます。 詳細については、「 PowerShell を使用してドメイン ユーザーをローカル グループに追加する」を参照してください。
Net localgroup Administrators <Domain\Account> /add
手順 1.4: 役割と機能をインストールする
次の手順では、 Windows Admin Center、サーバー マネージャー、または PowerShell を使用して、すべての サーバーにサーバーの役割をインストールします。 インストールする役割は次のとおりです。
- フェールオーバー クラスタリング
- Hyper-V
- ファイル サーバー (コンバージド展開など、任意のファイル共有をホストする場合)
- データ センター ブリッジング (iWARP ネットワーク アダプターではなく、RoCEv2 を使用している場合)
- RSAT クラスタ リング PowerShell
- Hyper V の PowerShell
PowerShell を使用してロールをインストールするには、 Install-WindowsFeature コマンドレットを 使用します。 これは、次のように 1 台のサーバーで使用できます。
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 script block 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) をお勧めします。 オペレーティング システムのバージョンに一致する Windows Server ロゴがある限り、iWARP または RoCE を使用できますが、iWARP の設定は簡単です。
重要
ネットワーク機器、特に RoCE v2 によっては、トップ オブ ラック スイッチの構成が必要になる場合があります。 スイッチの適切な構成は、記憶域スペース ダイレクトの信頼性とパフォーマンスを保証するために重要です。
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"
foreach ($server in $serverlist) {
Invoke-Command ($server) {
# Check for the Azure Temporary Storage volume
$azTempVolume = Get-Volume -FriendlyName "Temporary Storage" -ErrorAction SilentlyContinue
If ($azTempVolume) {
$azTempDrive = (Get-Partition -DriveLetter $azTempVolume.DriveLetter).DiskNumber
}
# Clear and reset the disks
$disks = Get-Disk | Where-Object {
($_.Number -ne $null -and $_.Number -ne $azTempDrive -and !$_.IsBoot -and !$_.IsSystem -and $_.PartitionStyle -ne "RAW")
}
$disks | ft Number,FriendlyName,OperationalStatus
If ($disks) {
Write-Host "This action will permanently remove any data on any drives other than the operating system boot drive!`nReset disks? (Y/N)"
$response = read-host
if ( $response.ToLower() -ne "y" ) { exit }
$disks | % {
$_ | Set-Disk -isoffline:$false
$_ | Set-Disk -isreadonly:$false
$_ | Clear-Disk -RemoveData -RemoveOEM -Confirm:$false -verbose
$_ | Set-Disk -isreadonly:$true
$_ | Set-Disk -isoffline:$true
}
#Get-PhysicalDisk | Reset-PhysicalDisk
}
Get-Disk | Where-Object {
($_.Number -ne $null -and $_.Number -ne $azTempDrive -and !$_.IsBoot -and !$_.IsSystem -and $_.PartitionStyle -eq "RAW")
} | Group -NoElement -Property FriendlyName
}
}
出力は次の例のようになります。 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 コマンドレットを使用して、前の手順でクラスターの作成を検証したノードを含むクラスターを作成します。
クラスターを作成すると、"クラスター化されたロールの作成中に問題が発生したため、開始できなくなる可能性があります" という警告が表示されます。詳細については、以下のレポート ファイルを参照してください。"この警告は無視しても問題ありません。 クラスター クォーラムで使用可能なディスクがないことが原因です。 クラスターの作成後にファイル共有監視またはクラウド監視を構成します。
注
サーバーが静的 IP アドレスを使用する場合は、次のパラメーターを追加し、IP アドレスを指定して、静的 IP アドレスを反映するように次のコマンドを変更 -StaticAddress <X.X.X.X>。
次のコマンドで、 ClusterName プレースホルダーを、一意で 15 文字以下の NetBIOS 名に置き換えます。
New-Cluster -Name <ClusterName> -Node <MachineName1,MachineName2,MachineName3,MachineName4> -NoStorage
クラスターを作成した後、クラスター名のドメイン ネーム システム (DNS) エントリがレプリケートされるまでに時間がかかる場合があります。 時間は、環境と DNS レプリケーションの構成によって異なります。 クラスターの解決が成功しない場合は、クラスター名ではなく、クラスターのアクティブメンバーであるノードのマシン名を使用できます。
手順 3.4: クラスターの監視を構成する
3 台以上のサーバーを持つクラスターが 2 台のサーバーの障害またはオフラインに耐えられるように、クラスターの監視を構成します。 2 サーバーのデプロイにはクラスター監視が必要です。それ以外の場合、いずれかのサーバーがオフラインになると、もう一方のサーバーは使用できなくなります。 これらのシステムでは、監視としてファイル共有を使用することも、クラウド監視を使用することもできます。 詳細については、「クォーラム監視をデプロイする」を参照してください。
手順 3.5: 記憶域スペース ダイレクトを有効にする
クラスターを作成したら、 Enable-ClusterStorageSpacesDirect PowerShell コマンドレットを使用します。 このコマンドレットは、記憶域システムを記憶域スペース ダイレクト モードにし、次のタスクを自動的に実行します。
プールを作成する: "Cluster1 上の S2D" のような名前の 1 つの大きなプールを作成します。
記憶域スペース ダイレクト キャッシュを構成します。記憶域スペース ダイレクトで複数のメディア (ドライブ) の種類を使用できる場合は、キャッシュ デバイスとして最速を有効にします (ほとんどの場合、読み取りと書き込み)。
既定のレベルとして 2 つの層を作成します。1 つの層は "容量" と呼ばれ、もう 1 つの層は "パフォーマンス" と呼ばれます。 コマンドレットにより、デバイスが分析されて、各階層がデバイスの種類と回復性を組み合わせて構成されます。
管理システムから、管理者特権の PowerShell ウィンドウを開き、次のコマンドを実行します。 クラスター名は、前の手順で作成したクラスターの名前です。 いずれかのノードでこのコマンドをローカルで実行する場合は、 -CimSession パラメーターは必要ありません。
Enable-ClusterStorageSpacesDirect -CimSession <ClusterName>
このコマンドを実行すると、記憶域スペース ダイレクトが有効になります。 クラスター名の代わりにノード名を使用することもできます。 新しく作成されたクラスター名で DNS レプリケーションの遅延が発生する可能性があるため、ノード名の使用の信頼性が高くなる可能性があります。
このコマンドが完了すると(数分かかる場合があります)、システムはボリュームを作成する準備が整います。
手順 3.6: ボリュームを作成する
New-Volume コマンドレットを使用して、最も高速で簡単なエクスペリエンスを実現します。 この 1 つのコマンドレットは、仮想ディスク、パーティション、およびフォーマットを自動的に作成します。 一致する名前でボリュームを作成し、クラスター共有ボリュームに追加します。すべて簡単な手順で追加できます。
詳細については、「 記憶域スペース ダイレクトでのボリュームの作成」を参照してください。
手順 3.7: 必要に応じて CSV キャッシュを有効にする
クラスター共有ボリューム (CSV) キャッシュを有効にするには、Windows キャッシュ マネージャーがキャッシュしない読み取り操作用の書き込みブロック レベルのキャッシュとしてシステム メモリ (RAM) を使用します。 この機能により、Hyper-V などのアプリケーションのパフォーマンスを向上させることができます。 CSV キャッシュは、読み取り要求のパフォーマンスを向上させ、Scale-Out ファイル サーバーのシナリオにも役立ちます。
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: ハイパーコンバージド展開用の仮想マシンを展開する
ハイパーコンバージド クラスターを展開する場合の最後の手順は、記憶域スペース ダイレクト クラスターに仮想マシンをプロビジョニングする手順です。
フェールオーバー クラスター上のクラスター化された VM と同様に、仮想マシンのファイルをシステムの CSV 名前空間 (例: c:\ClusterStorage\Volume1) に格納します。
付属のツールやその他のツールを使用して、System Center Virtual Machine Manager などの記憶域と仮想マシンを管理することができます。
手順 4: コンバージド ソリューション用にスケールアウト ファイル サーバーを展開する
コンバージド ソリューションをデプロイする場合、次の手順は、Scale-Out ファイル サーバー インスタンスを作成し、ファイル共有を設定することです。
ヒント
ハイパーコンバージド クラスターをデプロイする場合は完了です。このセクションは必要ありません。
フェールオーバー クラスター マネージャーまたは PowerShell を使用して Scale-Out ファイル サーバーロールを作成する方法については、次のいずれかのタブを選択してください。
フェールオーバー クラスター マネージャーを使用して、Scale-Out ファイル サーバーの役割を作成する手順は次のとおりです。
フェールオーバー クラスター マネージャーでクラスターを選択し、[ロール] に移動し、[ロールの構成] を選択します…。
高可用性ウィザードが表示されます。[ロール割の選択] ページで、[ファイル サーバー] を選択します。
[ファイル サーバーの種類] ページで、Scale-Out ファイル サーバーをアプリケーション データのために選択します。
[クライアント アクセス ポイント] ページで、スケールアウト ファイル サーバーの名前を入力します。
[役割] に移動し、[状態] 列で図 1 に示すように、作成したクラスター化されたファイル サーバー ロールの横に [実行中] と表示されていることを確認し、役割が正常に設定されたことを確認します。
図 1 スケールアウト ファイル サーバーが実行中の状態で表示されているフェールオーバー クラスター マネージャー
注
クラスター化されたロールを作成した後、ネットワーク伝達の遅延により、数分間、またはより長くファイル共有を作成できなくなる可能性があります。
ファイル共有の作成
仮想ディスクを作成し、CSV に追加したら、そのディスク上にファイル共有を作成します。 仮想ディスクごとに CSV ごとに 1 つのファイル共有を作成します。 System Center Virtual Machine Manager (VMM) はアクセス許可を処理するため、このタスクを実行する最も簡単な方法です。 環境内に存在しない場合は、Windows PowerShell を使用してデプロイを部分的に自動化できます。
このセクションに含まれるスクリプトを使用して、グループと共有を作成するプロセスを部分的に自動化します。 スクリプトは、Hyper-V ワークロード用に記述されます。 他のワークロードをデプロイする場合は、共有を作成した後に設定を変更するか、追加の手順を実行する必要がある場合があります。 たとえば、Microsoft SQL Server を使用している場合は、共有とファイル システムの完全な制御を SQL Server サービス アカウントに付与する必要があります。
注
System Center Virtual Machine Manager を使用して共有を作成しない限り、クラスター ノードを追加するときにグループ メンバーシップを更新する必要があります。
PowerShell スクリプトを使用してファイル共有を作成するには、次の手順に従います。
次の各セクションを展開し、ファイル サーバー クラスターのいずれかのノードで、
.ps1などの同じフォルダーに関連する名前を持つ個別のC:\Scripts\SetupSMBSharesWithHyperVファイルとして各内容を保存します。ADGroupSetup.ps1の場合は、このセクションを展開 します 。
Param( [Parameter(Mandatory=$true)] [string] $HyperVClusterName, [Parameter(Mandatory=$true)] [string] $HyperVObjectADGroupSamName ) # Add and import needed features if ((Get-WindowsFeature | ? Name -Like "RSAT-AD-PowerShell") | ? InstallState -NotLike Installed) { Install-WindowsFeature "RSAT-AD-PowerShell" } if ((Get-WindowsFeature | ? Name -Like "RSAT-Clustering-PowerShell") | ? InstallState -NotLike Installed) { Install-WindowsFeature "RSAT-Clustering-PowerShell" } Import-Module -Name ActiveDirectory Import-Module -Name FailoverClusters # Check for group and create if necessary $adGroup = @() $adGroup = Get-ADGroup -Filter {samAccountName -eq $HyperVObjectADGroupSamName} if ($adGroup.Count -ne 1) { $adGroup = New-ADGroup -DisplayName $HyperVObjectADGroupSamName -Name $HyperVObjectADGroupSamName -SamAccountName $HyperVObjectADGroupSamName -GroupScope Global -GroupCategory Security -PassThru } # Build array of Hyper-V servers $HyperVNodes = (Get-ClusterNode -Cluster $HyperVClusterName).Name | Get-ADComputer # Add nodes to group if not already members for ($i = 0; $i -lt $HyperVNodes.Count; $i++) { if (!(Get-ADGroupMember $adGroup | ? Name -ieq $HyperVNodes[$i].Name)) { Add-ADGroupMember $adGroup -Members $HyperVNodes[$i] } } # Add Hyper-V cluster object to group if not already present if (!(Get-ADGroupMember $adGroup | ? Name -ieq $HyperVClusterName)) { Add-ADGroupMember $adGroup -Members (Get-ADComputer $HyperVClusterName) }FileShareSetup.ps1のためにこのセクションを開きます。
Param( [Parameter(Mandatory=$true)] [string] $HyperVClusterName, [Parameter(Mandatory=$true)] [string] $ScaleOutFSName, [Parameter(Mandatory=$true)] [string] $ShareName, [Parameter(Mandatory=$true)] [string] $HyperVObjectADGroupSamName, [int] $CSVVolumeNumber = 1, [string] $VHDFolderName = "VHDs", [string] $VMFolderName = "VMs" ) # Create the share folder New-Item -ItemType Directory -Path C:\ClusterStorage\Volume$CSVVolumeNumber\$ShareName # Create folders in share New-Item -ItemType Directory -Path "C:\ClusterStorage\Volume$CSVVolumeNumber\$ShareName\$VHDFolderName" New-Item -ItemType Directory -Path "C:\ClusterStorage\Volume$CSVVolumeNumber\$ShareName\$VMFolderName" # Get the domain name $DomainName = Get-Content env:userdnsdomain # Grant the Hyper-V group permission $cmdString = "ICACLS.EXE C:\ClusterStorage\Volume$CSVVolumeNumber\$ShareName --% /Grant $DomainName\$HyperVObjectADGroupSamName" $cmdString += ':(CI)(OI)F' Invoke-Expression -Command $cmdString # Grant domain admins permission $DomainAdmins = "Domain Admins" $cmdString = "ICACLS.EXE C:\ClusterStorage\Volume$CSVVolumeNumber\$ShareName" $cmdString += ' --% /Grant "' $cmdString += "$DomainName\$DomainAdmins" $cmdString += ':(CI)(OI)F"' Invoke-Expression -Command $cmdString # Remove inheritance (optional) ICACLS.EXE C:\ClusterStorage\Volume$CSVVolumeNumber\$ShareName /Inheritance:R # Create new share and set matching Share permissions $FullAccess = ("$DomainName\$HyperVObjectADGroupSamName","$DomainName\Domain Admins") New-SmbShare -Name $ShareName -Path C:\ClusterStorage\Volume$CSVVolumeNumber\$ShareName -FullAccess $FullAccessこのセクションを展開して、KCDSetup.ps1を使用します。
Param( [Parameter(Mandatory=$true)] [string] $HyperVClusterName, [Parameter(Mandatory=$true)] [string] $ScaleOutFSName, [switch] $EnableLM = $true ) # Add and import needed features if ((Get-WindowsFeature | ? Name -Like "RSAT-AD-PowerShell") | ? InstallState -NotLike Installed) { Install-WindowsFeature "RSAT-AD-PowerShell" } if ((Get-WindowsFeature | ? Name -Like "RSAT-Clustering-PowerShell") | ? InstallState -NotLike Installed) { Install-WindowsFeature "RSAT-Clustering-PowerShell" } Import-Module -Name ActiveDirectory # Build array of Hyper-V servers $HyperVNodes = (Get-ClusterNode -Cluster $HyperVClusterName).Name # Enable LM and CD $SMBServerAD = Get-ADComputer -Filter {Name -eq $ScaleOutFSName} $AllowedToDelegateToSMB = @( ("cifs/"+$SMBServerAD.Name), ("cifs/"+$SMBServerAD.DNSHostName)) for ($serverCounter = 0; $serverCounter -lt $HyperVNodes.Count; $serverCounter++) { $AllowedToDelegateTo = $AllowedToDelegateToSMB if ($EnableLM) { for ($delegateCounter = 0; $delegateCounter -lt $HyperVNodes.Count; $delegateCounter++) { if ($delegateCounter -ne $serverCounter) { $delegationServer = $HyperVNodes[$delegateCounter] | Get-ADComputer $AllowedToDelegateTo += @( ("Microsoft Virtual System Migration Service/"+$delegationServer.Name), ("Microsoft Virtual System Migration Service/"+$delegationServer.DNSHostName)) } } } ($HyperVNodes[$serverCounter] | Get-ADComputer) | Set-ADObject -Add @{"msDS-AllowedToDelegateTo"=$AllowedToDelegateTo} }管理システムでドメイン管理者の資格情報を使用して Windows PowerShell セッションを開きます。 スクリプト
ADGroupSetup.ps1を使用して、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スクリプト
FileShareSetup.ps1を使用して、各 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 }リモート シナリオ管理と Live Migration セキュリティの強化のために、Kerberos の制約付き委任を有効にします。 ストレージ クラスター ノードの 1 つから、
KCDSetup.ps1スクリプトを使用します。 スクリプトの小さなラッパーを次に示します。$HyperVClusterName = "Compute01" $ScaleOutFSName = "SOFS" $ScriptFolder = "C:\Scripts\SetupSMBSharesWithHyperV" CD $ScriptFolder .\KCDSetup.ps1 -HyperVClusterName $HyperVClusterName -ScaleOutFSName $ScaleOutFSName -EnableLMHyper-V クラスター内のすべてのノードを再起動して、新しい Kerberos の制約付き委任設定が有効になるようにします。 ノードがオンラインに戻ったら、作成したファイル共有への仮想マシンのデプロイを開始できます。