.net 使用多子网故障切换连接到SQL Server 2012 AlwaysOn组侦听器会导致超时

.net 使用多子网故障切换连接到SQL Server 2012 AlwaysOn组侦听器会导致超时,.net,ado.net,sql-server-2012,windows-server-2012,alwayson,.net,Ado.net,Sql Server 2012,Windows Server 2012,Alwayson,我们遇到了一个奇怪的问题,当MultiSubnetFailover设置为true时,我们的开发人员无法连接到AlwaysOn可用性组侦听器。但是,当尝试直接连接到组的主节点时,客户端可以进行连接。我们在使用.Net 4.0.3的windows 8和使用.Net 4.0.3的windows 7上通过下面的最低测试条件复制了这一点。和.NET4.5 我们还成功地让暂存服务器通过组侦听器连接,并使用sqlcmd和SMS使用MultiSubnetFailover标志连接到vip。这样看来,侦听器本身的配

我们遇到了一个奇怪的问题,当MultiSubnetFailover设置为true时,我们的开发人员无法连接到AlwaysOn可用性组侦听器。但是,当尝试直接连接到组的主节点时,客户端可以进行连接。我们在使用.Net 4.0.3的windows 8和使用.Net 4.0.3的windows 7上通过下面的最低测试条件复制了这一点。和.NET4.5

我们还成功地让暂存服务器通过组侦听器连接,并使用sqlcmd和SMS使用MultiSubnetFailover标志连接到vip。这样看来,侦听器本身的配置是正确的

下面是对侦听器名称的nslookup的结果。就我在网上所能找到的,我们已经做了所有正确的事情,但是连接仍然超时。非常感谢任何人能提供的任何帮助

更新:

Non-authoritative answer:
Name:   sql02
Address: 10.101.2.222
Name:   sql02
Address: 10.101.1.222
Name:   sql02
Address: 10.101.0.222
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var connection = new SqlConnection(@"                     
                Data Source              = sql02;
                Initial Catalog          = test;
                Integrated Security      = True;
                MultiSubnetFailover      = True;
                MultipleActiveResultSets = True;
                Max Pool Size            = 512;");

            connection.Open();

        }
    }
}
通过消除过程,这似乎在某种程度上与在开发人员机器上安装VisualStudio有关

NSLookup:

Non-authoritative answer:
Name:   sql02
Address: 10.101.2.222
Name:   sql02
Address: 10.101.1.222
Name:   sql02
Address: 10.101.0.222
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var connection = new SqlConnection(@"                     
                Data Source              = sql02;
                Initial Catalog          = test;
                Integrated Security      = True;
                MultiSubnetFailover      = True;
                MultipleActiveResultSets = True;
                Max Pool Size            = 512;");

            connection.Open();

        }
    }
}
最小测试用例:

Non-authoritative answer:
Name:   sql02
Address: 10.101.2.222
Name:   sql02
Address: 10.101.1.222
Name:   sql02
Address: 10.101.0.222
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var connection = new SqlConnection(@"                     
                Data Source              = sql02;
                Initial Catalog          = test;
                Integrated Security      = True;
                MultiSubnetFailover      = True;
                MultipleActiveResultSets = True;
                Max Pool Size            = 512;");

            connection.Open();

        }
    }
}

尝试将登录超时增加到30秒,看看连接是否成功。如果是,请记下连接需要多少秒。大约20-22秒

您可以使用SQLCMD.EXE进行如下测试:


sqlcmd-S listener-E-M-l30

实际上,我们已经在上周发现了这个问题

原来这是运行Avast的开发机器造成的驱动程序问题!作为防病毒解决方案。我们无法找到阻止这种情况发生的魔法设置,因此我们不得不卸载Avast!并将用另一个防病毒软件取代它