本文可協助您解決在多子網環境中聯機到 SQL Server Always On 可用性群組接聽程式時所發生的問題。
原始產品版本: SQL Server 2012 和更新版本
原始 KB 編號: 2792139
徵兆
在 Microsoft SQL Server 中為 Always On 可用性組設定可用性組偵聽器後,您可能無法 ping 偵聽器或從應用程式連接到它。
例如,當您嘗試使用 SQLCMD連接到 SQL Server 的偵聽器時,連接超時。此外,您會收到一條類似於以下內容的錯誤消息:
Sqlcmd:錯誤:Microsoft SQL Native Client:登入逾時已過期。
注意
這些癥狀是間歇性的,或者與可用性組資源的故障轉移有關。
下列螢幕快照顯示當您嘗試 Ping 接聽程式以取得 可用性 aglisten時所發生的狀況範例。 當您包含多重子網故障轉移參數 SQLCMD時,-M此螢幕快照也會顯示使用 命令成功連線到 SQL Server。
注意
您可以將 命令與 參數搭配SQLCMD使用-M,如螢幕快照所示,以連線到接聽程式。
原因
出現此問題的原因是您的應用程式使用不支援新 MultiSubnetFailover 參數的舊數據提供程式,或者未配置為使用此參數。
此參數在 .NET Framework 4 及更高版本的 .NET Framework 附帶的較新版本的 SQLClient 驅動程式中受支援,並已向後移植到 .NET Framework 3.5。
注意
該 PING 命令是一個簡單的連接測試工具,不支援new參數。
解決方法
您可以使用下列其中一個解決方案,適用於您的案例:
若要解決數據提供者支持
MultiSubNetFailover參數的情況,請將 參數新增MultiSubNetFailover至您的 連接字串,並將其設定為 true。要在舊客戶端無法使用該
MultiSubnetFailover屬性時解決這種情況,您可以通過從 Windows PowerShell 命令列介面運行以下命令將偵聽器的值RegisterAllProvidersIP更改為 0 :Import-Module FailoverClusters Get-ClusterResource <*Your listener name*>|Set-ClusterParameter RegisterAllProvidersIP 0
注意
將該值設置為 RegisterAllProvidersIP0 后,必須從 DNS 伺服器取消註冊當前在線 IP 位址,並在發生故障轉移時將離線 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。 如需更新套件的詳細資訊,請參閱下列文章: