AlwaysOn を Azure 上に構築してみる – WSFC の構築編 – に続いて SQL Server 部分 (AlwaysOn 可用性グループ) の構築をしていきたいと思います。
参考情報としては引き続き
Test Lab: Create an AlwaysOn Availability Group in Windows Azure End-to-End
Tutorial: AlwaysOn Availability Groups in Windows Azure
になります。
■Azure VM で AlwaysOn を構築するする
通常の AlwaysOn の構築に必要となる以下の作業は実施済みの状態としています。
- Windows ファイアウォールで TCP 1433 / TCP 5022 を許可
- SQL Server のサービスを可用性グループに含める SQL Server で同一のドメインユーザーを使用している
- SQL Server 構成マネージャーから [AlwaysOn 可用性グループを有効にする] を有効にしている
# 設定後はサービスを再起動
- AlwaysOn のウィザードを実行する SQL Server のユーザーデータベースのバックアップをもう一方の SQL Server に [WITH NORECOVERY] でリストアしている
これらの作業をした状態で AlwaysOn 可用性グループの構成ウィザードを起動します。
移行の構築の方法は通常の AlwaysOn と変わりません。可用性グループに含めるデータベースを選択して、可用性レプリカとして追加する SQL Server を指定します。
注意点としては、[リスナーを作成しない] という点でしょうか。
現状、Azure では WSFC の CNO をオンラインにすることができないため、リスナーを作成しようとしても以下のようなエラーが発生します。
そのため、AlwaysOn のクラスターリソースとしてはリスナーが含まれない以下のような状態となります。
ここまで設定が完了したら Azure のポータルから各仮想マシンに対してエンドポイントを設定します。
今回は同一のクラウドサービスとして構築していますので以下のようなエンドポイントを作成します。
負荷分散エンドポイントではなく、パブリックポート 1 でアクセスされたら WSFC-01、パブリックポート 2 でアクセスされたら WSFC-02 というようなエンドポイントの設定となっています。
接続する場合には、以下のようにクラウドサービス名の後に [,パブリックポート番号] で接続をします。
これで各パブリックポートに対応したインスタンスに接続をすることができます。
AlwaysOn の大きな特徴としてはリスナーを経由した透過的な更新可能 (または読み取り可能) なインスタンスへの接続があります。
現状、リスナーを作成することができないため、等価的に読み取り可能なインスタンスに接続することは難しそうです。
しかし、2 ノードの AlwaysOn であればどちらがプライマリかを意識しないで更新可能なインスタンスに接続をすることはできます。
この場合は、ミラーリングで使用していた [Failover Partner] という接続文字列を使用します。
データベース ミラーリング セッションへの最初の接続
今回は SSMS で試しているので、接続時のダイアログの [オプション] をクリックして、[追加の接続パラメーター] に以下のような設定をします。
# [Initial Catalog] も合わせて設定する必要があります。
今は WSFC-01 がプライマリになっていますので上記の接続設定で接続した場合には WSFC-01 につながります。
この状態で WSFC-02 にフェールオーバーを実施してみます。
すでに接続しているセッションでクエリを実行するとエラーになりますが、
再度実行すると WSFC-02 (フェールオーバー後のプライマリ) に接続がされます。
このようにミラーリングの接続文字列を使用することで、2 ノード間に限定してですが、等価的な接続を行うことも可能です。
ただし、[読み取り可能なセカンダリ] を [いいえ] にしておかないと [プライマリ] → [セカンダリ] に切り替わった後に [プライマリ] でデータベースに接続ができてしまい、更新可能なサーバーに接続がされないということがありそうです。
このあたりの情報は
Best Practices for Running SQL Server in Windows Azure Virtual Machine (Retired)
SQL Server in Windows Azure Virtual Machines
にも書いてありそうです。
将来的にはこの辺も解決され、オンプレミスと変わらない使い勝手になるのかとは思いますが、現状、Azure で AlwaysOn を構築する場合も、WSFC の構築同様に現在の制約の中での特有な動作を意識しておく必要がありそうですね。