在多子网环境中连接到 Always On 侦听器时发生超时

本文可帮助你解决在多子网环境中连接到 SQL Server Always On 可用性组侦听器时发生的问题。

原始产品版本: SQL Server 2012 Developer、SQL Server 2012 Enterprise、SQL Server 2012 Express、SQL Server 2012 Standard、SQL Server 2012 Web、SQL Server 2012 Enterprise Core
原始 KB 数: 2792139

现象

在 Microsoft SQL Server 2012 中为 AlwaysOn 可用性组配置可用性组侦听器后,可能无法 ping 侦听器或从应用程序连接到它。

例如,尝试使用 SQLCMD 连接到 SQL Server 的侦听器时,连接超时。此外,你还会收到如下所示的错误消息:

Sqlcmd:错误:Microsoft SQL Native Client:登录超时已过期。

注意

这些症状通常是间歇性的,或与可用性组资源的故障转移相关的。

以下屏幕截图显示了尝试 ping 侦听器的可用性 aglisten时发生的情况示例。 屏幕截图还显示了在包含多子网故障转移参数-M时使用SQLCMD命令成功连接到 SQL Server。

ping 侦听器以获取 aglisten 可用性时的命令提示符窗口的屏幕截图。

注意

可以将 SQLCMD 命令与参数一起使用, -M 如屏幕截图中所示,以连接到侦听器。

原因

出现此问题的原因是应用程序使用不支持新 MultiSubnetFailover 参数的旧数据提供程序,或者未配置为使用此参数。

此参数在 .NET Framework 4 和更高版本的 .NET Framework 随附的较新版本的 SQLClient 驱动程序中受支持,并重新移植到 .NET Framework 3.5。

注意

PING 命令是一个简单的连接测试工具,不支持新参数。

解决方法

可以使用适用于你的案例的以下解决方法之一:

  • 若要解决数据提供程序支持MultiSubNetFailover参数的情况,请将参数添加到MultiSubNetFailover连接字符串,并将其设置为 true

  • 若要解决旧客户端无法使用 MultiSubnetFailover 该属性的情况,可以将侦听器 RegisterAllProvidersIP 的值更改为 0。 为此,请从 Windows PowerShell 命令行接口运行以下命令:

    Import-Module FailoverClusters
    Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
    

    屏幕截图显示了 Windows PowerShell 中命令示例的输出。

注意

将值设置为 RegisterAllProvidersIP 0 后,当前联机 IP 地址必须从 DNS 服务器取消注册,并且当发生故障转移时,必须将脱机 IP 地址注册到 DNS 服务器。 这可能会导致下一次故障转移的连接延迟。

详细信息

尝试连接到在多个子网上定义的侦听器时,如果客户端驱动程序尝试使用侦听器的脱机 IP 地址之一进行连接,操作可能会失败。

创建侦听器时,将为可用性组副本托管的每个唯一子网指定 IP 地址。 例如,如果为具有两个子网中存在副本的可用性组创建侦听器,则侦听器中定义了两个 IP 地址。 一个地址由一个应用程序使用,该应用程序可以连接到子网 1 中的 SQL Server 实例,另一个地址在应用程序连接到子网 2 中的 SQL Server 实例时使用。

侦听器在后台创建 Windows 群集客户端接入点资源。 其属性之一是 RegisterAllProvidersIP。 创建侦听器时,此值设置为 1,所有侦听器的 IP 地址都在 DNS 服务器中注册。 此配置为客户端提供了减少的重新连接时间。

由于 DNS 记录包含所有 IP 地址,因此尝试连接到侦听器的客户端必须知道如何处理这种情况。 该 MultiSubnetFailover 参数使客户端驱动程序能够并行尝试连接到所有侦听器的 IP 地址。 MultiSubnetFailover如果没有参数,客户端驱动程序将尝试按顺序连接到侦听器的所有 IP 地址。 顺序连接可能会导致长时间登录或登录超时。

注意

本文中提到的问题还会影响配置为使用 AlwaysOn 可用性组的辅助只读副本的 SharePoint 环境。 若要解决此问题,请执行以下任一操作适用于 SharePoint 版本:

参考