設定 Azure SQL 受控執行個體的容錯移轉群組

適用於:Azure SQL 受控執行個體

本文會說明如何使用 Azure 入口網站和 Azure PowerShell 設定 Azure SQL 受控執行個體的容錯移轉群組

如需端對端 PowerShell 指令碼,在容錯移轉群組內建立這兩個執行個體,請檢閱將執行個體新增至容錯移轉群組

必要條件

請考慮下列必要條件︰

  • 次要受控執行個體必須是空的,也就是不包含任何使用者資料庫。
  • 兩個 SQL 受控執行個體執行個體必須位於相同的服務層級,而且具有相同的儲存體大小。 雖非必要,但強烈建議兩個執行個體應具有相同的計算大小,以確保次要執行個體可持續處理從主要執行個體複寫的變更,包括尖峰活動的期間。
  • 主要執行個體之虛擬網路的 IP 位址範圍不得與次要受控執行個體虛擬網路的位址範圍重疊,或與主要或次要虛擬網路對等互連的任何其他虛擬網路重疊。
  • 當您建立次要受控執行個體時,必須將主要執行個體的 DNS 區域識別碼指定為 DnsZonePartner 參數的值。 若未指定 DnsZonePartner 的值,在每個虛擬網路中建立第一個執行個體時,系統會產生隨機字串形式的區域識別碼,並將一樣的識別碼指派給相同子網路中的所有其他執行個體。 一經指派,就無法再修改 DNS 區域。
  • 裝載執行個體的子網路上的網路安全性群組 (NSG) 規則,必須開放連接埠 5022 (TCP) 以及連接埠範圍 11000-11999 (TCP) 供輸入和輸出之用,以便與裝載其他受控執行個體的子網路相互連線。 這對於裝載主要和次要執行個體的子網路均適用。
  • 次要受控執行個體的定序和時區必須與主要受控執行個體相符。
  • 基於效能考慮,受控執行個體應該部署在配對區域中。 與未配對區域相比,位於異地配對區域的受控執行個體可受益於明顯更高的異地複寫速度。

位址空間範圍

若要檢查主要執行個體的位址空間,請前往主要執行個體的虛擬網路資源,然後選取 [設定] 下的 [位址空間]。 檢查 [位址範圍] 下的範圍:

Screenshot of the address space for the primary virtual network in the Azure portal.

指定主要執行個體的區域識別碼

當您建立次要執行個體時,必須將主要執行個體的區域識別碼指定為 DnsZonePartner

如果您要在 [Azure 入口網站] 中建立次要執行個體,請在 [異地複寫] 下的 [其他設定] 索引標籤上,選擇 [是] 以 [作為次要容錯移轉群組],然後從下拉式清單中選取主要執行個體:

Screenshot of the Azure portal specifying the primary managed instance as a failover secondary on the additional settings page.

啟用執行個體之間的連線

必須在裝載主要和次要執行個體的虛擬網路子網路之間建立連線,才能讓異地複寫流量不會中斷。 有多種方式可以在不同 Azure 區域中受控執行個體之間建立連線,包括:

建議使用全域虛擬網路對等互連,作為在容錯移轉群組中執行個體間建立連線最高效能且健全的方式。 全域虛擬網路對等互連會使用 Microsoft 骨幹基礎結構,在對等互連的虛擬網路之間提供低延遲、高頻寬的私人連線。 對等互連的虛擬網路之間所進行的通訊不需要公用網際網路、閘道或其他加密措施。

重要

連接涉及其他網路裝置的執行個體的替代方式,可能會使對連線或複寫速度問題進行疑難排解變得更加複雜,可能需要網路系統管理員主動介入,並大幅延長解決時間。

無論連線機制為何,都必須符合特定需求,異地複寫流量才能流動:

  • 指派至受控執行個體子網路的路由表和網路安全性群組不會在兩個對等虛擬網路之間共用。
  • 託管主要執行個體的子網路上的網路安全性群組 (NSG) 規則允許:
    • 連接埠 5022 和連接埠範圍 11000-11999 上來自次要執行個體裝載所在子網路的輸入流量。
    • 連接埠 5022 和連接埠範圍 11000-11999 上送往次要執行個體裝載所在子網路的輸出流量。
  • 裝載次要執行個體的子網路上的網路安全性群組 (NSG) 規則允許:
    • 連接埠 5022 和連接埠範圍 11000-11999 上來自主要執行個體裝載所在子網路的輸入流量。
    • 連接埠 5022 和連接埠範圍 11000-11999 上送往主要執行個體裝載所在子網路的輸出流量。
  • 裝載主要和次要執行個體之 VNet 的 IP 位址範圍不可重疊。
  • 託管主要和次要執行個體的 VNet,與其經由區域虛擬網路對等互連或其他方式進行對等互連的其他 VNet 之間,不會有間接重疊的 IP 位址範圍。

此外,如果您使用其他機制來提供執行個體之間的連線能力,而不使用建議的全域虛擬網路對等互連,您必須確定下列事項:

  • 使用的任何網路裝置,例如防火牆或網路虛擬設備 (NVA),都不會封鎖前述連接埠上的流量。
  • 路由已正確設定,並且避免非對稱式路由。
  • 如果您在跨區域的中樞和輪輻網路拓撲中部署容錯移轉群組,則複寫流量應該直接在兩個受控執行個體子網路之間進行,而不是透過中樞網路導向。 這有助於避免發生連線和複寫速度問題。
  1. Azure 入口網站中,移至主要受控執行個體的虛擬網路資源。
  2. 選取 [設定] 下的 [對等互連],然後選取 [+ 新增]。

Screenshot of peerings page for virtual network A in the Azure portal.

  1. 輸入或選取下列設定的值:

    設定 描述
    此虛擬網路
    對等互連連結名稱 對等互連的名稱必須是虛擬網路中的唯一名稱。
    連到遠端虛擬網路的流量 如果要透過預設 VirtualNetwork 流程啟用兩個虛擬網路之間的通訊,請選取 [允許 (預設)]。 讓虛擬網路能夠彼此通訊,會讓連線到任一虛擬網路的資源能夠以相同的頻寬和延遲彼此通訊,彷彿這些資源是連線到相同的虛擬網路。 兩個虛擬網路中的資源之間所進行的所有通訊都是透過 Azure 私人網路來完成。
    從遠端虛擬網路轉送的流量 [允許] (預設) 和 [封鎖] 選項都適用於本教學課程。 如需詳細資訊,請參閱建立對等互連
    虛擬網路閘道或路由伺服器 選取 [無]。 如需其他可用選項的詳細資訊,請參閱建立對等互連
    遠端虛擬網路
    對等互連連結名稱 在裝載次要執行個體的虛擬網路中使用的相同對等互連名稱。
    虛擬網路部署模型 選擇資源管理員
    我知道我的資源識別碼 將此核取方塊保持不核取狀態。
    訂用帳戶 選取裝載您要對等互連之次要執行個體虛擬網路的 Azure 訂用帳戶。
    虛擬網路 選取裝載您要對等互連之次要執行個體的虛擬網路。 如果虛擬網路雖有列出卻呈現灰色,原因可能是該虛擬網路的位址空間與此虛擬網路的位址空間重疊。 如果虛擬網路的位址空間重疊,您就無法讓這些位址空間對等互連。
    連到遠端虛擬網路的流量 選取 [允許 (預設)]
    從遠端虛擬網路轉送的流量 [允許] (預設) 和 [封鎖] 選項都適用於本教學課程。 如需詳細資訊,請參閱建立對等互連
    虛擬網路閘道或路由伺服器 選取 [無]。 如需其他可用選項的詳細資訊,請參閱建立對等互連
  2. 選取 [新增] 以對您選取的虛擬網路設定對等互連。 幾秒鐘後,請選取 [重新整理] 按鈕,對等互連狀態將會從 [更新中] 變更為 [已連線]。

    Screenshot of the Virtual network peering status on peerings page in Azure portal.

建立容錯移轉群組

使用 Azure 入口網站或 PowerShell 建立受控執行個體的容錯移轉群組。

使用 Azure 入口網站建立 SQL 受控執行個體的容錯移轉群組。

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

  2. 選取您要新增至容錯移轉群組的主要受控執行個體。

  3. 在 [設定] 下瀏覽至 [執行個體容錯移轉群組],然後選擇 [新增群組] 以開啟執行個體容錯移轉群組建立頁面。

    Screenshot of adding a failover group page in Azure portal.

  4. 在 [執行個體容錯移轉群組] 頁面上,輸入容錯移轉群組的名稱,然後從下拉式清單中選擇次要受控執行個體。 選取 [建立] 來建立您的容錯移轉群組。

    Screenshot to create failover group in Azure portal.

  5. 完成容錯移轉群組的部署之後,您會回到 [容錯移轉群組] 頁面。

測試容錯移轉

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

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

  1. Azure 入口網站中,瀏覽至「次要」受控執行個體,然後選取 [設定] 底下的 [執行個體容錯移轉群組]。

  2. 請注意主要和次要角色中的受控執行個體。

  3. 選取 [容錯移轉],然後在 TDS 工作階段將中斷連線的警告上,選取 [是]。

    Screenshot to fail over the failover group in Azure portal.

  4. 請注意主要和次要角色中的受控執行個體。 如果容錯移轉成功,這兩個執行個體應該已交換角色。

    Screenshot of the failover group status of switched instance roles after failover.

重要

如果角色未切換,請檢查執行個體與相關 NSG 與防火牆規則之間的連線能力。 只有在角色切換之後,才繼續進行下一個步驟。

  1. 移至新的「次要」受控執行個體,然後再次選取 [容錯移轉],將主要執行個體容錯回復至主要角色。

尋找接聽程式端點

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

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

Screenshot where to find the failover group connection string in the Azure portal.

在不同訂閱的執行個體之間建立群組

只要訂用帳戶與相同的 Microsoft Entra 租用戶相關聯,您就可以在兩個不同的訂用帳戶中,建立 SQL 受控執行個體之間的容錯移轉群組。

  • 使用 PowerShell API 時,您可以藉由為次要 SQL 受控執行個體指定 PartnerSubscriptionId 參數來進行。
  • 使用 REST API 時,properties.managedInstancePairs 參數中包含的每個執行個體識別碼都可以有其自己的訂用帳戶識別碼。
  • Azure 入口網站不支援在不同的訂用帳戶之間建立容錯移轉群組。

重要

Azure 入口網站不支援在不同的訂用帳戶之間建立容錯移轉群組。 若容錯移轉群組是跨不同訂用帳戶和/或資源群組所使用,則無法透過 Azure 入口網站,從主要 SQL 受控執行個體手動起始容錯移轉。 請改為從異地次要執行個體起始。

防止重要資料遺失

由於廣域網路有高度延遲情況,因此異地複寫會採用非同步複寫機制。 如果主要資料庫故障,則非同步複寫無可避免會遺失一些資料。 若要保護重要交易資料不要遺失,應用程式開發人員可以在認可交易後立即呼叫 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. 在相同的 DNS 區域中,建立與 A 相同大小的執行個體 C。
  2. 刪除執行個體 A 與 B 之間的容錯移轉群組。此時,嘗試登入開始失敗,因為容錯移轉群組接聽程式的 SQL 別名已遭到刪除,而閘道將無法辨識該容錯移轉群組名稱。 次要資料庫會與主要資料庫中斷連線,而且會成為讀寫資料庫。
  3. 在執行個體 A 與 C 之間使用相同名稱建立容錯移轉群組。請遵循設定容錯移轉群組指南中的指示。 這是資料大小的作業,並會在來自執行個體 A 的所有資料庫都已植入和同步時完成。
  4. 如果不需要執行個體 B,請加以刪除,以避免不必要的費用。

注意

在步驟 2 之後,在步驟 3 完成之前,執行個體 A 中的資料庫將保持未受保護,無法不受執行個體 A 的嚴重失敗影響。

變更主要區域

假設執行個體 A 是主要執行個體,執行個體 B 是現有的次要執行個體,而執行個體 C 是第三個區域中的新主要執行個體。 若要進行轉換,請遵循下列步驟:

  1. 在相同的 DNS 區域中,建立與 B 相同大小的執行個體 C。
  2. 連線至執行個體 B,並手動進行容錯移轉,將主要執行個體切換為 B。執行個體 A 會自動成為新的次要執行個體。
  3. 刪除執行個體 A 與 B 之間的容錯移轉群組。此時,使用容錯移轉群組端點的登入嘗試會開始失敗。 A 上的次要資料庫與主要資料庫中斷連線,而且會成為讀寫資料庫。
  4. 在執行個體 B 與 C 之間使用相同名稱建立容錯移轉群組。請遵循容錯移轉群組指南中的指示。 這是資料大小的作業,並會在來自執行個體 A 的所有資料庫都已植入和同步時完成。 此時,登入嘗試不會再失敗。
  5. 手動容錯移轉以將 C 執行個體切換為主要角色。 執行個體 B 會自動成為新的次要執行個體。
  6. 如果不需要執行個體 A,請加以刪除,以避免不必要的費用。

警告

在步驟 3 之後,在步驟 4 完成之前,執行個體 A 中的資料庫將保持未受保護,無法不受執行個體 A 的嚴重失敗影響。

重要

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

啟用相依於系統資料庫中物件的案例

系統資料庫不會複寫到容錯移轉群組中的次要執行個體。 若要啟用相依於系統資料庫中物件的案例,請務必在次要執行個體上建立相同的物件,並將其與主要執行個體保持同步。

例如,如果您計劃在次要執行個體上使用相同的登入,請務必使用相同的 SID 來建立。

-- Code to create login on the secondary instance
CREATE LOGIN foo WITH PASSWORD = '<enterStrongPasswordHere>', SID = <login_sid>;

若要深入瞭解,請參閱登入和代理程式作業的複寫。

同步執行個體之間的執行個體屬性和保留原則

容錯移轉群組中的執行個體會保留不同的 Azure 資源,而對主要執行個體的設定所做的任何變更將會自動複寫至次要執行個體。 請務必在主要次要執行個體上執行所有相關的變更。 例如,如果您在主要執行個體上變更備份儲存體備援或長期備份保留原則,也請務必在次要執行個體上變更。

調整執行個體

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

建議您特別注意該順序,以避免較低 SKU 的異地複寫次要資料庫發生超載,而必須在升級或降級程序期間重新植入的問題。

權限

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

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

下表列出 Azure SQL 受控執行個體的特定權限範圍:

動作 權限 範圍
建立容錯移轉群組 Azure RBAC 寫入存取 主要受控執行個體
次要受控執行
更新容錯移轉群組 Azure RBAC 寫入存取 容錯移轉群組
受控執行個體內的所有資料庫
對容錯移轉群組進行容錯移轉 Azure RBAC 寫入存取 新主要受控執行個體上的容錯移轉群組

限制

請留意以下限制:

  • 無法在相同 Azure 區域中的兩個執行個體之間建立容錯移轉群組。
  • 無法重新命名容錯移轉群組。 您將需要刪除群組,並使用不同的名稱重新建立。
  • 容錯移轉群組只包含兩個受控執行個體。 不支援將其他執行個體新增至容錯移轉群組。
  • 無論何時執行個體只能參與一個容錯移轉群組。
  • 無法在屬於不同 Azure 租用戶的兩個執行個體之間建立容錯移轉群組。
  • 您無法使用 Azure 入口網站 或 Azure CLI 在屬於不同 Azure 訂用帳戶的兩個執行個體之間建立容錯移轉群組。 請改用 Azure PowerShell 或 REST API 來建立這類容錯移轉群組。 一但建立完成,跨訂用帳戶容錯移轉群組會經常在 Azure 入口網站中顯示,且包括容錯移轉在內的所有後續作業都可以從 Azure 入口網站或 Azure CLI 初始化。
  • 容錯移轉群組中的資料庫不支援資料庫重新命名。 您將需要暫時刪除容錯移轉群組,才能重新命名資料庫。
  • 系統資料庫不會複寫至容錯移轉群組中的次要執行個體。 因此,相依於系統資料庫 (例如伺服器登入和代理程式作業) 中物件的案例需要在次要執行個體上手動建立物件,並在主要執行個體上進行任何變更之後,手動保持同步。 唯一的例外是 SQL 受控執行個體的服務主要金鑰 (SMK),其會在建立容錯移轉群組期間自動複寫至次要執行個體。 不過,主要執行個體上的任何後續 SMK 變更都不會複寫至次要執行個體。 若要深入了解,請參閱如何啟用相依於系統資料庫中物件的案例
  • 如果任何容錯移轉群組在執行個體集區中,就無法在執行個體之間建立。

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

您也可以使用 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-AzSqlDatabaseInstanceFailoverGroup 此命令會建立容錯移轉群組,並同時在主要和次要執行個體上註冊
Set-AzSqlDatabaseInstanceFailoverGroup 修改容錯移轉群組的設定
Get-AzSqlDatabaseInstanceFailoverGroup 擷取容錯移轉群組的設定
Switch-AzSqlDatabaseInstanceFailoverGroup 觸發容錯移轉群組容錯移轉至次要執行個體
Remove-AzSqlDatabaseInstanceFailoverGroup 移除容錯移轉群組

下一步

如需設定容錯移轉群組的步驟,請參閱將受控執行個體新增至容錯移轉群組指南。

如需功能的概觀,請參閱容錯移轉群組。 若要了解如何節省授權成本,請參閱設定待命複本