Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
提示
部署可用性组的方法有很多种。 通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使 Always On 可用性组不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。 如果已在单个子网中创建可用性组,则可以将其迁移到多子网环境。
通过单个子网中 Azure VM 上的 SQL Server,分布式网络名称 (DNN) 将流量路由到相应的群集资源。 它提供了一种比虚拟网络名称 (VNN) 侦听器更简单的方法来连接到 Always On 可用性组 (AG),不需要使用 Azure 负载均衡器。
本文介绍了如何配置 DNN 侦听器来替换 VNN 侦听器,并使用 Azure VM 上的 SQL Server 将流量路由到你的可用性组,以实现高可用性和灾难恢复 (HADR)。
对于备用连接选项,可考虑改用 VNN 侦听器和 Azure 负载均衡器。
概述
当与 SQL Server VM 上的 Always On 可用性组一起使用时,分布式网络名称 (DNN) 侦听器会取代传统的虚拟网络名称 (VNN) 可用性组侦听器。 此配置免去了对 Azure 负载均衡器进行流量路由的需求,简化了部署和维护,并提高了故障转移能力。
使用 DNN 侦听器替换现有的 VNN 侦听器。 或者,将其与现有的 VNN 侦听器一起使用,使可用性组拥有两个不同的连接点:一个使用 VNN 侦听器名称(和端口,如果不是默认端口的话),另一个使用 DNN 侦听器名称和端口。
注意
使用 DNN 和使用 VNN 时的路由行为不同。 请勿使用端口 1433。 若要了解详细信息,请参阅本文后面的端口注意事项部分。
先决条件
在完成本文中的步骤之前,应已做好以下准备:
- 从 SQL Server 2019 CU8 及更高版本、SQL Server 2017 CU25 及更高版本或 SQL Server 2016 SP3 及更高版本(在 Windows Server 2016 及更高版本上)开始的 SQL Server。
- 确定了分布式网络名称是适合用于你的 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 Management Studio
在 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 的可用性组时,可能会有更多注意事项。 有关详细信息,请参阅包含 DNN 的 AG 的互操作性。
端口注意事项
DNN 侦听器旨在侦听所有 IP 地址,但采用的是特定的唯一端口。 监听器名称的域名系统(DNS)条目应解析为可用性组中所有副本对应的地址。 此配置是使用 “创建脚本 ”部分提供的 PowerShell 脚本自动完成的。 由于 DNN 侦听器接受所有 IP 地址上的连接,因此侦听器端口必须是唯一且不重复的,并且不应被可用性组中任何其他副本使用。 由于 SQL Server 默认在端口 1433 上直接或通过 SQL 浏览器服务进行侦听,因此非常不鼓励使用 DNN 侦听器的端口 1433。
如果为 VNN 侦听器选择的侦听器端口介于 49,152 和 65,536 之间( TCP/IP 的默认动态端口范围,请为此端口添加排除项)。 这样做可以防止其他系统被动态地分配到相同的端口。
可以使用以下命令添加端口排除:netsh int ipv4 add excludedportrange tcp startport=<Listener Port> numberofports=1 store=persistent