Azure共有ディスクでWSFCの構築

Azure管理ディスクを共有ディスクとして利用できるようになりましたのでWSFC（Windows Server Failover Clustering）を構築してみます。
公式ドキュメントを参考にしています。

共有ディスクを有効にする：https://docs.microsoft.com/ja-jp/azure/virtual-machines/disks-shared-enable

# Azureの構成
VM以外にロードバランサーとストレージアカウントを使用します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/1887f1b0-cfc1-0bcb-cbd9-64574f242b7d.png" width=80%>

OSはWindows Server 2019です。

# 事前作業
WSFC構築前に以下を実施しています。

- 機能 `フェールオーバークラスタリング` 、`フェールオーバークラスタリングツール` の追加。（2台）
- ドメイン参加

# 共有ディスクの作成
Azure ポータルから作成が出来ないため Azure PowerShellで作成します。
Premium DiskのP15以上、もしくはUltra Diskのディスクが必要となります。

```powershell
$DiskConfig = New-AzDiskConfig -Location 'japaneast' -DiskSizeGB 256 -AccountType Premium_LRS -CreateOption Empty -MaxSharesCount 2
New-AzDisk -ResourceGroupName foo-rg -DiskName "wsfc-shared-disk" -Disk $DiskConfig
```

この時点でVMにアタッチするとWSFCを作成した時点でクォーラムディスクとして扱われてしまいます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/4f81b9ea-6cbd-c564-e8bc-f3de92205f62.png" width=70%>

今回はクォーラム監視を利用するため、まだアタッチしません。

# ロードバランサーの作成
仮想IPでアクセスするためにAzure Load Balancerを使用します。
今回はファイル共有で利用するため445だけ振り分けるようにします。
アプリケーションにより適宜追加してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/fb1f0ab0-8bcf-0b0f-97c0-6eff8689bb69.png" width=80%>

# WSFCの構築
## クラスターの作成
Domain Adminsに所属しているユーザでVMにRDPでログインします。
PowerShellを管理者モードで起動し、以下コマンドでクラスターを作成します。

```powershell
New-Cluster -Name <クラスタ名> -Node <VM1>,<VM2> -StaticAddress <クラスタIP>
Test-Cluster
```

## クォーラム監視の設定
ストレージアカウント名とアクセスキーを使用しますので事前にメモしておきます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/776382f4-0e64-0e81-5ee7-8d4a5275c962.png" width=100%>
フェールオーバークラスターマネージャーを起動してクォーラムの設定を開始します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/37c404f0-6419-88a5-c9f8-7ce4a750a7d3.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/8e47e4c4-ed53-55e9-d4e6-e6855d8578fd.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/9605a8f7-7067-304b-4e65-d9a28fb81571.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/39eb0353-6c5b-b000-ccba-d7ccd5e738f5.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/8302b197-8e45-9388-016e-212d1d8d70c4.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/8e0d3024-01e4-ba56-0a74-7ab0d367661a.png" width=70%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/a23d8eb9-67ff-4f1f-9a98-15c572f80d28.png" width=70%>

## 役割の作成
空の役割を作成し、その中にクライアントアクセスポイントを作成します。
指定するIPアドレスはロードバランサーのフロントエンドのIPアドレスです。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/059ea5f3-df82-ad2a-0353-1a08057a7102.png" width=70%>

クラスタのパラメータを変更します。

```powershell
Get-ClusterResource <IPリソース名> | Set-ClusterParameter -Multiple @{"Address"="<LBフロントエンドIP>";"ProbePort"="<プローブのPort>";"SubnetMask"="255.255.255.255";"Network"="<クラスタネットワーク名>";"OverrideAddressMatch"=1;"EnableDhcp"=0}
```

## 共有ディスクのアタッチ
2台のVMに共有ディスクをアタッチします。
アタッチ後、片方のVMでフォーマットします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/5f29adea-694a-7946-d327-3f70295adcde.png" width=80%>

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/fe820127-ffb9-abcc-5769-c542a15531ae.png" width=80%>


## ディスクの追加
ディスクの追加後、役割のリソースに追加します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/21bbcdb4-c855-8578-125c-7ed4c6e08288.png" width=50%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/c89feb61-d5a0-6b36-fd86-3c94bb4e23ed.png" width=80%>


# 確認

共有フォルダを作成し、仮想ホストでアクセス出来ました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/eeb7151c-be90-9906-0188-83e09fcd2ceb.png" width=80%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/7614f8c0-a1c8-8ca1-7c1e-9c66f91f5af3.png" width=50%>

ノードを移動しても共有ディスクにアクセス出来る事を確認しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/7c234122-abc6-1948-8115-a4a6adb21f83.png" width=80%>
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/604991/d65f8f95-8ee1-0cda-83fc-f78a2d7dcb2e.png" width=55%>


# 終わりに
これまでクラスタ構築にはDataKeeper等のデータレプリケーションのソフトウェア等の利用が一般的だったと思いますのでディスクは2本必要でした。
Azure共有ディスクを使うことでオンプレサーバの様に共有ディスクが利用でき、ディスクのコストも抑えられそうです。
ただし、Azure共有ディスクはAzure BackupやAzure Site Recoveryに対応していないため（2020年9月時点）、ディスクのバックアップ、およびディザスターリカバリーについては
前述以外の方法で実施する必要があるところは注意が必要です。
ディスクのスナップショットで代用 :thinking: