Date: 10月 24, 2018
救命!我无法连接到我的SQL Server多子网故障转移群集
我的很多客户都遇到过这个问题。为了解决这个问题,我通常会告诉他们以下内容
该链接将包含您需要知道的一切。
如果您的连接不支持multisubnetfailover = true,他们不会详细说明该怎么做。如果您的连接不支持该参数,则将registerallprovidersip设置为false并清除DNS。这个过程在这里描述得最好。
SQL Server多子网故障转移群集如何实际工作?
通常,人们不了解SQL Server多子网故障转移群集的工作原理。Windows Server 2012中添加了多子网故障转移群集支持,并在定义群集资源依赖关系时添加了“OR”技术。这允许人们允许群集名称资源依赖于IP地址x.x.x.x或IP地址y.y.y.y.
x.x.x.x将是在子网A中有效的群集IP资源.y.y.y.y将是在子网B中有效的群集IP地址。在任何给定时间,只有一个地址将在线,无论哪个地址对于当前运行的资源的子网有效。
Microsoft SQL Server从SQL Server 2012开始支持这一概念,其中两个故障转移群集实例(FCI)都使用三方SANless群集解决方案,如SIOS DataKeeper和SQL Server Always On Availability Groups。
默认情况下,如果您创建SQL Server多子网故障转移群集,则应以最佳方式自动配置群集。这包括设置两个IP地址,向DNS添加两个A记录并将registerallprovidersIP设置为true。但是,在客户端,您需要告诉它您正在连接到多子网故障转移群集,否则将不会建立连接。
配置客户端
通过将multisubnetfailover = true添加到连接字符串来完成配置客户端。此Microsoft文档是一个很好的资源。但是,如果您只是搜索multisubnetfailover = true,您将找到有关该设置的大量信息。
不要不是每个应用程序都支持将其添加到连接字符串。如果您发现自己处于这种情况,您应该要求您的应用程序供应商添加对此的支持或向您展示如何执行此操作。
不要烦恼。如果你发现自己处于那种状况,一切都不会丢失。您将需要更改群集的行为,以便在更新故障转移时更新DNS,以便使用新IP地址更新与群集客户端访问点关联的单个A记录。这取代了在DNS中有两个A记录,每个记录包含一个群集IP地址,这是多子网群集中的默认行为。
帮助即将到来
本文引用了SharePoint,您可以忽略这一点,本文的其余部分编写得非常好,可以描述您应该遵循的过程。
该文章的重点如下……
Get-ClusterResource“[网络名称]”| Set-ClusterParameter RegisterAllProvidersIP 0重新启动cluster-name-object(基本上重新启动角色)并手动清理所有“A”记录(清理不是自动完成)后,我们可以看到我们的旧A记录仍在DNS中,因此我们需要手动删除它们。
除了这些步骤,我建议你减少HostRecordTTL上的TTL,如本文所述。
该文章的重点如下。
PS C:> Get-ClusterResource -Name cluster1FS |设置ClusterParameter -Name HostRecordTTL – 值300
如果值为300,则可能需要等待最多5分钟才能使客户端在故障转移后重新连接,如果拥有大型Active Directory基础结构且AD复制需要一些时间来更新基础结构中的所有DNS服务器,则可能需要更长时间。
您将需要弄清楚最佳TTL是什么,以便快速重新连接客户端,而不会因为DNS查询请求过多而使DNS服务器负担过重。
此类配置在DR站点位于不同子网的灾难恢复配置中很常见。它在AWS的HA部署中也很常见,因为不同的可用区位于不同的子网中。
如果您对SQL Server多子网故障转移群集有任何疑问,请与我们联系。你可以随时通过Twitter @daveberm与我联系