次の方法で共有


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

このトピックでは、インターネット上で外部からアクセス可能な、AlwaysOn 可用性グループのリスナーを構成する方法について説明します。 これは、クラウド サービスの パブリック仮想 IP (VIP) アドレスをリスナーに関連付けることにより可能になります。

重要

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

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

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

クラウド サービスのパブリック VIP アドレスを使用してデプロイしている場合は、Azure での可用性グループ リスナーに関する次のガイドラインを確認してください。

  • 可用性グループ リスナーは、Windows Server 2008 R2、Windows Server 2012、および Windows Server 2012 R2 でサポートされます。
  • クライアント アプリケーションは、可用性グループ VM が含まれるクラウド サービスとは異なるクラウド サービスに存在する必要があります。 Azure では、同じクラウド サービスに存在するクライアントとサーバーによる Direct Server Return はサポートされません。
  • 既定では、この記事の手順により、クラウド サービスの仮想 IP (VIP) アドレスを使用するリスナーが 1 つ構成されます。 ただし、クラウド サービスに対して複数の VIP アドレスを予約して作成することができます。 これにより、この記事の手順を使用して、別の VIP にそれぞれ関連付けられている複数のリスナーを作成することができます。 複数の VIP アドレスを作成する方法の詳細については、「 クラウド サービスごとの複数の VIP」を参照してください。
  • ハイブリッド環境でのリスナーを作成する場合、オンプレミスのネットワークは、Azure 仮想ネットワークを使用したサイト間 VPN への接続に加えて、パブリック インターネットへの接続が必要です。 Azure のサブネットでは、可用性グループ リスナーは個々 のクラウド サービスのパブリック IP アドレスによってのみ到達可能です。
  • 内部ロード バランサー (ILB) を使用する内部リスナーも含まれるクラウド サービスに外部リスナーを作成することはできません。

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

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

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

重要

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

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

この記事では、 外部負荷分散を使用するリスナーの作成を中心に説明します。 仮想ネットワーク専用のリスナーが必要な場合は、この記事の、ILB を使用するリスナーを設定するための手順を説明するバージョンをご覧ください。

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

外部負荷分散では、VM をホストするクラウド サービスのパブリック仮想 IP アドレスを使用します。 そのため、この場合はロード バランサーを作成または構成する必要はありません。

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

  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. 次の PowerShell スクリプトをテキスト エディターにコピーし、環境に合わせて変数の値を設定します (一部のパラメーターには既定値が指定されています)。 可用性グループが複数の 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
    
    # Configure a load balanced endpoint for each node in $AGNodes, with direct server return enabled
    ForEach ($node in $AGNodes)
    {
        Get-AzureVM -ServiceName $ServiceName -Name $node | Add-AzureEndpoint -Name "ListenerEndpoint" -Protocol "TCP" -PublicPort 1433 -LocalPort 1433 -LBSetName "ListenerEndpointLB" -ProbePort 59999 -ProbeProtocol "TCP" -DirectServerReturn $true | Update-AzureVM
    }
    
  9. 変数の設定後、スクリプトを、テキスト エディターからそれを実行する Azure 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. 外部負荷分散の場合、レプリカが含まれるクラウド サービスのパブリック仮想 IP アドレスを取得する必要があります。 Azure Portal にログインします。 可用性グループの VM が含まれるクラウド サービスに移動します。 [ダッシュボード] ビューを開きます。

  2. [パブリック仮想 IP (VIP) アドレス] の下に表示されたアドレスをメモします。 ソリューションが複数の VNet にまたがっている場合は、レプリカをホストする VM が含まれるクラウド サービスごとにこの手順を繰り返します。

  3. VM のいずれかで、次の PowerShell スクリプトをテキスト エディターにコピーし、変数を先ほどメモした値に設定します。

    # Define variables
    $ClusterNetworkName = "<ClusterNetworkName>" # the cluster network name (Use Get-ClusterNetwork on Windows Server 2012 of higher to find the name)
    $IPResourceName = "<IPResourceName>" # the IP Address resource name
    $CloudServiceIP = "<X.X.X.X>" # Public Virtual IP (VIP) address of your cloud service
    
    Import-Module FailoverClusters
    
    # If you are using Windows Server 2012 or higher, use the Get-Cluster Resource command. If you are using Windows Server 2008 R2, use the cluster res command. Both commands are commented out. Choose the one applicable to your environment and remove the # at the beginning of the line to convert the comment to an executable line of code.
    
    # Get-ClusterResource $IPResourceName | Set-ClusterParameter -Multiple @{"Address"="$CloudServiceIP";"ProbePort"="59999";"SubnetMask"="255.255.255.255";"Network"="$ClusterNetworkName";"OverrideAddressMatch"=1;"EnableDhcp"=0}
    # cluster res $IPResourceName /priv enabledhcp=0 overrideaddressmatch=1 address=$CloudServiceIP probeport=59999  subnetmask=255.255.255.255
    
  4. 変数の設定後、管理者特権で Windows PowerShell ウィンドウを開いて、スクリプトをテキスト エディターからコピーし、それを実行する Azure PowerShell セッションに貼り付けます。 プロンプトにまだ ">>" が表示される場合は、もう一度 Enter キーを押して、スクリプトの実行が開始されるようにします。

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

可用性グループ リスナー(同一 VNet 内) をテストする

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

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

  • リスナーへのクライアント接続は、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 認証を使用して呼び出し元に付与されていることを想定しています。

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

可用性グループ リスナー(インターネット経由) をテストする

仮想ネットワークの外部からリスナーにアクセスするには、同じ VNet 内のみアクセス可能な ILB ではなく、外部/公開負荷分散 (このトピックで説明) を使用している必要があります。 接続文字列で、クラウド サービス名を指定します。 たとえば、クラウド サービスの名前が mycloudserviceの場合、sqlcmd ステートメントは次のようになります。

sqlcmd -S "mycloudservice.cloudapp.net,<EndpointPort>" -d "<DatabaseName>" -U "<LoginId>" -P "<Password>"  -Q "select @@servername, db_name()" -l 15

呼び出し元はインターネット経由で windows 認証を使用できないため、前の例とは異なり SQL 認証を使用する必要があります。 詳細については、「 AlwaysOn Availability Group in Azure VM: Client Connectivity Scenarios (Azure VM での AlwaysOn 可用性グループ: クライアント接続のシナリオ)」をご覧ください。 SQL 認証を使用する場合は、両方のレプリカで必ず同じログインを作成します。 可用性グループのログインに関するトラブルシューティングの詳細については、「 How to map logins or use contained SQL database user to connect to other replicas and map to availability databases (ログインをマップするか、または 包含 SQL データベース ユーザーを使用して他のレプリカに接続し、可用性データベースにマップする方法)」を参照してください。

AlwaysOn レプリカが別のサブネットにある場合、クライアントは接続文字列で MultisubnetFailover=True を指定する必要があります。 これにより、別のサブネット内のレプリカへのパラレル接続が試行されます。 このシナリオには、AlwaysOn 可用性グループのリージョンをまたがるデプロイが含まれていることに注意してください。

次のステップ

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

Note

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

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