可用性組偵聽器和舊客戶端軟體
我們有一個名為的多段 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:PS C:\> get-clusterresource "Cluster Name" | Get-ClusterParameter RegisterAllProvidersIP Object Name Value Type ------ ---- ----- ---- Cluster Name RegisterAllProvidersIP 0 UInt32
如果您使用了集群名稱,那麼您
RegisterAllProvidersIP
在錯誤的對像上設置了參數。您的螢幕截圖中有幾個名稱相似的對象:
- Windows 集群:
WC01
- 可用性組:
AG01
- AG 監聽器:
AGListener01
要驗證設置的配置方式,您應該使用偵聽器名稱而不是集群或 AG 名稱:
PS C:\> Get-ClusterResource AGListener01 | Get-ClusterParameter RegisterAllProvidersIP
或者,要逐步執行此操作,您可以這樣做
Get-ClusterResource
,您會看到如下內容:Name State OwnerGroup ResourceType ---- ----- ---------- ------------ 10.10.10.199 Online Cluster Group IP Address Cluster IP Address Online Cluster Group IP Address Cluster Name Online Cluster Group Network Name AG01 Online AG01 SQL Server Availability Group AG01_10.10.20.138 Offline AG01 IP Address AGListener01 Online AG01 Network Name File Share Witness Online Cluster Group File Share Witness IP Address 10.10.10.138 Online AG01 IP Address
在所有這些事情中,我們只關心屬於 AG 的 OwnerGroup 的對象。我們可以進一步過濾
Get-ClusterResource | Where OwnerGroup -eq AG01
:Name State OwnerGroup ResourceType ---- ----- ---------- ------------ AG01 Online AG01 SQL Server Availability Group AG01_10.10.20.138 Offline AG01 IP Address AGListener01 Online AG01 Network Name IP Address 10.10.10.138 Online AG01 IP Address
這 4 項代表構成我的 AG 的資源:AG 本身、偵聽器(列為“網路名稱”)和兩個 IP 地址,每個地址位於不同的子網中。
我要檢查
RegisterAllProvidersIP
參數的項目是偵聽器 (網路名稱)資源:Get-ClusterResource AGListener01 | Get-ClusterParameter
將為我提供偵聽器對象的完整參數列表:Object Name Value Type ------ ---- ----- ---- AGListener01 Name AGListener01 String AGListener01 DnsName AGListener01 String AGListener01 Aliases String AGListener01 RemapPipeNames 1 UInt32 AGListener01 HostRecordTTL 1200 UInt32 AGListener01 RegisterAllProvidersIP 1 UInt32 AGListener01 PublishPTRRecords 0 UInt32 AGListener01 ResourceData {1, 0, 0, 0...} ByteArray AGListener01 StatusNetBIOS 0 UInt32 AGListener01 StatusDNS 0 UInt32 AGListener01 StatusKerberos 0 UInt32 AGListener01 CreatingDC \\dc01.am2.co String AGListener01 LastDNSUpdateTime 9/29/2020 3:57:12 PM DateTime AGListener01 ObjectGUID abc1234def567890ab12cd3456ef7890 String AGListener01 DnsSuffix am2.co String AGListener01 ADAware 1 UInt32
我可以通過明確要求獲得特定參數
Get-ClusterResource AGListener01 | Get-ClusterParameter RegisterAllProvidersIP
Object Name Value Type ------ ---- ----- ---- AGListener01 RegisterAllProvidersIP 1 UInt32
如果這未設置為 0,那麼您將需要使用文件中概述的程式碼塊,並確保您使用的是偵聽器名稱,而不是集群名稱。該範例還建議設置 TTL(選擇確切的數字取決於您,儘管文件建議 300 秒)。請注意,要通過 DNS 名稱獲取新設置,必須使偵聽器離線和聯機:
Get-ClusterResource AGListener01 | Set-ClusterParameter RegisterAllProvidersIP 0 Get-ClusterResource AGListener01 | Set-ClusterParameter HostRecordTTL 300 Stop-ClusterResource AGListener01 Start-ClusterResource AGListener01
完成此操作後(舊的 TTL 已過期),您將能夠看到 Lister 僅配置了一個 IP 地址:
Resolve-DnsName AGListener01