當您連線至多子重網路環境中的 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。
注意
您可以將 命令與 參數搭配-M
使用SQLCMD
,如螢幕快照所示,以連線到接聽程式。
原因
發生此問題的原因是您的應用程式使用不支援新 MultiSubnetFailover
參數的舊版數據提供者,或未設定為使用此參數。
較新版本的 SQLClient 驅動程式支援此參數,這些驅動程式隨附於 .NET Framework 4 和更新版本的 .NET Framework,並且會重新移植到 .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 之後,目前的在線 IP 位址必須從 DNS 伺服器取消註冊,而且在發生故障轉移時,必須將離線 IP 位址註冊到 DNS 伺服器。 這可能會導致下一次故障轉移的連線延遲。
其他相關資訊
當您嘗試連線到在多個子網上定義的接聽程式時,如果用戶端驅動程序嘗試使用其中一個接聽程式的離線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
。 如需更新套件的詳細資訊,請參閱下列文章: