与 AG 和 DNN 侦听器的功能互操作性

适用于:Azure VM 上的 SQL Server

提示

部署可用性组的方法有很多种。 通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使 Always On 可用性组不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。 如果已在单个子网中创建可用性组,可以将其迁移到多子网环境

某些 SQL Server 功能依赖于硬编码的虚拟网络名称 (VNN)。 因此,将分布式网络名称 (DNN) 侦听器用于 Always On 可用性组以及单个子网中的 Azure VM 上 SQL Server,可能还有一些其他注意事项。

本文详细介绍了 SQL Server 功能以及与可用性组 DNN 侦听器的互操作性。

行为差异

VNN 侦听器和 DNN 侦听器的功能之间有一些必须注意的行为差异:

  • 故障转移时间:使用 DNN 侦听器时,故障转移时间更快,因为不需要等待网络负载均衡器来检测失败事件和更改其路由。
  • 现有连接:与故障转移可用性组中特定数据库之间的连接会关闭,但与主要副本的其他连接会保持打开状态,因为在故障转移过程中,DNN 将保持联机状态。 这不同于传统的 VNN 环境。在传统 VNN 环境中,主要副本的所有连接通常在可用性组故障转移时关闭,侦听器进入脱机状态,而主要副本转换为次要角色。 使用 DNN 侦听器时,可能需要调整应用程序连接字符串,以确保在故障转移时将连接重定向到新的主要副本。
  • 开放事务:针对故障转移可用性组中的数据库的开放事务会关闭并回滚,你需要手动重新连接。 例如,在 SQL Server Management Studio 中,关闭查询窗口并打开一个新窗口。

客户端驱动程序

对于 ODBC、OLEDB、ADO.NET、JDBC、PHP 和 Node.js 驱动程序,用户需要在连接字符串中显式将 DNN 侦听器名称和端口指定为服务器名称。 若要确保故障转移时的快速连接,请将 MultiSubnetFailover=True 添加到连接字符串(如果 SQL 客户端支持它)。

工具

SQL Server Management StudiosqlcmdAzure Data StudioSQL Server Data Tools 的用户需要在连接字符串中显式将 DNN 侦听器名称和端口指定为服务器名称才能连接到侦听器。

当前不支持通过 SQL Server Management Studio (SSMS) GUI 创建 DNN 侦听器。

可用性组和 FCI

可以通过将故障转移群集实例 (FCI) 用作副本之一来配置 Always On 可用性组。 若要将此配置与 DNN 侦听器一起使用,故障转移群集实例还必须使用 DNN,因为无法将 FCI 虚拟 IP 地址放入 AG DNN IP 列表中。

在此配置中,FCI 副本的镜像终结点 URL 需要使用 FCI DNN。 同样,如果将 FCI 用作只读副本,则到 FCI 副本的只读路由需要使用 FCI DNN。

镜像终结点的格式为:ENDPOINT_URL = 'TCP://<FCI DNN DNS name>:<mirroring endpoint port>'

例如,如果你的 FCI DNN DNS 名称为 dnnlsnr,并且 5022 是 FCI 的镜像终结点的端口,则用于创建终结点 URL 的 Transact-SQL (T-SQL) 代码片段如下所示:

ENDPOINT_URL = 'TCP://dnnlsnr:5022'

类似地,只读路由 URL 的格式为:TCP://<FCI DNN DNS name>:<SQL Server instance port>

例如,如果你的 DNN DNS 名称为 dnnlsnr,并且 1444 是只读目标 SQL Server FCI 使用的端口,则用于创建只读路由 URL 的 T-SQL 代码片段如下所示:

READ_ONLY_ROUTING_URL = 'TCP://dnnlsnr:1444'

如果端口是默认的 1433 端口,则可在 URL 中省略该端口。 对于命名实例,请为其配置静态端口,并在只读路由 URL 中指定该端口。

分布式可用性组

如果可用性组侦听程序是使用分布式网络名称 (DNN) 配置的,则不支持在可用性组之上配置分布式可用性组。

复制

事务性复制、合并复制和快照复制都支持在连接到侦听器的复制对象中将 VNN 侦听器替换为 DNN 侦听器和端口。

有关如何对可用性组使用复制的详细信息,请参阅发布服务器和 AG订阅服务器和 AG以及分发服务器和 AG

MSDTC

支持本地和群集化 MSDTC,但 MSDTC 使用动态端口,这需要使用标准 Azure 负载均衡器来配置 HA 端口。 因此,VM 必须使用标准 IP 保留,否则它无法向 Internet 公开。

定义两个规则,一个用于 RPC 端点映射程序端口 135,一个用于真实的 MSDTC 端口。 故障转移后,当 MSDTC 端口在新节点上进行了更改,可修改 LB 规则,改用新端口。

如果 MSDTC 是本地的,请务必允许出站通信。

分布式查询

分布式查询依赖于链接服务器,可以使用 AG DNN 侦听器和端口配置该服务器。 如果端口不是 1433,则在配置链接服务器时,请在 SQL Server Management Studio (SSMS) 中选择“使用其他数据源”选项。

FILESTREAM

文件流受支持,但不适用于用户通过 Windows 文件 API 访问具有作用域的文件共享的场景。

FileTable

FileTable 受支持,但不适用于用户通过 Windows 文件 API 访问具有作用域的文件共享的场景。

链接服务器

使用 AG DNN 侦听器名称和端口配置链接服务器。 如果端口不是 1433,则在配置链接服务器时,请在 SQL Server Management Studio (SSMS) 中选择“使用其他数据源”选项。

常见问题

哪个 SQL Server 版本引入了 AG DNN 侦听器支持?

SQL Server 2019 CU 8 及更高版本。

使用 DNN 侦听器时的预期故障转移时间是多少?

对于 DNN 侦听器,故障转移时间与 AG 故障转移时间相同,没有额外的时间(例如使用 Azure 负载均衡器时的探测时间)。

若要支持将 DNN 与 OLEDB 和 ODBC 一起使用,对 SQL 客户端是否有任何版本要求?

建议使用针对 DNN 侦听器的 MultiSubnetFailover=True 连接字符串支持。 它从 SQL Server 2012 (11.x) 开始提供。

使用 DNN 侦听器需要更改 SQL Server 配置吗?

SQL Server 不要求更改配置才能使用 DNN,但某些 SQL Server 功能可能需要额外注意一些事项。

DNN 是否支持多子网群集?

是。 群集会将 DNS 中的 DNN 绑定到可用性组中所有副本的物理 IP 地址,不考虑子网。 SQL 客户端会尝试 DNS 名称的所有 IP 地址,不考虑子网。

可用性组 DNN 侦听器是否支持只读路由?

是。 DNN 侦听器支持只读路由。