我们有一个名为的多段 AG 侦听器SQLAGL01
,它指向这两个地址: 10.143.162.32(主服务器) 10.140.165.32(DR 服务器)
因为第 3 方(这意味着我们无法修复它,并且不,我们无法迁移到其他东西)应用程序软件使用不支持的旧驱动程序,所以MultiSubnetFailover=True
我们看到报告有一半时间失败的问题,因为SQLAGL01
解决了DR 地址 10.140.165.32。
按照Microsoft 文档,我们设置RegisterAllProvidersIP=0
并重新启动了集群。但是,SQLAGL01
仍有一半时间解析为 DR 地址。
在Failover Cluster Manager中,AG Listener的owner节点为主服务器,DR地址为offline。(这正常吗?)
这是集群角色的屏幕截图:
编辑:增值RegisterAllProvidersIP
。
PS C:\windows\system32> get-clusterresource "Cluster Name" | Get-ClusterParameter RegisterAllProvidersIP
Object Name Value Type
------ ---- ----- ----
Cluster Name RegisterAllProvidersIP 0 UInt32
编辑 2:添加了 AG 集群资源值。似乎没有RegisterAllProvidersIP
AG Listener 的资源。
编辑 3:添加了实际的侦听器资源值。
PS C:\windows\system32> get-clusterresource KYHIXSQLAGL01_KYHIXSQLAGL01 | Get-ClusterParameter RegisterAllProvidersIP
Object Name Value Type
------ ---- ----- ----
KYHIXSQLAGL01_KYHIXSQLAGL01 RegisterAllProvidersIP 1 UInt32
在您的问题中,您包括以下检查以验证您是否已将其设置
RegisterAllProvidersIP
为 false:如果您使用了集群名称,那么您
RegisterAllProvidersIP
在错误的对象上设置了参数。您的屏幕截图中有几个名称相似的对象:
WC01
AG01
AGListener01
要验证设置的配置方式,您应该使用侦听器名称而不是集群或 AG 名称:
或者,要逐步执行此操作,您可以这样做
Get-ClusterResource
,您会看到如下内容:在所有这些事情中,我们只关心属于 AG 的 OwnerGroup 的对象。我们可以进一步过滤
Get-ClusterResource | Where OwnerGroup -eq AG01
:这 4 项代表构成我的 AG 的资源:AG 本身、侦听器(列为“网络名称”)和两个 IP 地址,每个地址位于不同的子网中。
我要检查
RegisterAllProvidersIP
参数的项目是侦听器 (网络名称)资源:Get-ClusterResource AGListener01 | Get-ClusterParameter
将为我提供侦听器对象的完整参数列表:我可以通过明确要求获得特定参数
Get-ClusterResource AGListener01 | Get-ClusterParameter RegisterAllProvidersIP
如果这未设置为 0,那么您将需要使用文档中概述的代码块,并确保您使用的是侦听器名称,而不是集群名称。该示例还建议设置 TTL(选择确切的数字取决于您,尽管文档建议 300 秒)。请注意,要通过 DNS 名称获取新设置,必须使侦听器脱机和联机:
完成此操作后(旧的 TTL 已过期),您将能够看到 Lister 仅配置了一个 IP 地址:
我相信您正在设置多子网故障转移集群。那可能是您在一个站点上有主站点,而在另一个站点上有 DR。
如果是这种情况,据我所知,其他子网 IP 将始终显示脱机。
此外,我不确定您是否尝试手动联机并收到该错误。如果您可以使用多子网设置更新您的问题,以防万一,您可能想粘贴更多详细信息,当您在故障转移时遇到该错误时您正在做什么
我将基于此更新我的答案