Hyper-Vクラスター環境(S2D)にノードを追加する方法

記憶域スペースダイレクト(StorageSpacesDirect:S2D)を用いたHyper-Vクラスター環境はHCIであるため、スケールアウトが可能である。


## 検証環境
### 既存クラスター
以下のページで作成したクラスター環境を既存とする。
https://qiita.com/SkyLaptor/items/a1815b077b3db510fb5a

### 追加ノードサーバー
追加するノードサーバーは、**既存のクラスターを構築しているノードと同じ機種・スペックであること。**

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

### ネットワーク
* 【既存】ActiveDirectoryサーバー: 192.168.1.20/24
* 【既存】ノードサーバー1: 192.168.1.31/24
* 【既存】ノードサーバー2: 192.168.1.32/24
*  ノードサーバー3: 192.168.1.33/24
* 【既存】クラスターIP: 192.168.1.35/24


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

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

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

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

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


## ドメインへの参加
追加ノードサーバーをドメインに参加させる。ドメイン参加手順の詳細は省略。
![add_node.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/5707ce6c-be69-0f32-d9f4-06cd3dc63f39.jpeg)


## クラスターへの追加
### クラスター関連機能のインストール
追加ノードサーバーに対し、サーバーマネージャーから以下の機能をインストールする。インストールの詳細は省略。

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


### クラスターへの参加
追加ノードサーバーを既存クラスターに参加させる。
**1台の既存ノードサーバー上でのみ実施する。**
"フェールオーバークラスターマネージャー"を起動し、クラスターツリーの中にある"ノード"を選択する。その後、"ノードの追加"を選択する。
![add_nodecluster.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/f606a3e7-5507-6eba-2956-34da7d157807.jpeg)

![about_addnode.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/38ad6c38-01b9-531b-5329-dd89e3e71f7f.jpeg)

追加するノードサーバー名を入力し、選択済みサーバーに表示されるようにして次に進む。
![choose_addnodename.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/22b8b2e5-64b5-3d55-66e9-c9d73699f635.jpeg)


疑似環境であるため検証作業は省略する。
**マイクロソフトサポートを受けるために必要であるため、実機では必ず実施して問題が無いことを確認すること。**
![check_certificate.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/e0f9baca-440a-4065-47fc-02641e6f8f51.jpeg)

"使用可能な記憶域をすべてクラスターに追加する"のチェックを外し、次に進む。
![noadd_storages.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/d38f7b3d-8df1-6578-e2fe-a6ac2d9f457f.jpeg)

正常にノードが追加されることを確認する。問題がなければクラスターノード一覧に追加したノードサーバーが表示される。
![complete_addnode.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/a4c412a9-458e-9cc9-92c8-40287bdf4b30.jpeg)

![listed_nodes.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/8b629013-eade-8a1f-305a-2b0382fe30e6.jpeg)



### クラスター共有ボリュームを拡張
ノードを追加することで、自動的にS2Dの領域が増える。（同期処理のため時間はかかる）
しかし、S2Dの領域が増えたからといってクラスター共有ボリュームが増えるわけではない。よって、次の手順にてクラスター共有ボリュームを拡張する。

```ps1:
Get-VirtualDisk <対象ボリューム名> | Resize-VirtualDisk -Size <拡張後のサイズ>
Get-VirtualDisk <対象ボリューム名> | Get-Disk | Get-Partition | where PartitionNumber -Eq 2 | Resize-Partition -Size <拡張後のサイズ>

【例】
Get-VirtualDisk "Volume1" | Resize-VirtualDisk -Size 1.7TB
Get-VirtualDisk "Volume1" | Get-Disk | Get-Partition | where PartitionNumber -Eq 2 | Resize-Partition -Size 1.7TB
```

実際に増えているかどうかは、クラスターのディスクを確認するとよい。
![check_extends.jpg](https://qiita-image-store.s3.amazonaws.com/0/97774/6d8dd411-7c0e-1756-16b2-a4a1171e49a9.jpeg)


以上でノード追加によるスケールアウトが完了する。



#### 備考: サイズの計算
仮想ディスクのサイズはモードによって設定可能な最大値が変動する。
今回ノードを追加したことで、300GBのディスク4本を使用したノード3台構成となったため物理的な容量は約3.6TBとなる。双方向ミラーで仮想ディスクを作成しているため実際に設定可能な最大値は約1.8TB(50%)となる。
TB/TiB問題もあり、-Sizeオプションで指定可能なサイズは結局1.7TB程度。（設定可能な値を超えるとエラーになる。）