Date: 24 10 月, 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與我聯繫