AzureでWindows Server Failover Clusterを組む

概要

AzureでWindows Server Failover Clusterを組むにはAzure Loadbalancerが必要です。

背景

普通にFailover Clusterを組んだところ、クラスター化した役割にアクセスできない問題が起きたので調べました。

普通にクラスターを組むとIPアドレスリソースがオンラインにならない
Microsoft-Windows-FailoverClustering 1069エラーが出る

やりかた

事前準備

2ノードクラスターにするのでクォーラムを用意します。
Azureではストレージアカウントをクォーラムにする機能などがあって便利なのですが、手っ取り早いのは共有ディスクを使う方法です。

Azure Portalでマネージドディスクを作ります。
共有ディスクを有効にするにはStandard SSD以上でないといけないので、サイズに[Standard SSD]を指定します。データを保存する訳ではないので容量は”1GB”で十分です。

[詳細]タブで[共有ディスクを有効にする]で[はい]を選択します。
最大共有数はマウントできるVMの数なので、クラスターノード数に合わせて増減させてください。

補足ですが、共有ディスクはネットワーク的にくっついている訳ではないので、[ネットワーク アクセス]は無効にしておいて大丈夫です。

作成したディスクをクラスターノードの仮想マシンにデータディスクとしてマウントします。

Failover Clusterの作成

クラスターノードのドメイン参加や役割の追加は適当に済ませてください。

フェイルオーバークラスターマネージャーを起動します。

[クラスターの作成]をクリックします。

ウィザードを適当に進めます。

[使用可能な記憶域をすべてクラスターに追加する]のチェックは外します。
このチェックを入れると、どのデータディスクがクォーラムディスクとして扱われるか指定できません。

クォーラム監視の構成

クラスターが作成できたらクォーラムの設定をします。

まずはクォーラムとして使うディスクをクラスター記憶域として追加します。

作成したクラスターを選択し、[記憶域]-[ディスク]をクリックします。
[ディスクの追加]をクリックします。

クォーラムとして使うディスクにチェックを入れて[OK]をクリックします。

[使用可能記憶域]としてディスクが表示されれば成功です。

クラスターを選択し、[他のアクション]-[クラスタークォーラム設定の構成]をクリックします。

[クォーラム監視を選択する]を選択します。

[ディスク監視を構成する]を選択します。

追加したクォーラムディスクを選択します。

残りは適当にウィザードに従って進めれば構成完了です。

役割の作成

今回はファイルサーバーのクラスター化された役割を作成します。
必要に応じて読み替えてください。

サーバーマネージャからファイルサーバーの役割を追加します。
Azureポータルからファイルサーバーで使う用の共有ディスクを作成してマウントします。

[役割の構成]からクラスター化された役割を追加します。
[ファイルサーバー]を選択します。

[汎用ファイルサーバー]を選択します。

クライアントアクセスポイント名を入力します。

ファイルサーバーで使用するディスクを選択します。

設定内容を確認して構成します。

ここまでで背景と同じ状況になります。

Azure LoadBalancerを作成する

オンプレのフェイルオーバークラスターとは違いAzureではLoadBalancerが必要です。

Azure PortalからAzure LoadBalancerを作成します。
クラスター用なので[種類]は[内部]です。

フロントエンドIPに[静的]でクラスターのクライアントアクセスポイントのIPアドレスを入力します。
(仮想ネットワークの範囲で任意に決めていい)

バックエンドプールにクラスターノードの仮想マシンのNICを選択する。

インバウンドの負荷分散規則を追加します。
[フロントエンドIPアドレス]と[バックエンドプール]に前手順で作成したそれぞれを選択します。
[ポート]と[バックエンドポート]にはクライアントがクラスター化された役割へアクセスする時のポートを入力します。今回はファイルサーバーなのでTCPの445(SMB)を入力しています。
[正常性プローブ]には[TCP]の”59999″を入力します。

TCP 59999が何のポートか情報が見つかりませんでしたが、正常性プローブではこれを使うのが一般的なようです。

正常性プローブでは既定でポート 59999 を使用します

https://learn.microsoft.com/ja-jp/azure/azure-sql/virtual-machines/windows/failover-cluster-instance-prepare-vm?view=azuresql&tabs=single-subnet#open-the-firewall

残りはデフォルトのまま進めてもらえば大丈夫です。

クラスター側でLoad Balancerの設定をする

クラスターノードでPowerShellを起動し、次の操作を実行します。
どちらか片方のノードで実行すれば大丈夫です。

# クラスターネットワーク名を調べます
Get-ClusterNetwork
# "Cluster Network 1" などがクラスターネットワーク名

# クラスターIP名を調べます
Get-ClusterResource
# "IPアドレス 10.213.0.0"などがクラスターIP名
# 全角文字とスペースを含むのでコピーするのであれば範囲に気をつける。間違えそうであれば変数に入れて参照してもいい。

# クラスターIPリソースの設定をする
Get-ClusterResource <クラスターIP名> | Set-ClusterParameter -Multiple @{"Address"="<クラスター用IPアドレス>";"ProbePort"=59999;"SubnetMask"="255.255.255.255";"Network"="<クラスターネットワーク名>";"EnableDhcp"=0}
# サブネットマスクの255.255.255.255は間違いではないので修正しない

フェイルオーバークラスターマネージャーからクラスターIPリソースを確認し、次のようになっていれば成功です。

最後に役割を再起動します。

Windows Firewallの設定

Azure LoadBarancerからクラスターノードへの通信を許可します。
今回例だとTCPの59999と445です。

動作確認

クラスターノード以外のホストからクラスター化された役割にアクセスできるか

おまけ

次のようなことが起きていたらだいたいロードバランサーまわりで失敗しています。

  • クラスターのアクティブノードからであれば役割にアクセスできる
  • スタンバイノード、もしくは別のホストからは役割にアクセスできない

コメント