SQL Server 2012 の新機能である AlwaysOn は Windows Azure の仮想マシン (VM : VIrtual Machine) に構築することができます。
Windows Azure で SQL Server AlwaysOn 可用性グループ を作ってみる
Tutorial: AlwaysOn Availability Groups in Windows Azure
HADR Tutorials for SQL Server in Windows Azure VMs
構築できるのは知っていたのですが実際に試したことはなかったので少しまとめてみたいと思います。
まずは WSFC の構築から。
投稿を書いている時点 (2013/5/7) の投稿ですので最新の構築方法では変わっているかもしれません。
■Azure VM で WSFC を構築する
今回は以下のような環境を事前に作ってあります。
Azure 上に 3 台の VM を構築し、同一の仮想ネットワークに配置しています。
# ドメインにも参加している状態です。
他の事前準備としては、
- ドメイン上にクラスターを構築する際に使用するドメインユーザーを作成し、[Account Operators] の権限を付与
# 他の方法でも構いません。AD に CNO のコンピューターアカウントを作成できる状態にしておきます。 - WSFC の各サーバーの Administrators グループに上記のユーザーを追加
- WSFC の導入を行うサーバーに上記のユーザーでログイン
という作業を実施しています。
この状態でオンプレミスと同じように GUI で WSFC を組んでみます。
Windows Azure 上の VM は DHCP による IP アドレスを使用する構成になりますので、クラスター名オブジェクト (CNO) の IP アドレスは DHCP を使用して設定が行われる設定となります。
クラスター コア リソースの IP アドレスが失敗の状態となっています。
今回の環境ですが DHCP により割り当てられている IP アドレスは以下のようになります。
このような IP アドレスを割り当てられている場合に、CNO の IP アドレスとして、172.16.0.6 が使用されてしまい、IP アドレスんの重複により、IP をオンラインにできず失敗の状態となってしまっています。
IP アドレスをリリースして再度取得しても SQL Server #1 (WSFC-01) や SQL Server #2 (WSFC-02) で取得されている IP が使用されてしまい、失敗の状態を回避することができません。
現状の Azure VM で WSFC を構築した場合、CNO や CAP というようなクラスターの仮想 IP に DHCP によりリースされた IP アドレスを使用することができないようです。現在は固定 IP の利用はサポートされていないはずですので、このあたりが Azure VM で WSFC のアプリがサポートされていない理由になるのでしょうか。
AlwaysOn のリスナーも WSFC の CAP を使用しますので、DHCP による IP アドレスの設定ができないため、リスナーを介しての接続が Azure VM 上の可用性グループではできないのかと。
この回避方法ついては以下の技術情報に記載されています。
Test Lab: Create an AlwaysOn Availability Group in Windows Azure End-to-End
How to Configure Windows Failover Cluster in Windows Azure for AlwaysOn Availability Groups
Create WSFC Cluster for AlwaysOn Availability Groups in Windows Azure VM
GUI / PowerShell ともに以下のような作業を実施しています。
- WSFC を構築
- CNO に DHCP で割り当てられている IP を削除
- CNO にダミーの IP アドレスを設定
- CNO をオフライン
- CNO に設定したダミーの IP アドレスを削除
GUI で作成する場合に関しては CNO に固定 IP アドレスをダミーで設定した後に CNO のコンピューター名アカウントをオフラインにした後に削除していますが、PowerShell のスクリプトで作成する場合にはCNO の IP アドレスにリンクローカルアドレス (169.254.1.1) を固定 IP としてダミーでで設定し、その後削除するという方法になっています。
# どちらの方法でも最終的には削除しています。
PowerShell を実行する際の注意点としては、
- Windows Server 2012 の場合は、[フェールオーバー クラスター コマンド インターフェイス] をインストールする必要がある
- 日本語環境で実行する場合は、[Cluster Name] を [クラスター名] に置き換える必要がある
- クラスター操作用のドメインユーザーでログインし、管理者として実行した PowerShell で実行する必要がある
という点でしょうか。
リンクローカルアドレスを使用した IP アドレスを設定する際に、PowerShell ではなく従来からの [Cluster] コマンドを使用して設定をしているため、コマンドインターフェイスが使える状態にする必要があります。
これらの設定がされていれば、
CreateAzureFailoverCluster.ps1 -ClusterName WSFC-CNO -ClusterNodes WSFC-01 |
というよ
うな形式でスクリプトを実行するとクラスターを構築することができます。
GUI から作成した場合は、関係するノードをすべて追加していますが、スクリプトで作成した場合には以下のように 1 ノードクラスターで構築されていますので、スクリプト実行後にノードを追加する必要があります。
CNO がオフラインの状態で Dynamic Quorum を使用した 2 ノードの WSFC が Azure 上に構築できています。
現状は、クラスターとしての IP アドレスが DHCP によりリースできないところが動作としてあるようですね。
今度はこの環境を使用して AlwaysOn の構築を実施してみたいと思います。