設定可用性群組的 DNN 接聽程式

適用於:Azure VM 上的 SQL Server

提示

有許多方法可部署可用性群組。 在相同 Azure 虛擬網路內的多個子網路中建立 SQL Server 虛擬機器 (VM),您的 Always On 可用性群組就可以簡化部署,而且不再需要 Azure Load Balancer 或分散式網路名稱 (DNN)。 如果您已在單一子網路中建立可用性群組,您可以將它移轉至多子網路環境

在單一子網路上使用 Azure VM 上的 SQL Server,分散式網路名稱 (DNN) 會將流量路由至適當的叢集資源。 它提供一種比虛擬網路名稱 (VNN) 接聽程式更簡單的方式,可讓您連線到 Always On 可用性群組 (AG),而不需要 Azure Load Balancer。

本文說明如何設定 DNN 接聽程式,以使用 Azure VM 上的 SQL Server 來取代 VNN 接聽程式,並將流量路由至您的可用性群組,以供高可用性和災害復原 (HADR) 使用。

對於替代的連線選項,請考慮改用 VNN 接聽程式和 Azure Load Balancer

概觀

分散式網路名稱 (DNN) 接聽程式會在與 SQL Server VM 上的 Always On 可用性群組搭配使用時,取代傳統的虛擬網路名稱 (VNN) 可用性群組接聽程式。 這樣就不需要 Azure Load Balancer 來路由流量,同時簡化部署、維護,及改善容錯移轉。

使用 DNN 接聽程式來取代現有的 VNN 接聽程式,或者將其與現有的 VNN 接聽程式搭配使用,讓您的可用性群組有兩個不同的連接點:一個使用 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. 將指令碼儲存為 .ps1 檔案,例如 add_dnn_listener.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
    

確認接聽程式

使用 SQL Server Management Studio 或 Transact-SQL 來確認已成功建立您的 DNN 接聽程式。

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_name1 值表示接聽程式是分散式網路名稱 (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 參數。
  • 當您使用其他 SQL Server 功能和具有 DNN 的可用性群組時,可能會有其他考量。 如需詳細資訊,請參閱 AG 與 DNN 的互通性

連接埠考量因素

DNN 接聽程式是設計來接聽所有 IP 位址,但在特定的唯一連接埠上。 接聽程式名稱的 DNS 項目應該解析為可用性群組中所有複本的位址。 這是使用建立指令碼區段中提供的 PowerShell 指令碼自動完成的。 由於 DNN 接聽程式接受所有 IP 位址的連線,因此,接聽程式連接埠必須是唯一的,而且未由可用性群組中的任何其他複本使用。 由於 SQL Server 預設會接聽連接埠 1433 (直接或透過 SQL Browser 服務),因此強烈建議不要使用 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 設定

若要深入了解,請參閱: