Azure SQL Server VM の可用性グループの ILB リスナーの構成

概要

重要

Azure には、リソースの作成と操作に関して、Azure Resource Manager とクラシックの 2 種類のデプロイメント モデルがあります。 この記事では、クラシック デプロイ モデルの使用方法について説明します。 ほとんどの新しいデプロイでは、Resource Manager モデルを使用することをお勧めします。

Resource Manager モデルで AlwaysOn 可用性グループのリスナーを構成する方法については、「Azure の AlwaysOn 可用性グループに使用する内部ロード バランサーの構成」をご覧ください。

可用性グループには、オンプレミスのみ、Azure のみ、またはオンプレミスと Azure の両方にまたがるハイブリッド構成のレプリカを含めることができます。 Azure レプリカは、同じリージョン内に配置することも、複数の仮想ネットワークを使用して複数のリージョンに配置することもできます。 この記事の手順では、既に可用性グループは構成しているものの、リスナーは構成していないと仮定しています。

内部リスナーのガイドラインと制限事項

Azure での内部ロード バランサー (ILB) と可用性グループ リスナーの使用には、次のガイドラインが適用されます。

  • 可用性グループ リスナーは、Windows Server 2008 R2、Windows Server 2012、および Windows Server 2012 R2 でサポートされます。
  • 内部可用性グループ リスナーは、クラウド サービスごとに 1 つのみサポートされます。これは、リスナーが ILB に対して構成されており、クラウド サービスごとに 1 つの ILB のみが存在するためです。 ただし、複数の外部リスナーを作成することができます。 詳しくは、「Azure での AlwaysOn 可用性グループの外部リスナーの構成」をご覧ください。

リスナーのアクセシビリティを決定する

Azure では、可用性グループ リスナーを構成する方法が 2 つあることを理解することが重要です。 これらの方法は、リスナーを作成するときに使用する Azure Load Balancer の種類によって異なります。 次の表で、その違いを説明します。

ロード バランサーの種類 実装 次の場合に使用します。
外部 仮想マシン (VM) をホストするクラウド サービスの "パブリック仮想 IP アドレス" を使用します。 インターネットなど、仮想ネットワークの外部からリスナーにアクセスする必要があります。
内部 "内部ロード バランサー" とリスナーのプライベート アドレスを使用します。 リスナーには同じ仮想ネットワーク内からのみアクセスできます。 このアクセスには、ハイブリッド シナリオでのサイト間 VPN が含まれます。

重要

クラウド サービスのパブリック VIP (外部ロード バランサー) を使用しているリスナーの場合、クライアント、リスナー、およびデータベースが同じ Azure リージョン内にある限り、送信料金は発生しません。 そうでない場合は、リスナーによって返されるすべてのデータが送信と見なされ、通常のデータ転送料金が発生します。

ILB は、リージョン スコープを持つ仮想ネットワークでのみ構成できます。 アフィニティ グループに構成されている既存の仮想ネットワークは ILB を使用できません。 詳細については、「内部ロード バランサーの概要」を参照してください。

この記事では、ILB を使用するリスナーの作成を中心に説明します。 パブリックまたは外部リスナーが必要な場合は、この記事の、外部リスナーの設定について説明するバージョンをご覧ください。

Direct Server Return を使用して負荷分散 VM エンドポイントを作成する

最初に、このセクションで後で説明するスクリプトを実行して、ILB を作成します。

Azure レプリカをホストする VM ごとに負荷分散されたエンドポイントを作成します。 複数のリージョンにレプリカがある場合は、そのリージョンの各レプリカが同じ Azure 仮想ネットワーク内の同じクラウド サービスにある必要があります。 複数の Azure リージョンにまたがる可用性グループ レプリカを作成するには、複数の仮想ネットワークを構成する必要があります。 仮想ネットワーク接続間での構成の詳細については、仮想ネットワーク接続に対する仮想ネットワークの構成に関するページを参照してください。

  1. Azure ポータルで、レプリカをホストする各 VM に移動して、詳細を表示します。

  2. 各 VM の [エンドポイント] タブをクリックします。

  3. 使用しようとしているリスナー エンドポイントの [名前][パブリック ポート] が未使用であることを確認します。 このセクションの例では、名前は MyEndpoint で、ポートは 1433 です。

  4. ローカル クライアントに、最新の PowerShell モジュールをダウンロードしてインストールします。

  5. Azure PowerShell を開始します。
    Azure 管理モジュールが読み込まれた状態で新しい PowerShell セッションが開きます。

  6. Get-AzurePublishSettingsFile を実行します。 このコマンドレットにより、ブラウザーで発行設定ファイルをローカル ディレクトリにダウンロードするよう指示されます。 Azure サブスクリプションのサインイン資格情報の入力を求められる場合があります。

  7. 次の Import-AzurePublishSettingsFile コマンドを、ダウンロードした発行設定ファイルのパスを指定して実行します。

    Import-AzurePublishSettingsFile -PublishSettingsFile <PublishSettingsFilePath>
    

    発行設定ファイルがインポートされたら、PowerShell セッションで、Azure サブスクリプションを管理できます。

  8. ILB の場合は、静的 IP アドレスを割り当てます。 次のコマンドを実行して、現在の仮想ネットワーク構成を確認します。

    (Get-AzureVNetConfig).XMLConfiguration
    
  9. レプリカをホストする VM が含まれるサブネットの サブネット 名をメモします。 この名前は、スクリプトの $SubnetName パラメーターで使用します。

  10. レプリカをホストする VM が含まれるサブネットの VirtualNetworkSite 名と開始する AddressPrefix をメモします。 両方の値を Test-AzureStaticVNetIP コマンドに渡し、AvailableAddresses を確認することによって、使用可能な IP アドレスを探します。 たとえば、仮想ネットワークの名前が MyVNet であり、サブネット アドレスの範囲が 172.16.0.128 から始まる場合、次のコマンドを実行すると、使用可能なアドレスのリストが表示されます。

    (Test-AzureStaticVNetIP -VNetName "MyVNet"-IPAddress 172.16.0.128).AvailableAddresses
    
  11. 使用可能なアドレスのいずれかを選択し、次の手順に含まれるスクリプトの $ILBStaticIP パラメーターで使用します。

  12. 次の PowerShell スクリプトをテキスト エディターにコピーし、環境に合わせて変数の値を設定します。 いくつかのパラメーターには、既定値が指定されています。

    アフィニティ グループを使用している既存のデプロイでは、ILB を追加できません。 ILB の要件の詳細については、「内部ロード バランサーの概要」を参照してください。

    また、可用性グループが複数の Azure リージョンにまたがっている場合、各データセンターにおいて、そのデータセンターに存在するクラウド サービスおよびノードごとにスクリプトを 1 回ずつ実行する必要があります。

    # Define variables
    $ServiceName = "<MyCloudService>" # the name of the cloud service that contains the availability group nodes
    $AGNodes = "<VM1>","<VM2>","<VM3>" # all availability group nodes containing replicas in the same cloud service, separated by commas
    $SubnetName = "<MySubnetName>" # subnet name that the replicas use in the virtual network
    $ILBStaticIP = "<MyILBStaticIPAddress>" # static IP address for the ILB in the subnet
    $ILBName = "AGListenerLB" # customize the ILB name or use this default value
    
    # Create the ILB
    Add-AzureInternalLoadBalancer -InternalLoadBalancerName $ILBName -SubnetName $SubnetName -ServiceName $ServiceName -StaticVNetIPAddress $ILBStaticIP
    
    # Configure a load-balanced endpoint for each node in $AGNodes by using ILB
    ForEach ($node in $AGNodes)
    {
        Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name "ListenerEndpoint" -LBSetName "ListenerEndpointLB" -Protocol tcp -LocalPort 1433 -PublicPort 1433 -ProbePort 59999 -ProbeProtocol tcp -ProbeIntervalInSeconds 10 -InternalLoadBalancerName $ILBName -DirectServerReturn $true | Update-AzureVM
    }
    
  13. 変数を設定したら、スクリプトを、テキスト エディターからそれを実行する PowerShell セッションにコピーします。 プロンプトにまだ >> が表示される場合、スクリプトの実行が確実に開始されるようにするため、Enter キーをもう一度押します。

KB2854082 がインストールされていることを確認する (必要に応じて)

次に、クラスター上に Windows Server 2008 R2 または Windows Server 2012 を実行しているサーバーがある場合は、修正プログラム KB2854082 がオンプレミスのサーバーまたはクラスターの一部である Azure VM にそれぞれインストールされていることを確認する必要があります。 クラスター内 (可用性グループ内ではなく) のすべてのサーバーまたは VM にも、この修正プログラムがインストールされている必要があります。

各クラスター ノードのリモート デスクトップ セッションで、 KB2854082 をローカル ディレクトリにダウンロードします。 次に、クラスター ノードごとに順番に修正プログラムをインストールします。 クラスター ノードでクラスター サービスが実行されている場合は、修正プログラムのインストールの最後に、サーバーが再起動されます。

警告

クラスター サービスの停止やサーバーの再起動は、クラスターおよび可用性グループのクォーラムの正常性に影響し、クラスターがオフラインになる場合があります。 インストール中に、クラスターの高可用性を維持するには、次のことを確認します。

  • クラスターのクォーラムの正常性が最適な状態にあること。
  • 任意のノードに修正プログラムをインストールする前に、すべてのクラスター ノードがオンラインになっていること。
  • クラスター内の他の任意のノードに修正プログラムをインストールする前に、1 つのノードでサーバーの完全な再起動を含む実行を完了することが修正プログラムのインストールで許可されていること。

可用性グループ ノードでファイアウォール ポートを開く

この手順では、ファイアウォール規則を作成して負荷分散エンドポイントのプローブ ポート (以前に指定した 59999) を開き、別の規則を作成して可用性グループ リスナー ポートを開きます。 可用性グループ レプリカを含む VM に負荷分散エンドポイントを作成したため、それぞれの VM でプローブ ポートとリスナー ポートを開く必要があります。

  1. レプリカをホストする VM で、セキュリティが強化された Windows ファイアウォールを起動します。

  2. [受信の規則] を右クリックし、[新しい規則] をクリックします。

  3. [規則の種類] ページで [ポート] を選択し、[次へ] をクリックします。

  4. [プロトコルおよびポート] ページの [特定のローカル ポート] ボックスで [TCP] を選択して「59999」と入力し、[次へ] をクリックします。

  5. [操作] ページで、 [接続を許可する] をオンにしたまま、 [次へ] をクリックします。

  6. [プロファイル] ページで、既定の設定をそのまま使用し、 [次へ] をクリックします。

  7. [名前] ページの [名前] ボックスで、規則の名前 (AlwaysOn リスナー プローブ ポートなど) を指定して、[完了] をクリックします。

  8. 可用性グループ リスナー ポート (前述したスクリプトの $EndpointPort パラメーターで指定) に対して上記の手順を繰り返し、適切な規則の名前 (AlwaysOn リスナー ポートなど) を指定します。

可用性グループ リスナーを作成する

可用性グループ リスナーを 2 つの手順で作成します。 まず、クライアント アクセス ポイント クラスター リソースを作成し、依存関係を構成します。 次に、PowerShell でクラスター リソースを構成します。

クライアント アクセス ポイントを作成してクラスターの依存関係を構成する

この手順では、フェールオーバー クラスター マネージャーおよび SQL Server Management Studio で可用性グループ リスナーを手動で作成します。

  1. プライマリ レプリカをホストしているノードからフェールオーバー クラスター マネージャーを開きます。

  2. Networks ノードを選択し、クラスター ネットワーク名をメモします。 この名前は、PowerShell スクリプトで $ClusterNetworkName 変数に使用されます。

  3. クラスター名を展開して、 [ロール] をクリックします。

  4. [ロール] ウィンドウで、可用性グループ名を右クリックし、 [リソースの追加]>[クライアント アクセス ポイント] の順にクリックします。

    可用性グループのクライアント アクセス ポイントを追加する

  5. [名前] ボックスで、この新しいリスナーの名前を作成し、[次へ] を 2 回クリックし、[完了] をクリックします。
    この時点では、リスナーまたはリソースをオンラインにしないでください。

  6. [リソース] タブをクリックして、作成したクライアント アクセス ポイントを展開します。 クラスター内の各クラスター ネットワークの IP アドレス リソースが表示されます。 これが Azure 専用ソリューションである場合は、1 つの IP アドレス リソースだけが表示されます。

  7. 以下のいずれかを実行します。

    • ハイブリッド ソリューションを構成するには

      a. オンプレミスのサブネットに対応する IP アドレス リソースを右クリックし、[プロパティ] を選択します。 IP アドレス名とネットワーク名をメモします。

      b. [静的 IP アドレス] を選択し、未使用の IP アドレスを割り当てて、[OK] をクリックします。

    • Azure のみのソリューションを構成するには

      a. Azure サブネットに対応する IP アドレス リソースを右クリックし、[ プロパティ] を選択します。

      Note

      DHCP によって選択されている IP アドレスの競合が原因で、後でリスナーがオンライン化に失敗する場合は、このプロパティ ウィンドウで、有効な静的 IP アドレスを設定できます。

      b. 同じ [IP アドレス] プロパティ ウィンドウで、[IP アドレス名] を変更します。
      この名前は、PowerShell スクリプトの $IPResourceName 変数で使用されます。 ソリューションが複数の Azure 仮想ネットワークにまたがる場合は、IP リソースごとにこの手順を繰り返します。

PowerShell でクラスター リソースを構成する

  1. ILB の場合、先ほど作成した ILB の IP アドレスを使用する必要があります。 PowerShell でこの IP アドレスを取得するには、次のスクリプトを使用します。

    # Define variables
    $ServiceName="<MyServiceName>" # the name of the cloud service that contains the AG nodes
    (Get-AzureInternalLoadBalancer -ServiceName $ServiceName).IPAddress
    
  2. VM のいずれかで、ご利用のオペレーティング システム用の PowerShell スクリプトをテキスト エディターにコピーし、変数を先ほどメモした値に設定します。

    Windows Server 2012 以降の場合、次のスクリプトを使用します。

    # Define variables
    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP address resource name
    $ILBIP = "<X.X.X.X>" # the IP address of the ILB
    
    Import-Module FailoverClusters
    
    Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$ILBIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"EnableDhcp"=0}
    

    Windows Server 2008 R2 の場合、次のスクリプトを使用します。

    # Define variables
    $ClusterNetworkName = "<MyClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP address resource name
    $ILBIP = "<X.X.X.X>" # the IP address of the ILB
    
    Import-Module FailoverClusters
    
    cluster res $IPResourceName /priv enabledhcp=0 address=$ILBIP probeport=59999  subnetmask=255.255.255.255
    
  3. 変数を設定したら、管理者特権で Windows PowerShell ウィンドウを開き、スクリプトをテキスト エディターからそれを実行する Azure PowerShell セッションに貼り付けます。 プロンプトにまだ >> が表示される場合、スクリプトの実行が確実に開始されるようにするため、Enter キーをもう一度押します。

  4. VM ごとに以上の手順を繰り返します。
    このスクリプトでは、クラウド サービスの IP アドレスを使用して IP アドレス リソースを構成し、プローブ ポートなどの他のパラメーターを設定します。 IP アドレス リソースがオンラインになると、プローブ ポートにおいて、先ほど作成した負荷分散エンドポイントからのポーリングに応答できます。

リスナーをオンラインにする

  1. フェールオーバー クラスター マネージャーで、 [ロール] を展開し、可用性グループを強調表示します。

  2. [リソース] タブで、リスナー名を右クリックし、 [プロパティ] をクリックします。

  3. [依存関係] タブをクリックします。複数のリソースが一覧表示される場合は、IP アドレスに (AND ではなく) OR 依存関係があることを確認します。

  4. [OK] をクリックします。

  5. リスナー名を右クリックし、 [オンラインにする] をクリックします。

  6. リスナーがオンラインになったら、 [リソース] タブで可用性グループを右クリックし、 [プロパティ] をクリックします。

    可用性グループ リソースを構成する

  7. (IP アドレス リソース名ではなく) リスナー名のリソースへの依存関係を作成し、 [OK] をクリックします。

    リスナー名の依存関係を追加する

  8. SQL Server Management Studio を起動し、プライマリ レプリカに接続します。

  9. AlwaysOn 高可用性>グループ><AvailabilityGroupName>> 可用性グループ リスナーに移動します。
    フェールオーバー クラスター マネージャーで作成したリスナー名が表示されます。

  10. リスナー名を右クリックし、 [プロパティ] をクリックします。

  11. [ポート] ボックスで、以前に使用した $EndpointPort (このチュートリアルでは、既定値は 1433) を使用し、可用性グループ リスナーのポート番号を指定して、 [OK] をクリックします。

フォローアップ項目

可用性グループ リスナーを作成すると、リスナー リソース用に RegisterAllProvidersIP と HostRecordTTL のクラスター パラメーターを調整する必要がある場合があります。 これらのパラメーターは、フェールオーバー後の再接続時間を短縮して、接続のタイムアウトを防ぐことができます。 これらのパラメーターに関する詳細とサンプル コードについては、「可用性グループ リスナーの作成または構成」を参照してください。

可用性グループ リスナー(同一仮想ネットワーク内) をテストする

この手順では、同じネットワーク上で実行されているクライアント アプリケーションを使用して、可用性グループ リスナーをテストします。

クライアント接続の要件は次のとおりです。

  • リスナーへのクライアント接続は、AlwaysOn 可用性レプリカをホストするクラウド サービスとは異なるクラウド サービス内に存在するマシンから接続する必要があります。
  • AlwaysOn レプリカが別のサブネットにある場合、クライアントは接続文字列で MultisubnetFailover=True を指定する必要があります。 この条件により、さまざまなサブネット内のレプリカへのパラレル接続が試行されます。 このシナリオには、AlwaysOn 可用性グループのリージョンをまたがるデプロイが含まれています。

たとえば、同じ Azure 仮想ネットワーク内のいずれかの VM (ただしレプリカをホストしていないもの) からリスナーに接続する場合がこれに当たります。 このテストを完了する簡単な方法は、SQL Server Management Studio を可用性グループ リスナーに接続してみることです。 もう 1 つの簡単な方法は、次のように SQLCMD.exeを実行することです。

sqlcmd -S "<ListenerName>,<EndpointPort>" -d "<DatabaseName>" -Q "select @@servername, db_name()" -l 15

Note

EndpointPort 値が 1433 の場合、呼び出しでこれを指定する必要はありません。 前の呼び出しでも、クライアント コンピューターが同じドメインに参加していて、データベースへのアクセス許可が Windows 認証を使用して呼び出し元に付与されていることを想定しています。

リスナーをテストする場合は、クライアントがフェールオーバー間でリスナーに接続できるように、可用性グループのフェールオーバーを必ず実行します。

次のステップ

リスナーは、クライアントを自動的にプライマリ レプリカに接続するだけでなく、読み取り専用ワークロードをセカンダリにリダイレクトするのにも使用できます。 このように使用することで、ソリューション全体のパフォーマンスとスケーラビリティが向上します。 詳細については、「Use ReadIntent Routing with Azure AlwaysOn Availability Group Listener (Azure AlwaysOn 可用性グループ リスナーと共に ReadIntent ルーティングを使用する)」を参照してください。

Note

Azure リスナーのトラブルシューティングに関するヒントについては、Azure での可用性グループ リスナーのトラブルシューティングに関する記事を AlwaysOn サポート チームのブログで参照してください。

Azure での SQL Server の使用に関する詳細については、Azure Virtual Machines における SQL Server に関する記事を参照してください。