設定 Azure SQL 資料庫的容錯移轉群組

適用於:Azure SQL Database

本文章將教導您如何使用 Azure 入口網站、Azure PowerShell 和 Azure CLI,為 Azure SQL 資料庫中的單一和集區資料庫設定容錯移轉群組

如需端對端指令,請檢視如何使用 Azure PowerShellAzure CLI 將單一資料庫新增至容錯移轉群組。

必要條件

請考慮下列為單一資料庫建立容錯移轉群組的必要條件:

  • 次要伺服器的伺服器登入和防火牆設定必須符合主要伺服器的設定。

建立容錯移轉群組

使用 Azure 入口網站建立您的容錯移轉群組,並將您的單一資料庫新增至其中。

  1. Azure 入口網站的左側功能表中,選取 [Azure SQL]。 如果 Azure SQL 不在清單中,請選取 [所有服務],然後在搜尋方塊中鍵入 Azure SQL。 (選用) 選取 Azure SQL 旁的星號將其設為最愛,並新增為左側導覽中的項目。

  2. 選取您要新增至容錯移轉群組的資料庫。

  3. 在 [伺服器名稱] 底下選取伺服器的名稱,以開啟伺服器的設定。

    Open server for single db

  4. 選取 [設定] 窗格底下的 [容錯移轉群組],然後選取 [新增群組],以建立新的容錯移轉群組。

    Add new failover group

  5. 在 [容錯移轉群組] 頁面上,輸入或選取所需的值,然後選取 [建立]。 請建立新的次要伺服器,或選取現有的次要伺服器。 容錯移轉群組的次要伺服器必須與主要伺服器位於不同區域中。

    • 群組內的資料庫:選擇您要新增至容錯移轉群組的資料庫。 將資料庫新增到容錯移轉群組後,將會自動啟動異地複寫程序。

    Add SQL Database to failover group

測試規劃的容錯移轉

使用 Azure 入口網站或 PowerShell 在不失去資料的情況下測試容錯移轉群組的容錯移轉。

使用 Azure 入口網站測試容錯移轉群組的容錯移轉。

  1. Azure 入口網站的左側功能表中,選取 [Azure SQL]。 如果 Azure SQL 不在清單中,請選取 [所有服務],然後在搜尋方塊中輸入 "Azure SQL"。 (選用) 選取 Azure SQL 旁的星號將其設為最愛,並新增為左側導覽中的項目。

  2. 選取您要新增至容錯移轉群組的資料庫。

    Open server for single db

  3. 選取 [設定] 窗格下的 [容錯移轉群組],然後選擇您剛才建立的容錯移轉群組。

    Screenshot shows Failover groups where you can select a failover group for your SQL Server.

  4. 檢查哪個伺服器是主要的,哪個伺服器是次要的。

  5. 從工作窗格中選取 [容錯移轉],以容錯移轉包含資料庫的容錯移轉群組。

  6. 在通知您 TDS 工作階段將中斷的警告上,選取 [是]。

    Fail over your failover group containing your database

  7. 檢查哪個伺服器現在是主要的,哪個伺服器是次要的。 如果容錯移轉成功,這兩部伺服器應該已交換角色。

  8. 再次選取 [容錯移轉],讓伺服器容錯回復到其原始角色。

重要

如果您需要刪除次要資料庫,請先將其從容錯移轉群組中移除,再加以刪除。 將次要資料庫從容錯移轉群組中移除之前先將其刪除,可能會導致無法預期的行為。

如需端對端指令,請檢視如何使用 Azure PowerShellAzure CLI 新增彈性集區至容錯移轉群組。

必要條件

請考慮下列為集區資料庫建立容錯移轉群組的必要條件:

  • 次要伺服器的伺服器登入和防火牆設定必須符合主要伺服器的設定。

建立容錯移轉群組

使用 Azure 入口網站或 PowerShell 建立彈性集區的容錯移轉群組。

使用 Azure 入口網站建立您的容錯移轉群組,並將您的彈性集區新增至該群組。

  1. Azure 入口網站的左側功能表中,選取 [Azure SQL]。 如果 Azure SQL 不在清單中,請選取 [所有服務],然後在搜尋方塊中輸入 "Azure SQL"。 (選用) 選取 Azure SQL 旁的星號將其設為最愛,並新增為左側導覽中的項目。

  2. 選取您要新增至容錯移轉群組的彈性集區。

  3. 在 [概觀] 窗格中選取 [伺服器名稱] 下的伺服器名稱,以開啟伺服器的設定。

    Open server for elastic pool

  4. 選取 [設定] 窗格底下的 [容錯移轉群組],然後選取 [新增群組],以建立新的容錯移轉群組。

    Add new failover group

  5. 在 [容錯移轉群組] 頁面上,輸入或選取所需的值,然後選取 [建立]。 請建立新的次要伺服器,或選取現有的次要伺服器。

  6. 選取 [群組中的資料庫],然後選擇您要新增至容錯移轉群組的彈性集區。 如果次要伺服器上還沒有彈性集區,則會出現警告,提示您在次要伺服器上建立彈性集區。 選取警告,然後選取 [確定],以在次要伺服器上建立彈性集區。

    Add elastic pool to failover group

  7. 使用 [選取],將您的彈性集區設定套用至容錯移轉群組,然後選取 [建立] 以建立容錯移轉群組。 將彈性集區新增至容錯移轉群組,將會自動啟動異地複寫程序。

測試規劃的容錯移轉

使用 Azure 入口網站或 PowerShell 在不遺失資料的情況下測試彈性集區的容錯移轉。

將容錯移轉群組容錯移轉至次要伺服器,然後使用 Azure 入口網站進行容錯回復。

  1. Azure 入口網站的左側功能表中,選取 [Azure SQL]。 如果 Azure SQL 不在清單中,請選取 [所有服務],然後在搜尋方塊中輸入 "Azure SQL"。 (選用) 選取 Azure SQL 旁的星號將其設為最愛,並新增為左側導覽中的項目。

  2. 選取您要容錯移轉群組的彈性集區。

  3. 在 [概觀] 窗格中選取 [伺服器名稱] 下的伺服器名稱,以開啟伺服器的設定。

    Screenshot of select server for elastic pool in the Azure portal.

  4. 選取 [設定] 下的 [容錯移轉群組],然後選擇您剛才建立的容錯移轉群組。

    Screenshot shows Failover groups where you can select a failover group for your SQL Server.

  5. 檢查哪個伺服器是主要的,哪個伺服器是次要的。

  6. 從工作窗格中選取 [容錯移轉],以容錯移轉包含彈性集區的容錯移轉群組。

  7. 在通知您 TDS 工作階段將中斷的警告上,選取 [是]。

    Fail over your failover group containing your database

  8. 檢查哪個伺服器是主要的,哪個伺服器是次要的。 如果容錯移轉成功,這兩部伺服器應該已交換角色。

  9. 再次選取 [容錯移轉],將容錯移轉群組容錯回復至原始設定。

重要

如果您需要刪除次要資料庫,請先將其從容錯移轉群組中移除,再加以刪除。 將次要資料庫從容錯移轉群組中移除之前先將其刪除,可能會導致無法預期的行為。

使用私人連結可讓您將邏輯伺服器與虛擬網路和子網路內的特定私人 IP 位址建立關聯。

若要使用私人連結搭配您的容錯移轉群組,請執行下列動作:

  1. 確保您的主要和次要伺服器都在配對的區域中。
  2. 在每個區域中建立虛擬網路和子網路,以裝載主要和次要伺服器的私人端點,使其具有不重疊的 IP 位址空間。 例如:10.0.0.0/16 的主要虛擬網路位址範圍與 10.0.0.1/16 的次要虛擬網路位址範圍重疊。 如需虛擬網路位址範圍的詳細資訊,請參閱設計 Azure 虛擬網路 (英文) 部落格。
  3. 建立主要伺服器的私人端點和 Azure 私人 DNS 區域
  4. 也請為次要伺服器建立私人端點,但這次選擇重複使用為主要伺服器所建立的同一個私人 DNS 區域。
  5. 建立私人連結之後,您可以遵循本文先前所述的步驟建立容錯移轉群組。

尋找接聽程式端點

設定容錯移轉群組之後,請將應用程式的連接字串更新為接聽程式端點。 這會讓您的應用程式連接到容錯移轉群組接聽程式,而不是主資料庫或彈性集區。 如此一來,您就不需要在每次資料庫實體容錯移轉時手動更新連接字串,流量會路由傳送到目前為主要的任何實體。

接聽程式端點的形式為 fog-name.database.windows.net,而且,在檢視容錯移轉群組時,接聽程式端點會顯示在 Azure 入口網站中:

Failover group connection string

調整容錯移轉群組中的資料庫

您可以將主要資料庫擴大或縮小至不同的計算大小 (在相同的服務層級內),而不需要中斷任何異地次要資料庫的連線。 擴大時,建議先擴大異地次要資料庫,再擴大主要資料庫。 縮小時,則反轉順序:先縮小主要資料庫,再縮小次要資料庫。 當您將資料庫擴展到不同的服務層級時,會強制執行這項建議。

建議您特別注意此順序,以避免較低 SKU 的異地複寫次要資料庫發生超載,而必須在升級或降級程序期間重新植入的問題。 您也可以將主要資料庫狀態設為唯讀,以此方式影響對主要資料庫的所有讀寫工作負載,來避免此問題。

注意

如果您在容錯移轉群組設定中建立了異地次要資料庫,不建議您縮小異地次要資料庫。 這是為了確保資料層在異地容錯移轉啟動之後,有足夠的容量來處理一般工作負載。 若先前的異地主要資料庫因中斷情況而無法使用,則未規劃容錯移轉後可能無法縮放異地次要資料庫。 這是已知限制。

防止重要資料遺失

由於廣域網路有高度延遲情況,因此異地複寫會採用非同步複寫機制。 如果主要資料庫故障,則非同步複寫無可避免會遺失一些資料。 若要保護重要交易資料不要遺失,應用程式開發人員可以在認可交易後立即呼叫 sp_wait_for_database_copy_sync 預存程序。 呼叫 sp_wait_for_database_copy_sync 會封鎖呼叫執行緒,直到最後認可的交易已傳輸和強行寫入次要資料庫交易記錄為止。 不過,此動作不會等候已傳輸的交易在次要資料庫上重新執行 (重做)。 sp_wait_for_database_copy_sync 的範圍限定為特定異地複寫連結。 任何具備主要資料庫連接權限的使用者都可以呼叫此程序。

注意

sp_wait_for_database_copy_sync 可防止特定交易在異地容錯移轉之後資料遺失,但是不保證讀取權限的完整同步處理。 sp_wait_for_database_copy_sync 程序呼叫所造成的延遲可能會相當明顯,且取決於呼叫時主要資料庫上尚未傳輸的交易記錄大小。

變更次要區域

為了說明變更順序,我們會假設伺服器 A 是主要伺服器、伺服器 B 是現有的次要伺服器,而伺服器 C 是第三個區域中的新次要資料庫。 若要進行轉換,請遵循下列步驟:

  1. 使用作用中異地複寫,為伺服器 A 上的每個資料庫建立額外的次要複本至伺服器 C。 伺服器 A 上的每個資料庫都有兩個次要複本,一個在伺服器 B 上,另一個在伺服器 C 上。這保證在轉換期間主要資料庫維持受保護。
  2. 刪除容錯移轉群組。 此時,使用容錯移轉群組端點的登入嘗試會開始失敗。
  3. 在伺服器 A 與 C 之間,使用相同名稱重新建立容錯移轉群組。
  4. 將伺服器 A 上的所有主要資料庫新增至新的容錯移轉群組。 此時,登入嘗試將停止失敗。
  5. 刪除伺服器 B。將自動刪除 B 上的所有資料庫。

變更主要區域

為了說明變更順序,我們會假設伺服器 A 是主要伺服器、伺服器 B 是現有的次要伺服器,而伺服器 C 是第三個區域中的新主要資料庫。 若要進行轉換,請遵循下列步驟:

  1. 執行計劃性異地複寫容錯移轉,將主要伺服器切換至 B。伺服器 A 會成為新的次要伺服器。 容錯移轉可能會導致幾分鐘的停機時間。 實際時間取決於容錯移轉群組的大小。
  2. 使用作用中異地複寫,為伺服器 B 上的每個資料庫建立額外的次要資料庫至伺服器 C。 伺服器 B 上的每個資料庫都有兩個次要複本,一個在伺服器 A 上,另一個在伺服器 C 上。這可保證在轉換期間主要資料庫維持受保護。
  3. 刪除容錯移轉群組。 此時,使用容錯移轉群組端點的登入嘗試會開始失敗。
  4. 在伺服器 B 與 C 之間,使用相同名稱重新建立容錯移轉群組。
  5. 將 B 上的所有主要資料庫新增至新的容錯移轉群組。 此時,登入嘗試不再失敗。
  6. 執行容錯移轉群組的計劃性異地複寫容錯移轉,以切換 B 和 C。現在,伺服器 C 成為主要資料庫,B 是次要資料庫。 伺服器 A 上的所有次要資料庫都會自動連結到 C 上的主要資料庫。在步驟 1 中,容錯移轉可能會導致幾分鐘的停機時間。
  7. 刪除伺服器 A。將自動刪除 A 上的所有資料庫。

重要

刪除容錯移轉群組時,也會刪除接聽程式端點的 DNS 記錄。 屆時,其他人便有可能使用相同名稱建立容錯移轉群組或伺服器 DNS 別名。 因為容錯移轉群組名稱和 DNS 別名必須是全域唯一,這會防止您再次使用相同的名稱。 若要將此風險降至最低,請不要使用一般容錯移轉群組名稱。

容錯移轉群組和網路安全性

針對某些應用程式,需要資料層網路存取的安全性規則會限制為特定元件或元件 (例如 VM、Web 服務等)。此需求代表的是對商務持續性設計和容錯移轉群組的使用帶來一些挑戰。 實作這類限制的存取權時,請考慮下列選項。

使用容錯移轉群組和虛擬網路服務端點

如果您使用虛擬網路服務端點和規則來限制存取您的資料庫,請留意每個虛擬網路服務端點只適用於一個 Azure 區域。 端點無法讓其他區域接受來自子網路的通訊。 因此,只有部署到相同區域中的用戶端應用程式可以連線到主要資料庫。 因為異地複寫容錯移轉會導致 SQL Database 用戶端工作階段重新路由至不同 (次要) 區域中的伺服器,所以如果這些工作階段是來自該區域外的用戶端,可能就會失敗。 基於這個理由,如果參與的伺服器或執行個體包含在虛擬網路規則中,則無法啟用 Microsoft 管理的容錯移轉原則。 若要支援手動容錯移轉原則,請遵循下列步驟:

  1. 在次要區域中佈建您應用程式 (Web 服務、虛擬機器等) 前端元件的備援複本。
  2. 分別設定主要和次要伺服器的虛擬網路規則
  3. 啟用使用流量管理員設定的前端容錯移轉
  4. 偵測到中斷情況時,起始手動異地複寫容錯移轉。 這個選項最適合用於在前端和資料層之間需要一致延遲的應用程式,且支援當前端、資料層或兩者受到中斷影響時進行復原。

注意

如果您使用唯讀接聽程式對唯讀工作負載進行負載平衡,請確保此工作負載會在 VM 或是次要地區的其他資源中執行,使其得以連線到次要資料庫。

使用容錯移轉群組和防火牆規則

如果您的商務持續性計劃需要使用具有容錯移轉的容錯移轉群組,可以使用公用 IP 防火牆規則,來限制對您 SQL Database 中的存取。 此設定可確保異地複寫容錯移轉不會封鎖來自前端元件的連線,並假設應用程式可以容忍前端與資料層之間較長的延遲。

若要支援容錯移轉群組容錯移轉,請遵循下列步驟:

  1. 建立公用 IP
  2. 建立公用負載平衡器並為其指派公用 IP。
  3. 建立虛擬網路和虛擬機器以用於前端元件。
  4. 建立網路安全性群組並設定輸入連線。
  5. 使用 Sql.<Region>服務標籤,確保輸出連線對區域中的 Azure SQL Database 開啟。
  6. 建立 SQL Database 防火牆規則以允許您在步驟 1 中所建立公用 IP 位址的輸入流量。

如需如何設定輸出存取,以及在防火牆規則中使用哪些 IP 的相關詳細資訊,請參閱負載平衡器輸出連線

重要

若要保證區域性中斷期間的商務持續性,您必須確定前端元件與資料庫的異地備援。

權限

容錯移轉群組的權限是透過 Azure 角色型存取控制 (Azure RBAC) 來管理

必須有 Azure RBAC 寫入存取權限,才能建立和管理容錯移轉群組。 SQL Server 參與者角色具有管理容錯移轉群組所需的所有必要權限。

下表列出 Azure SQL Database 的特定權限範圍:

動作 權限 範圍
建立容錯移轉群組 Azure RBAC 寫入存取 主要伺服器
次要伺服器
容錯移轉群組中的所有資料庫
更新容錯移轉群組 Azure RBAC 寫入存取 容錯移轉群組
目前主伺服器上的所有資料庫
對容錯移轉群組進行容錯移轉 Azure RBAC 寫入存取 新伺服器上的容錯移轉群組

限制

請留意以下限制:

  • 無法在相同 Azure 區域中的兩個伺服器之間建立容錯移轉群組。
  • 容錯移轉群組支援將群組中的所有資料庫都只異地複寫到不同區域的一部次要邏輯伺服器中。
  • 無法重新命名容錯移轉群組。 您將需要刪除群組,並使用不同的名稱重新建立。
  • 容錯移轉群組中的資料庫不支援資料庫重新命名。 您將需要暫時刪除容錯移轉群組,才能重新命名資料庫,或從容錯移轉群組中移除資料庫。
  • 移除單一或集區資料庫的容錯移轉群組並不會停止複寫,而且不會刪除複寫的資料庫。 如果您曾想要在單一或集區資料庫移除之後,將其加回容錯移轉群組,則必須手動停止異地複寫,並從次要伺服器中刪除資料庫。 如果未執行此步驟,在嘗試將資料庫新增至容錯移轉群組時,可能會產生類似 The operation cannot be performed due to multiple errors 的錯誤。
  • 容錯移轉群組名稱必須遵守命名限制

以程式設計方式管理容錯移轉群組

您也可以使用 Azure PowerShell、Azure CLI 和 REST API,以程式設計方式管理容錯移轉群組。 下表描述可用的命令集。 容錯移轉群組包含一組可管理的 Azure Resource Manager API,包括 Azure SQL 資料庫 REST APIAzure PowerShell Cmdlet。 這些 API 需要使用資源群組,並支援 Azure 角色型存取控制 (Azure RBAC)。 如需如何實作存取角色的詳細資訊,請參閱 Azure 角色型存取控制 (Azure RBAC)

Cmdlet 描述
New-AzSqlDatabaseFailoverGroup 此命令會建立容錯移轉群組,並同時在主要和次要伺服器上註冊
Remove-AzSqlDatabaseFailoverGroup 從伺服器移除容錯移轉群組
Get-AzSqlDatabaseFailoverGroup 擷取容錯移轉群組的設定
Set-AzSqlDatabaseFailoverGroup 修改容錯移轉群組的設定
Switch-AzSqlDatabaseFailoverGroup 觸發容錯移轉群組容錯移轉至次要伺服器
Add-AzSqlDatabaseToFailoverGroup 將一或多個資料庫新增至容錯移轉群組

注意

Az.SQL 3.11.0 開始,您可以使用 Azure Powershell 中的 -PartnerSubscriptionId 參數,跨訂用帳戶部署容錯移轉群組。 若要深入了解,請檢閱下列範例

下一步

如需 Azure SQL 資料庫高可用性選項的概觀,請參閱異地複寫容錯移轉群組