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

適用対象: Azure VM 上の SQL Server

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

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

DNN リスナー機能は、現在、Windows Server 2016 以降上の SQL Server 2019 CU8 以降でのみ使用できます。

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

概要

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

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

注意事項

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

前提条件

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

  • Windows Server 2016 以降上の SQL Server 2019 CU8 以降
  • 分散ネットワーク名がお客様の HADR ソリューションに適切な接続オプションであると判断済みであること。
  • Always On 可用性グループを構成済みであること。
  • 最新バージョンの PowerShell をインストール済みであること。
  • DNN リスナーに使用する一意のポートを特定してあること。 DNN リスナーに使用されるポートは、可用性グループまたはフェールオーバー クラスター インスタンスのすべてのレプリカ間で一意である必要があります。 他の接続で同じポートを共有することはできません。
  • DNN リスナーに接続するクライアントは、接続文字列の MultiSubnetFailover=True パラメーターをサポートする必要があります。

スクリプトの作成

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 リスナーを表示します。

SQL Server Management Studio (SSMS) の [可用性グループ リスナー] で DNN リスナーを表示する

Transact-SQL

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

SELECT * FROM SYS.AVAILABILITY_GROUP_LISTENERS

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

sys.availability_group_listeners を使用して、is_distributed_network_name の値が 1 である DNN リスナーを識別する

接続文字列を更新する

アプリケーションの接続文字列を更新して、DNN リスナーに接続されるようにします。 DNN リスナーの接続文字列には、DNN ポート番号を指定する必要があります。 フェールオーバー後の速やかな接続を確保するために、MultiSubnetFailover=True を接続文字列に追加します (SQL クライアントでサポートされている場合)。

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

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

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

  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 リスナーは、Windows Server 2016 以降上の SQL Server 2019 CU8 以降でのみサポートされています。
  • DNN リスナーは、一意のポートを使用して構成する 必要があります。 このポートは、どのレプリカでも他の接続と共有できません。
  • DNN を使用してその他の SQL Server 機能と可用性グループを操作する場合は、さらなる考慮事項が生じることがあります。 詳細については、AG と DNN の相互運用性に関する記事をご覧ください。

ポートに関する考慮事項

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

次のステップ

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

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