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

適用于:Azure SQL資料庫 Azure SQL 受控執行個體

本文說明 Azure SQL Database 和 Azure SQL 受控執行個體 中的高可用性。

區域備援組態目前為SQL 受管理執行個體預覽狀態,僅適用于業務關鍵服務層級。

概觀

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

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

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

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

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

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

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

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

計算和儲存體的區隔

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

  • 無狀態計算層,會執行 sqlservr.exe 程序,且只包含暫時性和快取資料,例如 TempDB、附加 SSD 上的模型資料庫,以及記憶體中的計畫快取、緩衝集區和資料行存放區集區。 此無狀態節點是由 Azure Service Fabric 操作,可初始化 sqlservr.exe、控制節點的健康情況,並在必要時執行故障轉移至其他節點。
  • 具狀態資料層,其資料庫檔案 (.mdf/.ldf) 儲存在 Azure Blob 儲存體。 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 程序,且只包含暫時性和快取資料,例如 TempDB、附加 SSD 上的模型資料庫,以及記憶體中的計畫快取、緩衝集區和資料行存放區集區。 此無狀態節點是由 Azure Service Fabric 操作,可初始化 sqlservr.exe、控制節點的健康情況,並在必要時執行故障轉移至其他節點。 對於區域備援無伺服器和布建常規用途資料庫,具有備援容量的節點可在容錯移轉的其他可用性區域中立即取得。

下圖說明常規用途服務層級高可用性架構的區域備援版本:

常規用途的區域備援設定

重要

  • 針對常規用途層,區域備援設定在下欄區域中正式推出:西歐、北歐、美國西部 2、法國中部、美國東部 2 美國東部 2 & 。 這在下欄區域中處於預覽狀態:東南亞、澳大利亞東部、日本東部和英國南部。
  • 針對區域備援可用性,選擇預設以外的 維護時段 目前可在 選取區域中使用。
  • 只有在選取 Gen5 硬體時,才能在SQL Database中使用區域備援設定。 區域備援組態目前為SQL 受管理執行個體預覽狀態,僅適用于業務關鍵服務層級。

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

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

資料庫引擎節點的叢集

基礎資料庫檔案 (.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) 硬體時,才可使用區域備援組態。 如需支援區域備援資料庫區域的最新資訊,請參閱依區域分類的服務支援

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

區域備援高可用性架構的圖表。

重要

  • 這項功能目前為預覽版SQL 受管理執行個體,僅適用于業務關鍵服務層級。 在 SQL Database 中,使用業務關鍵層時,僅在選取 Gen5 硬體時才可使用區域備援設定。 如需支援區域備援資料庫區域的最新資訊,請參閱依區域分類的服務支援
  • 針對區域備援可用性,選擇預設以外的 維護時段 目前可在 選取區域中使用。

重要

針對區域備援可用性,選擇預設以外的 維護時段 目前可在 選取區域中使用。

在預覽期間,SQL 受管理執行個體的區域備援可在業務關鍵服務層級中使用,並支援下欄區域:

  • 巴西南部
  • 美國東部
  • 日本東部
  • 挪威東部
  • 阿拉伯聯合大公國北部
  • 南非北部
  • 澳大利亞東部
  • 南韓中部

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

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

超大規模資料庫功能架構

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

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

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

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

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

啟用此設定可透過跨所有超大規模資料庫層級的可用性區域複寫,來確保區域層級復原能力。 藉由選取區域備援,您無須進行任何應用程式邏輯變更,即可讓超大規模資料庫在面對更大規模的故障 (包括災難性的資料中心服務中斷) 時,也能夠復原。 具有可用性區域的所有 Azure 區域都支援區域備援超大規模資料庫。

請考慮下列限制:

  • 您只能在資料庫建立期間指定區域備援設定。 佈建資源之後,就無法修改此設定。 使用資料庫複本時間點還原,或建立異地複本來更新現有超大規模資料庫的區域備援設定。 當您使用下列其中一個更新選項時,若目標資料庫位於與來源不同的區域,或資料庫備份儲存體備援與來源資料庫不同時,複製作業會是資料大小的作業。
  • 僅支援標準系列 (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 -RequestedServiceObjectiveName HS_Gen5_2'

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

若要建立現有的超大規模資料庫區域備援,請使用 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 

Master 資料庫區域備援可用性

在 Azure SQL Database 中,伺服器是邏輯建構,可作為資料庫集合的中央管理點。 在伺服器層級,您可以管理登入、Azure Active Directory 驗證、防火牆規則、稽核規則、威脅偵測原則和自動容錯移轉群組。 與其中一些功能相關的資料,例如登入和防火牆規則,會儲存在 master 資料庫中。 同樣地,某些 DMV 的資料例如 sys.resource_stats也會儲存在 master 資料庫中。

在邏輯伺服器上建立具有區域備援組態的資料庫時,與伺服器相關聯的 master 資料庫也會自動建立區域備援。 這可確保在區域性中斷中,使用資料庫的應用程式仍不會受到影響,因為與 master 資料庫相依的功能仍可使用,例如登入和防火牆規則。 讓 master 資料庫區域備援成為非同步程式,而且需要一些時間才能在背景中完成。

當伺服器上的資料庫都不是區域備援,或當您建立空白伺服器時,與伺服器相關聯的 master 資料庫 就不會有區域備援

您可以使用 Azure PowerShell 或 Azure CLI 或REST API來檢查 ZoneRedundant master 資料庫的 屬性:

使用下列範例命令來檢查 master 資料庫的 「ZoneRedundant」 屬性值。

Get-AzSqlDatabase -ResourceGroupName "myResourceGroup" -ServerName "myServerName" -DatabaseName "master"

加速資料庫復原 (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 呼叫
SQL 受控執行個體 Invoke-AzSqlInstanceFailover SQL 受管理執行個體 - 容錯移轉 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。

後續步驟