共用方式為


當您連線至多子重網路環境中的 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。

當您偵測接聽程式以取得 aglisten 可用性時,命令提示字元視窗的螢幕快照。

注意

您可以將 命令與 參數搭配-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
    

    此螢幕快照顯示 Windows PowerShell 中命令範例的輸出。

注意

將值設定 RegisterAllProvidersIP0 之後,目前的在線 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 版本:

參考資料