記憶域スペースダイレクトを用いたHyper-Vクラスターを構築する方法


記憶域スペースダイレクト(Storage Spaces Direct 以下 S2D)を共有領域として利用するHyper-Vクラスターの構築手順。
ここでは構築手順を確立するために全ての要素をHyper-V仮想マシン上で構築する。よって、ネットワーク帯域やディスクなどに関してS2Dのハードウェア要件を満たせていない部分がある点に留意すること。

検証環境

ノードサーバー (2台)

クラスターを構成するためのハイパーバイザーサーバー。

  • 機種: 第二世代 Hyper-V仮想マシン
  • ストレージ: HDD: 300GB x5
  • NIC: 1Gpbs NIC x1
  • CPU: 16core
  • メモリ: 16GB
  • OS: WindowsServer2016 DataCenter 評価版

ActiveDirectoryサーバー (1台)

クラスターを管理するためのActiveDirectoryドメインサーバー。

  • 機種: 第二世代 Hyper-V仮想マシン
  • ストレージ: HDD: 300GB x1
  • NIC: 1Gpbs NIC x1
  • CPU: 4core
  • メモリ: 4GB
  • OS: WindowsServer2016 Standard 評価版

ネットワーク

検証用ネットワーク(192.168.1.0/24)

  • ActiveDirectoryサーバー: 192.168.1.20/24
  • ノードサーバー1: 192.168.1.31/24
  • ノードサーバー2: 192.168.1.32/24
  • クラスターIP: 192.168.1.35/24

サーバーへのOSインストール

以下の点に気を付けてOSをインストールする。

  • GUIありでインストールする
  • 【ノードサーバーのみ】WindowsUpdateの適用状態をサーバー同士で同じ状態にする
  • 【ノードサーバーのみ】S2D用ディスクは全てGPTでフォーマットする
  • 時刻同期が正しく行われるようにする

Nested Hyper-Vの有効化

ノードサーバーはHyper-V仮想マシンであるため、そのままではHyper-Vの機能をインストールできない。
そこで、ノードサーバーに対してNested Hyper-Vを有効にしておく。

PowerShell
Set-VMProcessor -VMName <仮想マシン名> -ExposeVirtualizationExtensions $true

当たり前だが、実際の物理マシンの場合はこの作業は不要である。

クラスター管理ドメインの準備

ActiveDirectoryのインストール

AcriveDirectoryサーバーに対し、サーバーマネージャーから以下の機能をインストールする。インストールの詳細は省略。

  • Active Directory ドメイン サービス

ドメインの作成

ドメインコントローラーに昇格してドメインを作成する。ドメイン作成の詳細は省略。

  • ドメイン機能レベル: Windows Server 2016
  • ドメイン名: s2d.local

ドメインへの参加

ノードサーバーをドメインに参加させる。ドメイン参加手順の詳細は省略。

クラスターの作成

クラスター関連機能のインストール

全てのノードサーバーに対し、サーバーマネージャーから以下の機能をインストールする。

  • Hyper-V
  • フェールオーバークラスタリング

役割・機能のインストール

役割・機能選択後のウィザードは何も変更しない。

インストール完了後はサーバーを再起動すること。

Hyper-Vクラスターの作成

1台のノードサーバー上でのみ実施する。
"フェールオーバークラスターマネージャー"を起動し、"クラスターの作成"を選択する。

ノードサーバーを全て登録する。

疑似環境であるため検証作業は省略する。
マイクロソフトサポートを受けるために必要であるため、実機では必ず実施して問題が無いことを確認すること。

クラスター名とクラスターの管理IPを入力する。

クラスターの作成を実施する。"使用可能な記憶域をすべてクラスターに追加する"のチェックは外すこと。

クラスターが作成され、フェールオーバークラスターマネージャー上に表示される。

クォーラム領域を準備する

AcriveDirectoryサーバー上にてファイル共有を作成し、全てのノードサーバーからアクセス出来るようにする。詳細は省略。

クラスターにクォーラム領域を設定する

1台のノードサーバー上でのみ実施する。
"フェールオーバークラスターマネージャー"を起動し、作成したクラスターを右クリックして"他のアクション"→"クラスタークォーラム設定の構成"を選択する。

"クォーラム監視を選択する"を選択する。

"ファイル共有監視を構成する"を選択する。

ドメインサーバー上に用意したクォーラム用共有を指定する。

クォーラム設定を適用する。

S2D設定

クラスターに対してS2Dプールの作成を行う

1台のノードサーバー上でのみ実施する。
PowerShellにて以下のコマンドを実行し、S2Dの有効化及びS2Dストレージプールの作成を行う。
この作業を実施すると、S2Dに使用されたディスクがOS上から見えなくなる。

PowerShell
Enable-ClusterStorageSpacesDirect

確認
この操作を実行しますか?
ターゲット 'クラスターの記憶域スペース ダイレクトを有効にします' で操作 's2dcluster-v' を実行しています。
[Y] はい(Y)  [A] すべて続行(A)  [N] いいえ(N)  [L] すべて無視(L)  [S] 中断(S)  [?] ヘルプ (既定値は "Y"): Y
警告: 2018/01/11-19:48:38.667 ノード S2D-VNODE2: キャッシュに使用するディスクが見つかりませんでした
警告: 2018/01/11-19:48:38.698 ノード S2D-VNODE1: キャッシュに使用するディスクが見つかりませんでした
警告: 2018/01/11-19:48:38.714 C:\Windows\Cluster\Reports\Enable-ClusterS2D on 2018.01.11-19.48.38.706.htm

キャッシュディスクが無いと表示されるが、特に気にする必要はない。
本当にプールができたかどうかを確認したい場合は、以下のコマンドを実行する。

PowerShell
Get-StoragePool

FriendlyName        OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------        ----------------- ------------ ------------ ----------
Primordial          OK                Healthy      True         False
S2D on s2dcluster-v OK                Healthy      False        False
Primordial          OK                Healthy      True         False

S2Dプール名は自動で "S2D on クラスター名" となる。

S2Dプール上に仮想ディスクを作成する

1台のノードサーバー上でのみ実施する。
PowerShellにて以下のコマンドを実行し、S2Dストレージプール上に仮想ディスクを作成する。
今回はノードサーバーが2台であるため、"双方向ミラー"モードでディスクを作成する。(2ノード環境では双方向ミラーしか構成できない)

PowerShell
Get-StoragePool

FriendlyName        OperationalStatus HealthStatus IsPrimordial IsReadOnly
------------        ----------------- ------------ ------------ ----------
Primordial          OK                Healthy      True         False
S2D on s2dcluster-v OK                Healthy      False        False
Primordial          OK                Healthy      True         False

New-Volume -StoragePoolFriendlyName <S2Dプール名> -FriendlyName <仮想ディスク名> -Size <サイズ> -FileSystem ReFS -ResiliencySettingName Mirror -PhysicalDiskRedundancy 1

【例】
New-Volume -StoragePoolFriendlyName "S2D on s2dcluster-v" -FriendlyName "Volume1" -Size 1.1TB -FileSystem ReFS -ResiliencySettingName Mirror -PhysicalDiskRedundancy 1

DriveLetter FileSystemLabel FileSystem DriveType HealthStatus OperationalStatus SizeRemaining   Size
----------- --------------- ---------- --------- ------------ ----------------- -------------   ----
            Volume1         ReFS       Fixed     Healthy      OK                      1.09 TB 1.1 TB

備考: 仮想ディスクのサイズについて

仮想ディスクのサイズはモードによって設定可能な最大値が変動する。
今回は300GBのディスク4本を使用したノードを2台使用したため、物理的な容量は約2.4TBとなるが、双方向ミラーでは設定可能な最大値は約1.2TB(50%)となる。
TB/TiB問題もあり、-Sizeオプションで指定可能なサイズは結局1.1TB程度になる。(設定可能な値を超えるとエラーになる。)

仮想ディスクをクラスター共有ボリュームに変換する

1台のノードサーバー上でのみ実施する。
作成した仮想ディスクはそのままだとクラスターで利用できないため、クラスター共有ボリュームに変換する必要がある。
"フェールオーバークラスターマネージャー"を起動し、クラスターのツリーにある"記憶域"→"ディスク"を開き、作成した仮想ディスクを選択したあと、"クラスターの共有ボリュームへの追加"を押す。

ディスクが少しの間オフラインになり、再度オンラインになったあとはクラスター共有ボリュームとして利用可能な状態になっている。

アクセス可能かどうか調べるために、C:\ClusterStorageを開き、Volume1が存在することを確認する。

なお、この領域はHyper-V仮想マシンの配置でのみ利用すべきであり、アンチウィルスソフトのチェック対象からも外すべき領域となる。

これで3レイヤー構成のHyper-Vクラスターと同じように仮想マシンを操作することができるようになる。
フェールオーバー可能な高可用性仮想マシンの作成や、マイグレーション動作に関しては以下のページを参照。
https://qiita.com/SkyLaptor/items/0c1d7845f925f6db1b4c

参考