設定可用性群組的 DNN 接聽程式
提示
有許多方法可部署可用性群組。 在相同 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。 若要深入了解,請參閱本文稍後的連接埠考量一節。
必要條件
建議先準備好下列項目,再完成本文中的步驟:
- SQL Server 使用 Windows Server 2016 及更新版本的 SQL Server 2019 CU8 及更新版本、SQL Server 2017 CU25 及更新版本,或 SQL Server 2016 SP3 及更新版本啟動。
- 判斷分散式網路名稱是否為 HADR 解決方案適用的連線選項。
- 設定您的 Always On 可用性群組。
- 安裝最新版的 PowerShell。
- 識別您將用於 DNN 接聽程式的唯一連接埠。 用於 DNN 接聽程式的連接埠,在可用性群組或容錯移轉叢集執行個體的所有複本中都必須是唯一的。 沒有其他連線可以共用相同的連接埠。
注意
如果您在相同叢集有多個 AG 或 FCI,而且您使用 DNN 或 VNN 接聽程式,則每個 AG 或 FCI 都必須有自己的獨立連接點。
建立指令碼
使用 PowerShell 來建立分散式網路名稱 (DNN) 資源,並將其與您的可用性群組建立關聯。
若要這樣做,請依照下列步驟執行:
開啟文字編輯器,例如 [記事本]。
複製並貼上下列指令碼:
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
將指令碼儲存為
.ps1
檔案,例如add_dnn_listener.ps1
。
執行指令碼
若要建立 DNN 接聽程式,請針對可用性群組、接聽程式名稱和連接埠的名稱,執行傳遞參數的指令碼。
例如,假設可用性群組名稱為 ag1
,接聽程式名稱為 dnnlsnr
,以及接聽程式連接埠為 6789
,請遵循下列步驟:
開啟命令列介面工具,例如命令提示字元或 PowerShell。
導覽至您儲存
.ps1
指令碼的位置,例如 c:\Documents。執行指令碼:
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 接聽程式:
Transact-SQL
使用 Transact-SQL 來檢視 DNN 接聽程式的狀態:
SELECT * FROM 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
測試容錯移轉
測試可用性群組的容錯移轉,以確保功能。
若要測試容錯移轉,請遵循下列步驟:
- 使用 SQL Server Management Studio (SSMS),連線至 DNN 接聽程式或其中一個複本。
- 在 [物件總管] 中,展開 [Always On 可用性群組]。
- 以滑鼠右鍵按一下可用性群組,然後選擇 [容錯移轉],以開啟 [容錯移轉精靈]。
- 遵循提示來選擇容錯移轉目標,並將可用性群組容錯移轉至次要複本。
- 確認新的主要複本上的資料庫處於已同步處理的狀態。
- (選用) 容錯回復到原始的主要複本或另一個次要複本。
測試連線能力
使用下列步驟來測試 DNN 接聽程式的連線:
- 開啟 [SQL Server Management Studio] 。
- 連線至您的 DNN 接聽程式。
- 開啟新的查詢視窗,並執行
SELECT @@SERVERNAME
以檢查您連線的複本。 - 將可用性群組容錯移轉至另一個複本。
- 經過一段合理的時間之後,請執行
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 設定。
若要深入了解,請參閱: