共用方式為


設定可用性群組的 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 負載平衡器來路由流量,從而簡化部署、維護並改善容錯移轉。

使用 DNN 接聽程式來取代現有的 VNN 接聽程式。 或者,將它與現有的 VNN 接聽程式搭配使用,讓您的可用性群組有兩個不同的連線點 - 一個使用 VNN 接聽程式名稱 (如果非預設,則為埠),另一個使用 DNN 接聽程式名稱和埠。

警告

使用 DNN 與使用 VNN 時的路由行為不同。 請勿使用連接埠 1433。 若要深入了解,請參閱本文稍後的連接埠考量一節。

必要條件

建議先準備好下列項目,再完成本文中的步驟:

注意

相同叢集上的每個可用性群組或容錯移轉叢集執行個體都需要自己的獨立連線點,無論是 VNN 聆聽器還是 DNN 聆聽器。

建立指令碼

使用 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"
    
    # restart 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 管理工作室

展開 SQL Server Management Studio (SSMS) 中的 [可用性群組接聽程式],以檢視您的 DNN 接聽程式:

在 SQL Server Management Studio (SSMS) 中的 [可用性群組接聽程式] 底下,檢視 DNN 接聽程式

Transact-SQL

使用 Transact-SQL 來檢視 DNN 接聽程式的狀態:

SELECT * FROM SYS.AVAILABILITY_GROUP_LISTENERS

1is_distributed_network_name 值表示接聽程式是分散式網路名稱 (DNN) 接聽程式:

使用 sys.availability_group_listeners 來識別 is_distributed_network_name 中值為 1 的 DNN 接聽程式

更新連接字串

更新需要連線至 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