Availability-Groups

嘗試創建分佈式可用性組時出現網路數據包負載錯誤

  • April 17, 2019

我正在嘗試在 SQL 2016 SP1 上創建分佈式 AG,但不斷收到以下錯誤。我已經在 VirtualBox(本地桌面)和實際的 VMWare 虛擬環境中嘗試過,但每次都會遇到相同的錯誤。

AG 在兩個 WFC 上都成功創建,但是當我嘗試“ALTER AVAILABILITY GROUP

$$ Dist AG Name $$JOIN”在“遠端”AG的主副本上,命令成功完成,但我立即在日誌中收到此錯誤:

嘗試建立與 ID 為可用性副本“AG1”的連接時發生連接超時

$$ FCAA4083-D6B8-1BAC-9E8C-6AECE34513E6 $$. 存在網路或防火牆問題,或者為副本提供的端點地址不是主機伺服器實例的數據庫鏡像端點。

在“本地”AG 的主副本上,我開始在日誌中反複收到這些錯誤:

網路數據包有效負載中指定的長度與讀取的字節數不匹配;連接已關閉。請聯繫客戶端庫的供應商。

$$ CLIENT: 192.168.56.104 $$

這些是顯示在事件查看器事件中的字節:

0000: AC 45 00 00 14 00 00 00   ¬E...... 
0008: 14 00 00 00 41 00 47 00   ....A.G. 
0010: 31 00 53 00 45 00 52 00   1.S.E.R.
0018: 56 00 45 00 52 00 31 00   V.E.R.1.
0020: 5C 00 41 00 47 00 31 00   \.A.G.1.
0028: 49 00 4E 00 53 00 54 00   I.N.S.T.
0030: 31 00 00 00 00 00 00 00   1.......

在這兩種環境中,我只處理一個子網和一個域。在故障排除期間,我還嘗試從 VM 主機名、實例名稱、AG 名稱和偵聽器名稱中刪除所有特殊字元。

想知道是否有人以前遇到過這種情況。我在 SP2 發行說明中沒有看到任何表明它存在錯誤的內容,但如果有人認為值得,我願意嘗試升級 SP2。(不幸的是,我暫時無法升級我的產品環境,這就是為什麼我還沒有嘗試過。)

如果有人願意嘗試重現或提供故障排除提示,我還可以發布完整的端點/AG/偵聽器創建腳本。

謝謝!

好吧,我終於找到了問題,這是我自己的愚蠢錯誤。創建分佈式可用性組時,對於 LISTENER_URL 子句,您必須指定偵聽器 DNS 名稱,但必須指定鏡像端點埠。我正在指定偵聽器 DNS 名稱和偵聽器埠。

例如,這是我的端點定義(注意埠 5022):

CREATE ENDPOINT [Hadr_endpoint] 
   STATE=STARTED
   AS TCP (LISTENER_PORT = 5022, LISTENER_IP = (192.168.159.102))
   FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = WINDOWS NEGOTIATE
, ENCRYPTION = REQUIRED ALGORITHM AES)
GO

這是我的監聽器定義(注意埠 1435):

ALTER AVAILABILITY GROUP [AG1]
ADD LISTENER N'AG1LISTENER' (
WITH IP
((N'192.168.232.203', N'255.255.255.0')
)
, PORT=1435);
GO

這是定義分佈式 AG 的正確方法(注意偵聽器 DNS 名稱但端點埠):

CREATE AVAILABILITY GROUP [DistAG]
WITH (DISTRIBUTED)
AVAILABILITY GROUP ON
   'AG1' WITH
   (
   LISTENER_URL = 'tcp://AG1LISTENER:5022',    
   AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
   FAILOVER_MODE = MANUAL,   
   SEEDING_MODE = AUTOMATIC
   ),
   'AG2' WITH
   (
   LISTENER_URL = 'tcp://AG2LISTENER:5022',    
   AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,   
   FAILOVER_MODE = MANUAL,   
   SEEDING_MODE = AUTOMATIC
   );
GO

在這篇文章中突出顯示的巨大紫色註釋中非常清楚地解釋了這一點,我以前不知何故完全忽略了這一點: https ://docs.microsoft.com/en-us/sql/database-engine/availability-groups/windows/configure-distributed -availability-groups?view=sql-server-2017

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