Azure管理ディスクを共有ディスクとして利用できるようになりましたのでWSFC(Windows Server Failover Clustering)を構築してみます。
公式ドキュメントを参考にしています。
共有ディスクを有効にする:https://docs.microsoft.com/ja-jp/azure/virtual-machines/disks-shared-enable
Azureの構成
VM以外にロードバランサーとストレージアカウントを使用します。

OSはWindows Server 2019です。
事前作業
WSFC構築前に以下を実施しています。
- 機能
フェールオーバークラスタリング
、フェールオーバークラスタリングツール
の追加。(2台) - ドメイン参加
共有ディスクの作成
Azure ポータルから作成が出来ないため Azure PowerShellで作成します。
Premium DiskのP15以上、もしくはUltra Diskのディスクが必要となります。
$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を作成した時点でクォーラムディスクとして扱われてしまいます。

今回はクォーラム監視を利用するため、まだアタッチしません。
ロードバランサーの作成
仮想IPでアクセスするためにAzure Load Balancerを使用します。
今回はファイル共有で利用するため445だけ振り分けるようにします。
アプリケーションにより適宜追加してください。
WSFCの構築
クラスターの作成
Domain Adminsに所属しているユーザでVMにRDPでログインします。
PowerShellを管理者モードで起動し、以下コマンドでクラスターを作成します。
New-Cluster -Name <クラスタ名> -Node <VM1>,<VM2> -StaticAddress <クラスタIP>
Test-Cluster
クォーラム監視の設定
ストレージアカウント名とアクセスキーを使用しますので事前にメモしておきます。
フェールオーバークラスターマネージャーを起動してクォーラムの設定を開始します。







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

クラスタのパラメータを変更します。
Get-ClusterResource <IPリソース名> | Set-ClusterParameter -Multiple @{"Address"="<LBフロントエンドIP>";"ProbePort"="<プローブのPort>";"SubnetMask"="255.255.255.255";"Network"="<クラスタネットワーク名>";"OverrideAddressMatch"=1;"EnableDhcp"=0}
共有ディスクのアタッチ
2台のVMに共有ディスクをアタッチします。
アタッチ後、片方のVMでフォーマットします。


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


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


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