當您在多重子網環境中聯機到 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
    

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

注意事項

將值設定為 RegisterAllProvidersIP0 之後,必須從 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 版本的任何動作:

參考資料