SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

AlwaysOn を Azure 上に構築してみる – AlwaysOn の構築編 –

leave a comment

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 可用性グループを有効にする] を有効にしている
    # 設定後はサービスを再起動
    image
  • AlwaysOn のウィザードを実行する SQL Server のユーザーデータベースのバックアップをもう一方の SQL Server に [WITH NORECOVERY] でリストアしている
    image

これらの作業をした状態で AlwaysOn 可用性グループの構成ウィザードを起動します。
image

移行の構築の方法は通常の AlwaysOn と変わりません。可用性グループに含めるデータベースを選択して、可用性レプリカとして追加する SQL Server を指定します。
image image

注意点としては、[リスナーを作成しない] という点でしょうか。
image

現状、Azure では WSFC の CNO をオンラインにすることができないため、リスナーを作成しようとしても以下のようなエラーが発生します。
image

そのため、AlwaysOn のクラスターリソースとしてはリスナーが含まれない以下のような状態となります。
image

ここまで設定が完了したら Azure のポータルから各仮想マシンに対してエンドポイントを設定します。
今回は同一のクラウドサービスとして構築していますので以下のようなエンドポイントを作成します。
image
image

負荷分散エンドポイントではなく、パブリックポート 1 でアクセスされたら WSFC-01、パブリックポート 2 でアクセスされたら WSFC-02 というようなエンドポイントの設定となっています。
image

接続する場合には、以下のようにクラウドサービス名の後に [,パブリックポート番号] で接続をします。
image

これで各パブリックポートに対応したインスタンスに接続をすることができます。

AlwaysOn の大きな特徴としてはリスナーを経由した透過的な更新可能 (または読み取り可能) なインスタンスへの接続があります。
現状、リスナーを作成することができないため、等価的に読み取り可能なインスタンスに接続することは難しそうです。
しかし、2 ノードの AlwaysOn であればどちらがプライマリかを意識しないで更新可能なインスタンスに接続をすることはできます。

この場合は、ミラーリングで使用していた [Failover Partner] という接続文字列を使用します。
データベース ミラーリング セッションへの最初の接続

今回は SSMS で試しているので、接続時のダイアログの [オプション] をクリックして、[追加の接続パラメーター] に以下のような設定をします。
# [Initial Catalog] も合わせて設定する必要があります。
imageimage

今は WSFC-01 がプライマリになっていますので上記の接続設定で接続した場合には WSFC-01 につながります。
image

この状態で WSFC-02 にフェールオーバーを実施してみます。
すでに接続しているセッションでクエリを実行するとエラーになりますが、
image

再度実行すると WSFC-02 (フェールオーバー後のプライマリ) に接続がされます。
image

このようにミラーリングの接続文字列を使用することで、2 ノード間に限定してですが、等価的な接続を行うことも可能です。
ただし、[読み取り可能なセカンダリ] を [いいえ] にしておかないと [プライマリ] → [セカンダリ] に切り替わった後に [プライマリ] でデータベースに接続ができてしまい、更新可能なサーバーに接続がされないということがありそうです。
image

このあたりの情報は
Best Practices for Running SQL Server in Windows Azure Virtual Machine (Retired)
SQL Server in Windows Azure Virtual Machines
にも書いてありそうです。

将来的にはこの辺も解決され、オンプレミスと変わらない使い勝手になるのかとは思いますが、現状、Azure で AlwaysOn を構築する場合も、WSFC の構築同様に現在の制約の中での特有な動作を意識しておく必要がありそうですね。

Share

Written by Masayuki.Ozawa

5月 8th, 2013 at 11:47 pm

Leave a Reply