共用方式為


設定彈性故障轉移原則來控制自動故障轉移的條件 (AlwaysOn 可用性群組)

本主題描述如何在 SQL Server 2014 中使用 Transact-SQL 或 PowerShell 來設定 AlwaysOn 可用性群組的彈性故障轉移原則。 彈性故障轉移原則提供對可用性群組自動故障轉移的條件進行細微控制。 藉由變更觸發自動故障轉移的故障條件以及健康檢查的頻率,您可以增加或減少自動故障轉移以支援高可用性服務層級協議的可能性。

> [!NOTE]  
>  The flexible failover policy of an availability group cannot be configured by using [!INCLUDE[ssManStudioFull](../../../includes/ssmanstudiofull-md.md)].  

開始之前

自動故障轉移的限制

  • 若要進行自動故障轉移,主要複本與一個次要複本必須設定為自動故障轉移的同步提交可用性模式,並且次要複本必須與主要複本同步。

  • 如果可用性群組超過其 WSFC 失敗閾值,WSFC 叢集將不會嘗試可用性群組的自動故障轉移。 此外,可用性群組的WSFC資源群組會維持失敗狀態,直到叢集管理員手動將失敗的資源群組上線,或資料庫管理員執行可用性群組的手動故障轉移為止。 WSFC 失敗閾值定義為指定時段內可用性群組所支持的失敗數目上限。 默認時間週期為六小時,而此期間最大失敗數目的預設值為 n-1,其中 n 是 WSFC 節點的數目。 若要變更指定可用性群組的失敗臨界值,請使用WSFC故障轉移管理員控制台。

先決條件

  • 您必須連接到裝載主複本的伺服器執行個體。

安全

權限

任務 權限
設定新可用性群組的彈性故障轉移原則 需要 系統管理員 (sysadmin) 固定伺服器角色的成員資格,以及 CREATE AVAILABILITY GROUP 伺服器權限、ALTER ANY AVAILABILITY GROUP 權限或 CONTROL SERVER 權限。
修改現有可用性群組的策略 需要有對可用性群組的 ALTER AVAILABILITY GROUP 權限、CONTROL AVAILABILITY GROUP 權限、ALTER ANY AVAILABILITY GROUP 權限,或是對 CONTROL SERVER 的權限。

使用 Transact-SQL

設定彈性故障移轉策略

  1. 連接到主要複本所在的伺服器實例。

  2. 針對新的可用性群組,請使用 CREATE AVAILABILITY GROUPTransact-SQL 語句。 如果您要修改現有的可用性群組,請使用 ALTER AVAILABILITY GROUPTransact-SQL 語句。

    • 若要設定故障轉移條件層級,請使用 FAILURE_CONDITION_LEVEL = n 選項,其中 n 是 1 到 5 的整數。

      例如,下列 Transact-SQL 語句會將現有可用性群組 AG1的失敗狀況層級變更為層級一:

      ALTER AVAILABILITY GROUP AG1 SET (FAILURE_CONDITION_LEVEL = 1);  
      

      這些整數值與失敗條件層級的關聯性如下所示:

      Transact-SQL 值 等級 自動是故障轉移起始時...
      1 伺服器故障 SQL Server 服務會因為故障轉移或重新啟動而停止。
      2 伺服器沒有回應。 符合任何較低值的條件、SQL Server 服務會連線到叢集,並超過健康情況檢查逾時閾值,或目前的主要復本處於失敗狀態。
      3 發生重大伺服器錯誤。 符合任何較低值的條件,或發生內部嚴重伺服器錯誤。

      這是預設層級。
      4 在中度伺服器錯誤。 任一較低值的條件被滿足或發生中度伺服器錯誤。
      5 在任何符合條件的故障狀況。 任何較低價值的條件被滿足,或滿足資格的失敗條件發生。

      如需故障轉移條件層級的詳細資訊,請參閱可用性群組之自動故障轉移的彈性故障轉移原則(SQL Server)。

    • 若要設定健康情況檢查逾時閾值,請使用 HEALTH_CHECK_TIMEOUT = n 選項,其中 n 是介於 15000 毫秒(15 秒)到4294967295毫秒的整數。 預設值為 30000 毫秒(30 秒)

      例如,下列 Transact-SQL 語句會將現有可用性群組 AG1的健康情況檢查逾時閾值變更為 60,000 毫秒(一分鐘)。

      ALTER AVAILABILITY GROUP AG1 SET (HEALTH_CHECK_TIMEOUT = 60000);  
      

使用 PowerShell

若要設定彈性故障轉移原則**

  1. 將預設 (cd) 設定為裝載主要複本的伺服器實例。

  2. 將可用性復本新增至可用性群組時,請使用 New-SqlAvailabilityGroup Cmdlet。 修改現有的可用性複本時,請使用 Set-SqlAvailabilityGroup Cmdlet。

    • 若要設定故障轉移條件層級,請使用 FailureConditionLevellevel 參數, 其中層級是 下列其中一個值:

      價值觀 等級 自動故障轉移是在以下情況下開始的...
      OnServerDown 當伺服器宕機時。 SQL Server 服務會因為故障轉移或重新啟動而停止。
      OnServerUnresponsive 伺服器無回應。 任何低於閾值的條件滿足;SQL Server 服務連線到叢集並超過健康檢查逾時閾值;或目前的主要副本處於失敗狀態。
      OnCriticalServerError 關於重大伺服器錯誤。 符合任何較低值的條件,或發生內部嚴重伺服器錯誤。

      這是預設層級。
      OnModerateServerError 出現中度伺服器錯誤。 符合任何較低值的條件,或發生中度伺服器錯誤。
      OnAnyQualifiedFailureConditions 在任何特定的失敗條件上。 符合任何較低值的條件,或發生合格的失敗狀況。

      如需故障轉移條件層級的詳細資訊,請參閱可用性群組之自動故障轉移的彈性故障轉移原則(SQL Server)。

      例如,下列命令會將現有可用性群組 AG1的失敗狀況層級變更為層級一。

      Set-SqlAvailabilityGroup `
       -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAg `
       -FailureConditionLevel OnServerDown  
      
    • 若要設定健康情況檢查逾時閾值,請使用 HealthCheckTimeoutn 參數,其中 n 是介於 15000 毫秒(15 秒)到4294967295毫秒的整數。 默認值為 30000 毫秒(30 秒)。

      例如,下列命令會將現有可用性群組 AG1的健康情況檢查逾時閾值變更為 120,000 毫秒(兩分鐘)。

      Set-SqlAvailabilityGroup `
       -Path SQLSERVER:\Sql\PrimaryServer\InstanceName\AvailabilityGroups\MyAG `
       -HealthCheckTimeout 120000  
      

備註

若要檢視 Cmdlet 的語法,請使用 Get-Help SQL Server PowerShell 環境中的 Cmdlet。 如需詳細資訊,請參閱 Get Help SQL Server PowerShell

若要設定和使用 SQL Server PowerShell 提供程式

另請參閱

AlwaysOn 可用性群組概觀 (SQL Server)
可用性模式 (AlwaysOn 可用性群組)
容錯轉移和故障轉移模式 (AlwaysOn 可用性群組)
Windows Server 容錯移轉叢集 (WSFC) 與 SQL Server
叢集實例的故障轉移原則
sp_server_diagnostics (Transact-SQL)