可用性グループの DNN リスナーの構成

適用対象:Azure VM 上の SQL Server

ヒント

可用性グループをデプロイする方法は多数あります。 デプロイを簡略化し、Always On 可用性グループに対して Azure Load Balancer または分散ネットワーク名 (DNN) を不要にするには、同じ Azure 仮想ネットワーク内の複数のサブネットに SQL Server 仮想マシン (VM) を作成します。 可用性グループを 1 つのサブネットに既に作成している場合は、マルチサブネット環境に移行できます。

1 つのサブネット内の Azure VM 上の SQL Server を使用すると、分散ネットワーク名 (DNN) によって、クラスター化された適切なリソースにトラフィックがルーティングされます。 これにより、仮想ネットワーク名 (VNN) リスナーよりも簡単に Always On 可用性グループ (AG) に接続する方法が提供されます。Azure Load Balancer は必要ありません。

この記事では、高可用性とディザスター リカバリー (HADR) のために、DNN リスナーを構成して、VNN リスナーを置き換え、Azure VM 上の SQL Server で可用性グループにトラフィックをルーティングする方法について説明します。

代替の接続オプションとしては、代わりに VNN リスナーと Azure Load Balancer を検討してください。

概要

分散ネットワーク名 (DNN) リスナーは、SQL Server VM 上の Always On 可用性グループと共に使用した場合、従来の仮想ネットワーク名 (VNN) 可用性グループ リスナーに取って代わります。 これにより、トラフィックのルーティングに Azure Load Balancer が不要になり、デプロイと保守が簡素化され、フェールオーバーが向上します。

DNN リスナーを既存の VNN リスナーの代わりに使用するか、または既存の VNN リスナーと組み合わせて使用します。後者の場合は、可用性グループに 2 つの異なる接続ポイント (VNN リスナー名 (既定以外の場合はポートも) を使用するものと、DNN リスナー名およびポートを使用するもの) が存在します。

注意事項

DNN を使用する場合のルーティング動作は、VNN を使用する場合と異なります。 ポート 1433 を使用しないでください。 詳細については、この記事で後述する「ポートに関する考慮事項」セクションをご覧ください。

前提条件

この記事の手順を完了するには、次のものが必要です。

スクリプトの作成

PowerShell を使用して分散ネットワーク名 (DNN) リソースを作成し、可用性グループに関連付けます。

これを行うには、次の手順に従います。

  1. メモ帳などのテキスト エディターを開きます。

  2. 次のスクリプトをコピーして貼り付けます。

    param (
       [Parameter(Mandatory=$true)][string]$Ag,
       [Parameter(Mandatory=$true)][string]$Dns,
       [Parameter(Mandatory=$true)][string]$Port
    )
    
    Write-Host "Add a DNN listener for availability group $Ag with DNS name $Dns and port $Port"
    
    $ErrorActionPreference = "Stop"
    
    # create the DNN resource with the port as the resource name
    Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag 
    
    # set the DNS name of the DNN resource
    Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns 
    
    # start the DNN resource
    Start-ClusterResource -Name $Port
    
    
    $Dep = Get-ClusterResourceDependency -Resource $Ag
    if ( $Dep.DependencyExpression -match '\s*\((.*)\)\s*' )
    {
    $DepStr = "$($Matches.1) or [$Port]"
    }
    else
    {
    $DepStr = "[$Port]"
    }
    
    Write-Host "$DepStr"
    
    # add the Dependency from availability group resource to the DNN resource
    Set-ClusterResourceDependency -Resource $Ag -Dependency "$DepStr"
    
    
    #bounce the AG resource
    Stop-ClusterResource -Name $Ag
    Start-ClusterResource -Name $Ag
    
  3. スクリプトを add_dnn_listener.ps1 などの .ps1 ファイルとして保存します。

スクリプトの実行

DNN リスナーを作成するには、可用性グループ名、リスナー名、およびポートのパラメーターを渡すスクリプトを実行します。

たとえば、可用性グループ名 ag1、リスナー名 dnnlsnr、リスナー ポート 6789 を想定した場合、次の手順を実行します。

  1. コマンド プロンプトや PowerShell などのコマンドライン インターフェイス ツールを開きます。

  2. .ps1 スクリプトを保存した場所 (C:\Documents など) に移動します。

  3. スクリプト add_dnn_listener.ps1 <ag name> <listener-name> <listener port> を実行します。 次に例を示します。

    c:\Documents> .\add_dnn_listener.ps1 ag1 dnnlsnr 6789
    

リスナーの確認

DNN リスナーが正常に作成されたことを確認するには、SQL Server Management Studio または Transact-SQL を使用します。

SQL Server Management Studio

SQL Server Management Studio (SSMS)[可用性グループ リスナー] を展開して、DNN リスナーを表示します。

View the DNN listener under availability group listeners in SQL Server Management Studio (SSMS)

Transact-SQL

Transact-SQL を使用して、DNN リスナーの状態を表示します。

SELECT * FROM SYS.AVAILABILITY_GROUP_LISTENERS

is_distributed_network_name の値 1 は、リスナーが分散ネットワーク名 (DNN) リスナーであることを示します。

Use sys.availability_group_listeners to identify DNN listeners that have a value of 1 in is_distributed_network_name

接続文字列を更新する

DNN リスナーに接続する必要があるアプリケーションの接続文字列を更新します。 DNN リスナーへの接続文字列では、DNN ポート番号を指定し、接続文字列で MultiSubnetFailover=True を指定する必要があります。 SQL クライアントで MultiSubnetFailover=True パラメーターがサポートされていない場合は、DNN リスナーと互換性がありません。

リスナー名 DNN_Listener とポート 6789 の接続文字列の例を次に示します。

DataSource=DNN_Listener,6789;MultiSubnetFailover=True

[テスト フェールオーバー]

可用性グループのフェールオーバーをテストして、機能を確認します。

フェールオーバーをテストするには、次の手順に従います。

  1. SQL Server Management Studio (SSMS) を使用して、DNN リスナーまたはいずれかのレプリカに接続します。
  2. オブジェクト エクスプローラー[Always On 可用性グループ] を展開します。
  3. 可用性グループを右クリックし、 [フェールオーバー] を選択して、フェールオーバー ウィザードを開きます。
  4. プロンプトに従ってフェールオーバー ターゲットを選択し、可用性グループをセカンダリ レプリカにフェールオーバーします。
  5. 新しいプライマリ レプリカで、データベースが同期状態であることを確認します。
  6. (省略可能) 元のプライマリ レプリカまたは別のセカンダ リレプリカにフェールバックします。

接続をテストする

次の手順に従って、DNN リスナーへの接続をテストします。

  1. SQL Server Management Studio を開きます。
  2. DNN リスナーに接続します。
  3. 新しいクエリ ウィンドウを開き、SELECT @@SERVERNAME を実行して、接続しているレプリカを確認します。
  4. 可用性グループを別のレプリカにフェールオーバーします。
  5. 十分な時間が経過したら、SELECT @@SERVERNAME を実行して、可用性グループが別のレプリカでホストされていることを確認します。

制限事項

  • DNN リスナーは、一意のポートを使用して構成する必要があります。 このポートは、どのレプリカでも他の接続と共有できません。
  • DNN リスナーに接続するクライアントは、接続文字列の MultiSubnetFailover=True パラメーターをサポートする必要があります。
  • DNN を使用してその他の SQL Server 機能と可用性グループを操作する場合は、さらなる考慮事項が生じることがあります。 詳細については、AG と DNN の相互運用性に関する記事をご覧ください。

ポートに関する考慮事項

DNN リスナーは、特定の一意のポートで、すべての IP アドレスをリッスンするように設計されています。 リスナー名の DNS エントリは、可用性グループ内のすべてのレプリカのアドレスに解決されます。 これは、「スクリプトの作成」セクションで示している PowerShell スクリプトで自動的に実行されます。 DNN リスナーはすべての IP アドレスで接続を受け入れるため、リスナー ポートが一意であること、可用性グループ内の他のレプリカで使用されていないことが重要です。 既定では、SQL Server は、直接、または SQL Browser サービスを介して、ポート 1433 でリッスンするため、DNN リスナーにはポート 1433 を使用しないことを強くお勧めします。

VNN リスナーに対して選択されたリスナー ポートが 49,152 から 65,536 (TCP/IP の既定の動的ポート範囲) の場合は、これに除外を追加します。 これにより、他のシステムが同じポートを動的に割り当てるのを防ぐことができます。

次のコマンドを使用して、ポートの除外を追加できます: netsh int ipv4 add excludedportrange tcp startport=<Listener Port> numberofports=1 store=persistent

次のステップ

可用性グループがデプロイされたら、Azure VM 上の SQL Server に対する HADR 設定を最適化することを検討します。

詳細については、以下をご覧ください。