概要
AzureでWindows Server Failover Clusterを組むにはAzure Loadbalancerが必要です。
背景
普通にFailover Clusterを組んだところ、クラスター化した役割にアクセスできない問題が起きたので調べました。
やりかた
事前準備
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″を入力します。
残りはデフォルトのまま進めてもらえば大丈夫です。
クラスター側で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です。
動作確認
クラスターノード以外のホストからクラスター化された役割にアクセスできるか
おまけ
次のようなことが起きていたらだいたいロードバランサーまわりで失敗しています。
- クラスターのアクティブノードからであれば役割にアクセスできる
- スタンバイノード、もしくは別のホストからは役割にアクセスできない
コメント