Azure VM 上的SQL Server
提示
部署可用性组的方法有很多种。 简化您的部署,通过在同一Azure虚拟网络内的多个子网中创建SQL Server虚拟机(VM),消除对Always On 高可用性组的Azure Load Balancer或分布式网络名称(DNN)的需求。 如果已在单个子网中创建可用性组,可以将其迁移到多子网环境。
某些SQL Server功能依赖于硬编码的虚拟网络名称(VNN)。 将分布式网络名称 (DNN) 侦听器与 Always On 可用性组一起使用,并在单个子网中的 Azure VM 上运行 SQL Server 时,可能会遇到一些限制。
本文介绍 SQL Server 的功能以及与可用性组 DNN 侦听器的互操作性。
行为差异
请注意 VNN 侦听器和 DNN 侦听器的功能之间的以下差异:
- 故障转移时间:使用 DNN 侦听器时故障转移时间更快,因为无需等待网络负载均衡器检测故障事件并更改其路由。
- 现有连接:故障转移可用性组内 与特定数据库的 连接关闭,但与主副本的其他连接保持打开状态,因为 DNN 在故障转移过程中保持联机状态。 此行为不同于传统的 VNN 环境,当可用性组故障转移时,与主副本的所有连接通常会关闭,侦听器脱机,主副本将转换为辅助角色。 使用 DNN 侦听器时,可能需要调整应用程序连接字符串,以确保在故障转移时将连接重定向到新的主副本。
- 开放事务:针对故障转移可用性组中的数据库的开放事务会关闭并回滚,你需要手动重新连接。 例如,在SQL Server Management Studio中,关闭查询窗口并打开一个新窗口。
客户端驱动程序
对于 ODBC、OLEDB、ADO.NET、JDBC、PHP 和 Node.js 驱动程序,请将 DNN 侦听器名称和端口指定为connection string中的服务器名称。 若要确保在故障转移时快速连接,如果 SQL 客户端支持,请将 MultiSubnetFailover=True 添加到connection string。
工具
SQL Server Management Studio、sqlcmd 和 SQL 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 侦听器和端口。
有关如何将复制与可用性组配合使用的详细信息,请参阅 Publisher 和 AG、Subscriber 和 AG 和 Distributor 和 AG。
MPEG Audio Layer-3
支持本地和群集 MSDTC,但 MSDTC 使用动态端口。 此动态端口需要标准Azure Load Balancer才能配置 HA 端口。 因此,VM 必须使用标准 IP 预留,或者不能将其公开给 Internet。
定义两个规则:一个用于 RPC 终结点映射器端口 135,一个用于真正的 MSDTC 端口。 故障转移后,当新节点上的 MSDTC 端口更改时,将负载均衡器规则修改为指向新的 MSDTC 端口。
如果 MSDTC 是本地的,请务必允许出站通信。
分布式查询
分布式查询依赖于链接服务器,可以使用 AG DNN 侦听器和端口进行配置。 如果端口不是 1433,请在配置链接服务器时,选择使用其他数据源 SQL Server Management Studio选项。
FILESTREAM
支持 FILESTREAM,但不支持用户使用 Windows 文件 API 访问作用域内文件共享的情况。
FileTable
文件表受支持,但不支持用户使用Windows文件 API 访问作用域内文件共享的情况。
链接的服务器
使用 AG DNN 侦听器名称和端口配置链接服务器。 如果端口不是 1433,请在配置链接服务器时,选择使用其他数据源 SQL Server Management Studio选项。
常见问题
哪个SQL Server版本支持 AG DNN 侦听器?
SQL Server 2019 CU 8 及更高版本。
使用 DNN 侦听器时预期的故障转移时间是多少?
对于 DNN 侦听器,故障转移时间与 AG 故障转移时间相同,无需额外的时间(例如使用Azure Load Balancer时的探测时间)。
若要支持将 DNN 与 OLEDB 和 ODBC 一起使用,对 SQL 客户端是否有任何版本要求?
将 MultiSubnetFailover=True connection string 用于 DNN 侦听器支持。 它从 SQL Server 2012 (11.x) 开始可用。
我使用 DNN 侦听器是否需要进行任何SQL Server配置更改?
SQL Server不需要任何配置更改才能使用 DNN,但某些SQL Server功能可能需要更多考虑。
DNN 是否支持多子网群集?
是。 群集会在 DNS 中将 DNN 绑定到可用性组中所有副本的物理 IP 地址,而不考虑其所在的子网。 SQL 客户端会尝试 DNS 名称的所有 IP 地址,不考虑子网。
可用性组 DNN 侦听器是否支持只读路由?
是。 DNN 侦听器支持只读路由。