Azure SQL Database 與 SQL 受控執行個體的高可用性

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

在 Azure SQL Database 與 SQL 受控執行個體中,高可用性架構的目標是保證您的資料庫至少有 99.99% 的時間處於啟動且正在執行的狀態,而不需要擔心維護作業與中斷造成影響。 如需不同層級之特定 SLA 的詳細資訊,請參閱 Azure SQL Database 的 SLA (英文) 與 Azure SQL 受控執行個體 SLA

Azure 會自動處理重要的維護工作,例如修補、備份、Windows 與 Azure SQL 升級,以及基礎硬體、軟體或網路失敗等非計劃性事件。 在修補或容錯移轉 Azure SQL Database 中的基礎資料庫時,若您在應用程式中採用重試邏輯,就不會察覺到停機。 即使在最關鍵的情況下,SQL Database 與 SQL 受控執行個體也可以快速復原,確保您的資料隨時可供使用。

高可用性解決方案旨在確保認可的資料絕不會因為失敗而遺失、維護作業不會影響到您的工作負載,以及資料庫不會是您軟體架構中的單一失敗點。 在升級或維護資料庫時,不會有維護視窗或停機時間要求您停止工作負載。

有兩個高可用性架構模型:

  • 以計算與儲存體分隔為基礎的標準可用性模型。 這有賴於遠端儲存層的高可用性和可靠性。 此架構的適用標的是預算導向、可容許效能在維護活動期間些許下降的商務應用程式。
  • 以資料庫引擎處理序叢集為基礎的進階可用性模型。 這有賴於可用的資料庫引擎節點一律都有仲裁的事實。 此架構的適用標的是具有高 IO 效能、高交易率為的任務關鍵性應用程式,可保證您的工作負載在維護活動期間只會受到最低程度的效能影響。

SQL Database 與 SQL 受控執行個體都會在最新穩定版本的 SQL Server 資料庫引擎與 Windows 作業系統上執行,而且大部分的使用者都不會注意到持續執行升級。

基本、標準與一般目的服務層級本地備援可用性

基本、標準與一般用途服務層級會針對無伺服器與佈建的計算使用標準可用性架構。 下圖顯示四個不同的節點,分別具有個別的計算與儲存層。

Separation of compute and storage

標準可用性模型包含兩層:

  • 無狀態計算層,會執行 sqlservr.exe 程序,且只包含暫時性資料與快取資料,例如:已連結 SSD 的 TempDB 與模型資料庫,以及記憶體中的計畫快取、緩衝集區與資料行存放區集區。 此無狀態節點會由 Azure Service Fabric 操作,可初始化 sqlservr.exe、控制節點的健康狀態,並在必要時執行容錯轉移至其他節點。
  • 具狀態資料層,包含儲存在 Azure Blob 儲存體中的資料庫檔案 (.mdf/.ldf)。 Azure Blob 儲存體具有內建的資料可用性與備援功能。 其保證將會保留記錄檔中的每筆記錄或資料檔案中的每個頁面,即使 sqlservr.exe 程序損毀也一樣。

每當升級資料庫引擎或作業系統,或者偵測到失敗時,Azure Service Fabric 都會將無狀態 sqlservr.exe 程序移至另一個具有足夠可用容量的無狀態計算節點。 Azure Blob 儲存體中的資料不受移動的影響,而資料/記錄檔會連結至新初始化的 sqlservr.exe 程序。 此程序保證 99.99% 的可用性,但因為新的 sqlservr.exe 程序從非經常性存取層快取開始,所以大量工作負載在轉換期間可能會發生一些效能降低。

一般用途服務層級區域備援可用性

會針對無伺服器與佈建的計算提供一般用途服務層級的區域備援設定。 此設定會利用 Azure 可用性區域,在 Azure 區域的多個實體位置之間複寫資料庫。 藉由選取區域備援,可讓新的與現有的無伺服器及已佈建的一般用途單一資料庫與彈性集區在面對更大規模的失敗 (包括災難性資料中心服務中斷) 時,也能夠復原,而不需要對應用程式邏輯進行任何變更。

一般用途層級的區域備援設定有兩層:

  • 具狀態資料層,包含儲存在 ZRS (區域備援儲存體) 中的資料庫檔案 (.mdf/.ldf)。 使用 ZRS 時,資料與記錄檔會在三個實體獨立的 Azure 可用性區域之間同步複製。
  • 無狀態計算層,會執行 sqlservr.exe 程序,且只包含暫時性資料與快取資料,例如:已連結 SSD 的 TempDB 與模型資料庫,以及記憶體中的計畫快取、緩衝集區與資料行存放區集區。 此無狀態節點由 Azure Service Fabric 操作,可初始化 sqlservr.exe、控制節點的健康狀態,並在必要時執行容錯轉移至其他節點。 針對區域備援無伺服器與佈建的一般用途資料庫,可在其他可用性區域中立即取得具有備援容量的節點以進行容錯移轉。

下圖針對一般用途服務層級說明高可用性架構的區域備援版本:

Zone redundant configuration for general purpose

重要

針對一般用途層,區域備援設定在下列區域中正式推出:西歐、北歐、美國西部 2 與法國中部。 這在下列區域中為預覽版:美國東部、美國東部 2、東南亞、澳大利亞東部、日本東部與英國南部。

注意

SQL 受控執行個體無法使用區域備援設定。 在 SQL Database 中,此功能只能在選取 Gen5 硬體時使用。

進階與業務關鍵服務層級本地備援可用性

進階與業務關鍵服務層級會使用進階可用性模型,將計算資源 (sqlservr.exe 程序) 與儲存體 (本機連結的 SSD) 整合在單一節點上。 藉由將計算與儲存體複寫至建立三到四個節點叢集的其他節點來達到高可用性。

Cluster of database engine nodes

基礎資料庫檔案 (.mdf/.ldf) 會放在已連結的 SSD 儲存體上,以提供非常低的延遲 IO 給工作負載。 使用類似 SQL Server Always On 可用性群組的技術,實作高可用性。 叢集包含單一主要複本,可供讀寫客戶工作負載及最多三個包含資料複本的次要複本 (計算與儲存體) 存取。 主要節點會依序將變更持續推送至次要節點,並確保資料在認可每個交易之前,會保存至至少一個次要複本。 此程序可保證在主要節點因任何原因而損毀時,一律會有完全同步處理的節點可供容錯移轉。 該容錯移轉由 Azure Service Fabric 所起始。 次要複本變成新的主要節點之後,會建立另一個次要複本,以確保叢集有足夠的節點 (仲裁集)。 容錯移轉完成之後,Azure SQL 連線會自動重新導向至新的主要節點。

進階可用性模型額外的優點,包括將唯讀 Azure SQL 連線重新導向至其中一個次要複本的能力。 此功能稱為讀取縮放。其會從主要複本提供 100% 額外的計算容量,而無需額外費用來卸載唯讀作業,例如分析工作負載。

進階與業務關鍵服務層級區域備援可用性

依照預設,系統會在相同的資料中心內建立進階可用性模型的節點叢集。 引進 Azure 可用性區域之後,SQL Database 可以將業務關鍵資料庫的不同複本放在相同地區中的不同可用性區域。 為了避免發生單點失敗,系統也會跨多個區域將控制環複寫成三個閘道環 (GW)。 Azure 流量管理員 (ATM) 會控制特定閘道的路由。 因為進階或業務關鍵服務層級中的區域備援設定不會建立其他的資料庫備援,所以無需額外費用即可加以啟用。 藉由選取區域備援設定,可讓您的進階或業務關鍵資料庫在面對更大規模的失敗 (包括災難性資料中心服務中斷) 時,也能夠復原,而不需要對應用程式邏輯進行任何變更。 您也可以將任何現有的進階或業務關鍵資料庫或集區轉換成區域備援設定。

因為區域備援資料庫在不同資料中心 (資料中心彼此之間有些距離) 內都有複本,所以增加的網路延遲可能會導致認可時間增加,因而影響某些 OLTP 工作負載的效能。 您可以隨時停用區域備援設定來回到單一區域設定。 此程序是類似於一般服務層級升級的線上作業。 在此程序結束時,資料庫或集區會從區域備援通道移轉至單一區域通道,或從單一區域通道移轉至區域備援通道。

重要

此功能無法在 SQL 受控執行個體中使用。 在 SQL Database 中使用業務關鍵層時,區域備援設定只能在選取 Gen5 硬體時使用。 如需支援區域備援資料庫區域的最新資訊,請參閱依區域分類的服務支援

下圖說明高可用性架構的區域備援版本:

high availability architecture zone redundant

超大規模資料庫服務層級本地備援可用性

超大規模資料庫服務層級架構會在分散式函式架構中加以描述,並且目前僅適用於 SQL Database,而不適用於 SQL 受控執行個體。

Hyperscale functional architecture

超大規模資料庫的可用性模型包含四層:

  • 無狀態計算層,會執行 sqlservr.exe 程序,且只包含暫時性資料與快取資料,例如:已連結 SSD 的非涵蓋 RBPEX 快取、TempDB、模型資料庫等,以及記憶體中的計畫快取、緩衝集區與資料行存放區集區。 此無狀態層包含主要計算複本,並選擇性包含一些可作為容錯移轉目標的次要計算複本。
  • 由頁面伺服器組成的無狀態儲存層。 此層是在計算複本上執行之 sqlservr.exe 程序的分散式儲存引擎。 每部頁面伺服器只包含暫時性資料與快取資料,例如:已連結 SSD 的涵蓋 RBPEX 快取,以及記憶體中快取的資料頁面。 每部頁面伺服器在主動-主動設定中都有成對的頁面伺服器,以提供負載平衡、備援與高可用性。
  • 由執行記錄服務處理序、交易記錄登陸區域與交易記錄長期儲存體的計算節點所組成的具狀態交易記錄儲存層。 登陸區域與長期儲存體會使用 Azure 儲存體,提供交易記錄的可用性與備援,以確保認可交易的資料持久性。
  • 具有資料庫檔案 (.mdf/.ndf) 的具狀態資料儲存層,儲存在 Azure 儲存體中,並且由頁面伺服器進行更新。 此層使用 Azure 儲存體的資料可用性與備援功能。 其保證即使其他超大規模資料庫架構層中的程序損毀,或即使計算節點失敗,也會保留資料檔案中的每個頁面。

所有超大規模資料庫層中的計算節點都會在 Azure Service Fabric 上執行,以控制每個節點的健康狀態,並視需要執行容錯移轉至可用的正常節點。

如需超大規模資料庫中高可用性的詳細資訊,請參閱超大規模資料庫中的資料庫高可用性

超大規模資料庫服務層級區域備援可用性 (預覽)

Azure SQL Database 超大規模資料庫服務層級的區域備援目前為公開預覽。 啟用此設定可透過所有超大規模資料庫層的可用性區域複寫,來確保區域層級的復原能力。 藉由選取區域備援,可讓超大規模資料庫在面對更大規模的失敗 (包括災難性資料中心服務中斷) 時,也能夠復原,而不需要對應用程式邏輯進行任何變更。

請考慮下列限制:

  • 目前僅支援下列 Azure 區域:英國南部、巴西南部、美國西部 2、日本東部、北歐、東南亞、加拿大中部、美國中部、美國中南部、法國中部、澳大利亞東部、德國中西部、東亞、南韓中部、挪威東部與美國西部 3。
  • 區域備援設定只能在資料庫建立期間進行指定。 佈建資源之後,就無法修改此設定。 使用資料庫複本時間點還原,或是建立異地複本以更新現有超大規模資料庫的區域備援設定。 當您使用下列其中一個更新選項時,若目標資料庫位於與來源不同的區域中,或是若目標的資料庫備份儲存體備援與來源資料庫不同時,複製作業會是資料大小作業。 此外,當使用下列其中一個更新選項時,目標資料庫將不會有從來源資料庫進行時間點還原的歷史備份資料。
  • 不支援具名複本。
  • 僅支援區域備援備份
  • 僅支援 Gen5 硬體。
  • 目前不支援異地還原
  • 目前在將現有資料庫從另一個 Azure SQL Database 服務層級移轉至超大規模資料庫時,無法指定區域備援。

重要

至少需要 1 個高可用性計算複本,以及使用區域備援備份儲存體,才能啟用超大規模資料庫的區域備援設定。

建立區域備援超大規模資料庫

使用 Azure PowerShellAzure CLI 來建立區域備援超大規模資料庫。 確認您有最新版本的 API,以確保支援任何最近的變更。

使用 Azure PowerShell 指定 -ZoneRedundant 參數,以啟用超大規模資料庫的區域備援。 該資料庫必須至少有 1 個高可用性複本,且必須指定區域備援備份儲存體。

若要使用 Azure Powershell 啟用區域備援,請使用下列範例命令:

New-AzSqlDatabase -ResourceGroupName "ResourceGroup01" -ServerName "Server01" -DatabaseName "Database01" `
    -Edition "Hyperscale" -HighAvailabilityReplicaCount 1 -ZoneRedundant -BackupStorageRedundancy Zone

藉由建立異地複本來建立區域備援超大規模資料庫

若要建立現有的超大規模資料庫區域備援,請使用 Azure PowerShell 或 Azure CLI,透過作用中異地複寫來建立區域備援超大規模資料庫。 異地複本可以位於與現有超大規模資料庫相同或不同的區域中。

指定 -ZoneRedundant 參數,以啟用次要超大規模資料庫的區域備援。 次要資料庫必須至少有 1 個高可用性複本,且必須指定區域備援備份儲存體。

若要使用 Azure PowerShell 來建立區域備援資料庫,請使用下列範例命令:

New-AzSqlDatabaseSecondary -ResourceGroupName "myResourceGroup" -ServerName $sourceserver -DatabaseName "databaseName" -PartnerResourceGroupName "myPartnerResourceGroup" -PartnerServerName $targetserver -PartnerDatabaseName "zoneRedundantCopyOfMySampleDatabase” -ZoneRedundant -BackupStorageRedundancy Zone -HighAvailabilityReplicaCount 1

藉由建立資料庫複本來建立區域備援超大規模資料庫

若要建立現有的超大規模資料庫區域備援,請使用 Azure PowerShell 或 Azure CLI,透過資料庫複本來建立區域備援超大規模資料庫。 該資料庫複本可以位於與現有超大規模資料庫相同或不同的區域中。

指定 -ZoneRedundant 參數,以啟用超大規模資料庫複本的區域備援。 該資料庫複本必須至少有 1 個高可用性複本,且必須指定區域備援備份儲存體。

若要使用 Azure PowerShell 來建立區域備援資料庫,請使用下列範例命令:

New-AzSqlDatabaseCopy -ResourceGroupName "myResourceGroup" -ServerName $sourceserver -DatabaseName "databaseName" -CopyResourceGroupName "myCopyResourceGroup" -CopyServerName $copyserver -CopyDatabaseName "zoneRedundantCopyOfMySampleDatabase” -ZoneRedundant -BackupStorageRedundancy Zone 

加速資料庫復原 (ADR)

加速資料庫復原 (ADR) 是一種新的資料庫引擎功能,可大幅提升資料庫可用性,尤其是針對長時間執行的交易。 ADR 目前可用於 Azure SQL Database、Azure SQL 受控執行個體與 Azure Synapse Analytics。

測試應用程式錯誤復原能力

高可用性是 SQL Database 和 SQL 受控執行個體平台的基礎部分,可為您的資料庫應用程式提供透明的運作。 不過,我們認為您可能想要測試在計劃性或非計劃性事件期間起始的自動容錯移轉作業對應用程式有何影響,然後再將其部署到生產環境。 您可藉由呼叫特殊 API 來重新啟動資料庫、彈性集區或受控執行個體,以手動觸發容錯移轉。 在區域備援無伺服器或已佈建一般用途資料庫或彈性集區的情況下,API 呼叫會導致將用戶端連線重新導向至可用性區域中的新主要複本 (與舊主要複本的可用性區域不同)。 因此,除了測試容錯移轉如何影響現有的資料庫工作階段之外,您也可以確認其是否因為網路延遲的變更而變更端對端效能。 因為重新啟動作業會產生干擾,而且大量的作業可能會對平台造成壓力,所以每個資料庫、彈性集區或受控執行個體每 15 分鐘只允許一次容錯移轉呼叫。

可使用 PowerShell、REST API 或 Azure CLI 起始容錯移轉:

部署類型 PowerShell REST API Azure CLI
資料庫 Invoke-AzSqlDatabaseFailover 資料庫容錯移轉 az rest 可用於從 Azure CLI 叫用 REST API 呼叫
彈性集區 Invoke-AzSqlElasticPoolFailover 彈性集區容錯移轉 az rest 可用於從 Azure CLI 叫用 REST API 呼叫
受控執行個體 Invoke-AzSqlInstanceFailover 受控執行個體 - 容錯移轉 az sql mi failover 可用於從 Azure CLI 叫用 REST API 呼叫

重要

容錯移轉命令不適用於超大規模資料庫的可讀取次要複本。

結論

Azure SQL Database 與 Azure SQL 受控執行個體具有與 Azure 平台高度整合的內建高可用性解決方案。 其依賴 Service Fabric 進行失敗偵測及復原、依賴 Azure Blob 儲存體進行資料保護,並依賴可用性區域進行更高的容錯 (如文件中稍早所述,尚未適用於 Azure SQL 受控執行個體)。 此外,SQL Database 與 SQL 受控執行個體會使用 SQL Server 執行個體中的 Always On 可用性群組技術來進行複寫與容錯移轉。 這些技術的組合可讓應用程式完全了解混合式儲存體模型的優點,並支援最嚴苛的 SLA。

後續步驟