链接服务器连接到多子网故障转移集群

And*_*ton 6 sql-server sql-server-2016

我们最近将我们的 SQL Server 分发数据库迁移到了多子网故障转移集群,并且发现偶尔在从发布者添加文章/查看复制状态时,我们会收到如下错误:

无法为链接服务器“repl_distributor”初始化 OLE DB 访问接口“SQLNCLI11”的数据源对象。(.Net SqlClient 数据提供程序)

这似乎是由于链接服务器连接跟一个多子网故障转移群集(如所描述的在这里

除了遵循在我们发布者的每个节点(也是一个多子网故障转移集群)上实现 ODBC 连接的解决方案之外,还有什么我们可以尝试修复连接到多子网 FCI 的链接服务器吗?

Jos*_*ell 3

您链接到的解决方案克服了使用MultiSubnetFailover=True连接字符串设置连接到多子网故障转移组的问题。

设置处理该问题的方式是并行尝试多个连接,而不是一个接一个地连接(默认行为)。这增加了在达到连接超时限制之前成功建立连接的机会。

如果您不想使用该选项(您提到不希望在所有群集服务器上配置 ODBC 连接的开销),另一种解决方案是将(链接的)服务器级连接超时设置增加到足够高的值处理串行连接尝试。

链接服务器上的默认连接超时为 10 秒(在设置屏幕上用“0”表示)。您可以通过执行以下操作将超时增加到 20 秒:

EXEC master.dbo.sp_serveroption 
    @server=N'YourLinkedServerName', 
    @optname=N'connect timeout', 
    @optvalue=N'20'
Run Code Online (Sandbox Code Playgroud)

如果您需要将连接超时更改为更高的值,因为 20 秒太低:

EXEC master.dbo.sp_serveroption 
    @server=N'repl_distributor', 
    @optname=N'connect timeout', 
    @optvalue=N'60'
Run Code Online (Sandbox Code Playgroud)

关于“连接超时”默认值的文档有点令人困惑。

sp_serveroption

连接到链接服务器的超时值(以秒为单位)。

如果为 0,则使用 sp_configure 默认值。

sp_configure不支持名为“连接超时”的选项,但有一个名为“远程登录超时”的选项(请参阅服务器配置选项)。这里的描述听起来像是我们正在寻找的东西:

远程登录超时选项指定从尝试登录远程服务器失败返回之前等待的秒数。
...
此选项的默认值为 10 秒。

在实践中,我只是使用默认设置在本地创建了一个链接服务器,关闭了目标实例,然后尝试查询它。10 秒超时 =)