Sql-Server-2016

可用性組偵聽器和舊客戶端軟體

  • September 29, 2020

我們有一個名為的多段 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 集群資源值。似乎沒有RegisterAllProvidersIPAG 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 

引用自:https://dba.stackexchange.com/questions/276225