當您在多重子網環境中聯機到 Always On 接聽程式時,就會發生逾時
本文可協助您解決在多重子網環境中連接到 SQL Server Always On 可用性群組接聽程式時所發生的問題。
原始產品版本:SQL Server 2012 Developer、SQL Server 2012 Enterprise、SQL Server 2012 Express、SQL Server 2012 Standard、SQL Server 2012 Web、SQL Server 2012 Enterprise Core
原始 KB 編號: 2792139
徵狀
在 Microsoft SQL Server 2012 中為 Always On 可用性群組設定可用性群組接聽程式之後,您可能無法偵測接聽程式或從應用程式連線到該接聽程式。
例如,當您嘗試使用 SQLCMD
連接到 SQL Server 接聽程式時,聯機會逾時。此外,您會收到類似下列的錯誤訊息:
Sqlcmd:錯誤:Microsoft SQL Native Client:登入逾時已過期。
注意事項
這些徵兆通常是間歇性的,或與可用性群組資源的故障轉移相關。
下列螢幕快照顯示當您嘗試 Ping 接聽程式以取得 的可用性時所發生情況的 aglisten
範例。 當您包含多重子網故障轉移參數 -M
時,螢幕快照也會顯示使用 SQLCMD
命令成功連線到 SQL Server。
注意事項
您可以使用 SQLCMD
命令搭配 參數, -M
如螢幕快照中所示,連線到接聽程式。
原因
發生此問題的原因是您的應用程式使用不支援新 MultiSubnetFailover
參數的舊版數據提供者,或未設定為使用此參數。
在 .NET Framework 4 和更新版本的 .NET Framework 隨附的較新版本 SQLClient 驅動程式中支援此參數,並會重新移植到 .NET Framework 3.5。
注意事項
命令 PING
是不支援新參數的簡單連線測試工具。
解決方案
您可以使用下列其中一個適用於您案例的解決方案:
若要解決數據提供者支持 參數時的
MultiSubNetFailover
這種情況,請將 參數新MultiSubNetFailover
增至您的 連接字串,並將它設定為 true。若要解決舊版客戶端無法使用 屬性時的
MultiSubnetFailover
這種情況,您可以將接聽程式的RegisterAllProvidersIP
值變更為 0。 若要這樣做,請從 Windows PowerShell 命令行介面執行下列命令:Import-Module FailoverClusters Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
注意事項
將值設定為 RegisterAllProvidersIP
0 之後,必須從 DNS 伺服器取消註冊目前的在線 IP 位址,而且在發生故障轉移時,必須向 DNS 伺服器註冊離線 IP 位址。 這可能會導致下一次故障轉移的連線延遲。
其他相關資訊
當您嘗試連線到多個子網上定義的接聽程式時,如果客戶端驅動程序嘗試使用其中一個接聽程式的離線IP位址進行連線,作業可能會失敗。
建立接聽程式時,會為裝載可用性群組複本的每個唯一子網指定IP位址。 例如,如果針對具有兩個子網中複本的可用性群組建立接聽程式,則會在接聽程式中定義兩個IP位址。 一個位址是由可連線到子網 1 中 SQL Server 實例的應用程式所使用,另一個位址則會在應用程式連線到子網 2 中 SQL Server 的實例時使用。
在幕後,接聽程式會建立 Windows 叢集用戶端存取點資源。 它的其中一個屬性是 RegisterAllProvidersIP
。 建立接聽程式時,這會設定為 1,而且所有接聽程式的 IP 位址都會在 DNS 伺服器中註冊。 此設定可縮短用戶端的重新連線時間。
因為 DNS 記錄包含所有 IP 位址,所以嘗試連線到接聽程式的客戶端必須知道如何處理這種情況。 參數 MultiSubnetFailover
可讓客戶端驅動程序嘗試平行連線到所有接聽程式的IP位址。 如果沒有 參數 MultiSubnetFailover
,客戶端驅動程式會嘗試循序連線到接聽程式的所有IP位址。 循序連線可能會導致長時間登入或登入逾時。
注意事項
本文中提及的問題也會影響設定為使用 Always On 可用性群組次要只讀複本的 SharePoint 環境。 若要解決此問題,請執行下列適用於您 SharePoint 版本的任何動作:
針對 SharePoint 2007:這會分類為舊版應用程式。 因此,SharePoint 2007 無法設定為使用
MultiSubnetFailover
參數。 相反地,您必須使用解析一節中所述的 Windows PowerShell 命令。針對 SharePoint 2010:累積更新套件現已推出,可新增 參數
MultiSubnetFailover
的支援。 如需更新套件的詳細資訊,請參閱下列文章: