提示
有許多方法可部署可用性群組。 在相同 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。 若要深入了解,請參閱本文稍後的連接埠考量一節。
必要條件
建議先準備好下列項目,再完成本文中的步驟:
- SQL Server 使用 Windows Server 2016 及更新版本的 SQL Server 2019 CU8 及更新版本、SQL Server 2017 CU25 及更新版本,或 SQL Server 2016 SP3 及更新版本啟動。
- 判斷分散式網路名稱是否為 HADR 解決方案適用的連線選項。
- 設定您的 Always On 可用性群組。
- 安裝最新版的 PowerShell。
- 已識別您要用於 DNN 接聽程式的唯一埠。 用於 DNN 接聽程式的連接埠,在可用性群組或容錯移轉叢集執行個體的所有複本中都必須是唯一的。 沒有其他連線可以共用相同的連接埠。
注意
相同叢集上的每個可用性群組或容錯移轉叢集執行個體都需要自己的獨立連線點,無論是 VNN 聆聽器還是 DNN 聆聽器。
建立指令碼
使用 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" # restart 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 管理工作室
展開 SQL Server Management Studio (SSMS) 中的 [可用性群組接聽程式],以檢視您的 DNN 接聽程式:
Transact-SQL
使用 Transact-SQL 來檢視 DNN 接聽程式的狀態:
SELECT * FROM SYS.AVAILABILITY_GROUP_LISTENERS
1 的 is_distributed_network_name 值表示接聽程式是分散式網路名稱 (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