什麼是 Always On 可用性群組?

適用於:SQL Server

此文章介紹在 SQL Server 的 Enterprise 版本中設定及管理一或多個可用性群組的 Always On 可用性群組中心概念。 若為 Standard 版本,請檢閱基本可用性群組

Always On 可用性群組功能是提供資料庫鏡像之企業級替代方案的高可用性與災害復原解決方案。 SQL Server 2012 (11.x) 中導入的 Always On 可用性群組可最大化企業一組使用者資料庫的可用性。 「可用性群組」 (Availability Group) 支援一組可一起容錯移轉之離散化使用者資料庫的容錯移轉環境,也就是所謂的 「可用性資料庫」(Availability Database)。 可用性群組支援一組讀寫的主要資料庫,以及一到八組對應的次要資料庫。 此外,您可以將次要資料庫用於唯讀存取及/或某些備份作業。

運用 Azure Arc 啟用的 SQL Server,您可以在 Azure 入口網站中檢視可用性群組

概觀

「可用性群組」 支援一組離散使用者資料庫 (稱為「可用性資料庫」 ) 的複寫環境。 您可以建立可用性群組的高可用性 (HA) 或讀取級別。 HA 可用性群組是一組可一起進行容錯移轉的資料庫。 讀取級別可用性群組是針對唯讀工作負載複製至其他 SQL Server 執行個體的一組資料庫。 可用性群組支援一組主要資料庫,以及一到八組對應的次要資料庫。 次要資料庫不是*備份。 請持續定期備份您的資料庫及其交易記錄。

提示

您可為主要資料庫建立任何類型的備份。 或者,您亦可為次要資料庫建立記錄備份和僅限複製的完整備份。 如需詳細資訊,請參閱作用中次要:在次要複本上備份)

每一組可用性資料庫都是由可用性複本裝載。 有兩種類型的可用性複本:單一主要複本, 以及一到八個次要複本。前者裝載主要資料庫,後者各裝載一組次要資料庫,而且可以當做可用性群組的潛在容錯移轉目標。 可用性群組會在可用性複本層級容錯移轉。 可用性複本僅會針對某個可用性群組中一組資料庫提供資料庫層級的備援。 資料庫問題,例如資料庫因為資料檔案遺失而變得可疑或交易記錄損毀,並不會造成容錯移轉。

主要複本提供主要資料庫,以供用戶端讀寫連接使用。 主要複本會將每個主要資料庫的交易記錄檔記錄傳送到每個次要資料庫。 這個稱為「資料同步處理」 的程序是在資料庫層級發生。 每個次要複本都會快取交易記錄檔記錄 (「強行寫入」 記錄檔),然後將它們套用到對應的次要資料庫。 資料同步處理在主要資料庫和每個連接的次要資料庫之間發生,與其他資料庫無關。 因此,次要資料庫可以暫停或失敗,而不影響其他次要資料庫,主要資料庫也可以暫停或失敗,而不影響其他主要資料庫。

或者,您可以設定一個或多個次要複本以支援對次要資料庫的唯讀存取,而且您可以設定任何次要複本以允許在次要資料庫上進行備份。

SQL Server 2017 引進兩個不同的可用性群組架構。 AlwaysOn 可用性群組提供高可用性、災害復原和讀取級別平衡。 這些可用性群組需要叢集管理員。 在 Windows 中,容錯移轉叢集功能提供叢集管理員。 在 Linux 中,您可以使用 Pacemaker。 另一個架構是「讀取級別可用性群組」 。 讀取級別可用性群組針對唯讀工作負載提供複本,但未針對高可用性。 在讀取擴縮可用性群組中,沒有叢集管理員,因為容錯移轉無法自動執行。

在 Windows 上為 HA 部署 Always On 可用性群組需要 Windows Server 容錯移轉叢集 (WSFC)。 給定可用性群組的每個可用性複本都必須位在相同 WSFC 的不同節點上。 唯一的例外狀況是在移轉至另一個 WSFC 叢集期間,可用性群組可以暫時跨兩個叢集。

注意

如需 Linux 上的可用性群組相關資訊,請參閱 Always On availability group for SQL Server on Linux (Linux 上 SQL Server 的 AlwaysOn 可用性群組)。

在 HA 組態中,對於您建立的每個可用性群組,系統都會建立一個叢集角色。 WSFC 叢集會監視此角色,以評估主要複本的健全狀況。 Always On 可用性群組的仲裁會以 WSFC 叢集中的所有節點為基礎,而不論給定叢集節點是否裝載任何可用性複本。 相對於資料庫鏡像,Always On 可用性群組中沒有見證角色。

注意

如需 SQL Server Always On 元件與 WSFC 叢集之關聯性的相關資訊,請參閱 SQL Server 的 Windows Server 容錯移轉叢集 (WSFC) (部分機器翻譯)。

下圖顯示可用性群組,其中包含一個主要複本和四個次要複本。 最多可支援八個次要複本,包括一個主要複本與四個同步認可次要複本。

Diagram of an availability group with five replicas.

詞彙和定義

可用性群組
一組一起容錯移轉之資料庫 (「可用性資料庫」) 的容器。

可用性資料庫
屬於可用性群組的資料庫。 對於每個可用性資料庫而言,可用性群組會維護單一讀寫複本 (「主要資料庫」) 以及一到八個唯讀複本 (「次要資料庫」)。

主要資料庫
可用性資料庫的讀寫複本。

次要資料庫
可用性資料庫的唯讀複本。

可用性複本
特定 SQL Server 執行個體所託管之可用性群組的具現化,其中維護屬於可用性群組之每個可用性資料庫的本機複本。 有兩種類型的可用性複本存在:單一 「主要複本」 以及一到八個 「次要複本」

主要複本
可用性複本,該複本可讓主要資料庫用於用戶端的讀寫連接,同時也將每個主要資料庫的交易記錄檔記錄傳送到每個次要複本。

次要複本
可用性複本,該複本會維護每個可用性資料庫的次要副本,並且當做可用性群組的潛在容錯移轉目標。 (選擇性) 可支援以唯讀方式存取次要資料庫的次要複本,可以支援在次要資料庫上建立備份。

可用性群組接聽程式
用戶端可連接的伺服器名稱,以便存取可用性群組之主要或次要複本中的資料庫。 可用性群組接聽程式會將內送連接導向至主要複本或唯讀次要複本。

可用性資料庫

若要將資料庫加入可用性群組,該資料庫必須是存在於裝載主要複本之伺服器執行個體的線上讀寫資料庫。 當您加入資料庫時,該資料庫會加入可用性群組做為主要資料庫,同時仍然可以供用戶端使用。 在新主要資料庫的備份還原到裝載次要複本的伺服器執行個體 (使用 RESTORE WITH NORECOVERY) 之前,不會存在任何對應的次要資料庫。 新的次要資料庫在加入可用性群組之前,處於 RESTORING 狀態。 如需詳細資訊,請參閱於 Always On 次要資料庫開始資料移動

加入時,會將次要資料庫置於 ONLINE 狀態,並起始對應主要資料庫的資料同步處理。 「資料同步處理」 (Data Synchronization) 是將主要資料庫的變更重現在次要資料庫上的程序。 資料同步處理涉及主要資料庫將交易記錄檔記錄傳送到次要資料庫。

重要

可用性資料庫有時候在 Transact-SQL、PowerShell 與 SQL Server 管理物件 (SMO) 名稱中會稱為「資料庫複本」。 例如,「資料庫複本」一詞已在 Always On 動態管理檢視的名稱中使用,這些檢視會傳回關於可用性資料庫的資訊:sys.dm_hadr_database_replica_statessys.dm_hadr_database_replica_cluster_states。 但在《SQL Server 線上叢書》中,「複本」一詞通常是指可用性複本。 例如「主要複本」與「次要複本」一律指可用性複本。

可用性複本

每個可用性群組都會定義一組兩個或多個容錯移轉夥伴,稱為可用性複本。 「可用性複本」 (Availability Replica) 是可用性群組的元件。 每個可用性複本都會在可用性群組中裝載一個可用性資料庫的副本。 針對給定的可用性群組,可用性複本必須由位於某個 WSFC 叢集中不同節點上的個別 SQL Server 執行個體所裝載。 這些伺服器執行個體每一個都必須啟用 AlwaysOn。

SQL Server 2019 (15.x) 會將同步複本的數量上限,從 SQL Server 2017 (14.x) 中最多為 3 的狀態增加至 5。 您可以設定這五個複本的群組,使其在群組內具備自動容錯移轉。 有一個主要複本,再加上四個同步的次要複本。

給定的執行個體只能裝載每個可用性群組的一個可用性複本。 但是,每一個執行個體都可以用於多個可用性群組。 給定的執行個體可以是獨立執行個體或 SQL Server 容錯移轉叢集執行個體 (FCI)。 如果您需要伺服器層級的備援性,請使用容錯移轉叢集執行個體。

每個可用性複本都會獲指派一個初始角色,即「主要角色」 或「次要角色」 ,這個角色是由該複本的可用性資料庫所繼承。 給定複本的角色會決定所裝載的是讀寫資料庫還是唯讀資料庫。 其中一個複本 (也就是所謂的「主要複本」 ) 會獲指派主要角色並裝載讀寫資料庫,也就是「主要資料庫」 。 至少有一個其他複本 (也就是所謂的 「次要複本」 ) 會獲指派次要角色。 次要複本會裝載唯讀資料庫,也就是次要資料庫。

注意

當可用性複本的角色未定 (例如在容錯移轉期間) 時,其資料庫會暫時處於 NOT SYNCHRONIZING 狀態。 在可用性複本的角色解析之前,會將其角色設為 RESOLVING。 如果可用性複本解析為主要角色,其資料庫會變成主要資料庫。 如果可用性複本解析為次要角色,其資料庫會變成次要資料庫。

可用性模式

可用性模式是每個可用性複本的屬性。 可用性模式會決定在給定次要複本將交易記錄寫入至磁碟 (儲存記錄) 之前,主要複本是否等待認可資料庫上的交易。 Always On 可用性群組支援兩種可用性模式:「非同步認可模式」與「同步認可模式」。

  • 非同步認可模式

    使用此可用性模式的可用性複本就是所謂的「非同步認可複本」(Asynchronous-Commit Replica) 。 在非同步認可模式下,主要複本會認可交易,而不等候非同步認可次要複本確認已經強行寫入其交易記錄。 非同步認可模式會將次要資料庫上的交易延遲降至最低,但允許這些資料庫落後主要資料庫,因此可能會發生資料遺失。

  • 同步認可模式

    使用此可用性模式的可用性複本就是所謂的「同步認可複本」 。 在同步認可模式下認可交易之前,同步認可主要複本會等候同步認可次要複本確認它已完成強行寫入記錄。 同步認可模式可確定,一旦給定次要資料庫與主要資料庫同步處理之後,認可的交易就會受到完整保護。 這種保護是以增加交易延遲做為代價。 (選擇性地) SQL Server 2017 引進「必要的同步次要複本」功能,以在需要時以延遲為代價來進一步提高安全性。 您可以啟用 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 功能,以要求指定數目的同步複本先認可交易,才能允許認可主要複本。

如需詳細資訊,請參閱可用性模式

容錯移轉的類型

在主要複本與次要複本之間的工作階段內容中,主要和次要角色在程序中可能可以互換,稱為 「容錯移轉」 (Failover)。 在容錯移轉期間,目標次要複本會轉換到主要角色,變成新的主要複本。 新的主要複本會將其資料庫變成線上狀態做為主要資料庫,而且用戶端應用程式可以連接至這些資料庫。 當先前的主要複本可以使用時,會轉換到次要角色,變成次要複本。 先前的主要資料庫就會變成次要資料庫,而且資料同步處理會繼續。

可用性群組會在可用性複本層級容錯移轉。 容錯移轉不是因資料庫問題 (例如資料庫因為資料檔案遺失而變得可疑、資料庫刪除或交易記錄損毀) 而造成的。

容錯移轉的形式共有三種:自動、手動和強制 (有遺失資料的可能)。 給定次要複本支援的容錯移轉形式取決於其可用性模式,而且針對同步認可模式,則取決於主要複本和目標次要複本上的容錯移轉模式,如下所示。

  • 如果目標次要複本目前與主要複本同步處理,則同步認可模式支援兩種容錯移轉形式:「規劃的手動容錯移轉」 和「自動容錯移轉」 。 這些容錯移轉形式的支援取決於容錯移轉夥伴上的 「容錯移轉模式屬性」 (Failover Mode Property) 設定。 如果容錯移轉模式在主要或次要複本上設為「手動」,則只支援該次要複本的手動容錯移轉。 如果容錯移轉模式在主要和次要複本上都設為「自動」,則在該次要複本上同時支援自動和手動容錯移轉。

    • 已規劃的手動容錯移轉 (不會遺失資料)

      在資料庫管理員發出容錯移轉命令,並使同步處理的次要複本轉換到主要角色 (擁有資料保護保證),而主要複本轉換到次要角色之後,會發生手動容錯移轉。 手動容錯移轉要求主要複本和目標次要複本都在同步認可模式下執行,而且次要複本必須已經經過同步處理。

    • 自動容錯移轉 (不會遺失資料)

      自動容錯移轉的發生,是為了回應造成同步處理的次要複本轉換到主要角色 (擁有資料保護保證) 的失敗。 當先前的主要複本變成可以使用時,會轉換到次要角色。 自動容錯移轉要求主要複本和目標次要複本都在同步認可模式下執行,而且容錯移轉模式設為「自動」。 此外,次要複本必須已經過同步處理、擁有 WSFC 仲裁,而且符合可用性群組之彈性容錯移轉原則所指定的條件。

  • 在非同步認可模式下,容錯移轉的唯一形式為強制手動容錯移轉 (可能會遺失資料),通常稱為「強制容錯移轉」 。 強制容錯移轉只能手動起始,因此視為一種手動容錯移轉。 強制容錯移轉是一個災難復原選項。 它是目標次要複本沒有與主要複本同步處理時,唯一可行的容錯移轉形式。

如需詳細資訊,請參閱容錯移轉及容錯移轉模式

重要

  • SQL Server 容錯移轉叢集執行個體 (FCI) 不支援依照可用性群組進行自動容錯移轉,因此任何由 FCI 裝載的可用性複本只能設定為手動容錯移轉。
  • 如果您在已同步處理的次要複本上發出強制容錯移轉命令,次要複本的行為會與規劃的手動容錯移轉相同。

福利

Always On 可用性群組提供了一組豐富的選項,可改善資料庫可用性並改善資源的使用方式。 關鍵元件如下:

  • 最多支援九個可用性複本。 「可用性複本」 (Availability Replica) 是特定 SQL Server 執行個體所裝載之可用性群組的具現化,其中維護屬於可用性群組之每個可用性資料庫的本機複本。 每個可用性群組都支援一個主要複本和最多八個次要複本。 如需詳細資訊,請參閱 Always On 可用性群組概觀

    重要

    每個可用性複本都必須位在單一 Windows Server 容錯移轉叢集 (WSFC) 叢集的不同節點。 如需可用性群組之必要條件、限制和建議的詳細資訊,請參閱可用性群組的必要條件、限制和建議

  • 支援替代可用性模式,如下所示:

    • 非同步認可模式。 這種可用性模式是一種當可用性複本分散距離相當遠時仍可正常運作的災害復原方案。

    • 同步認可模式。 這種可用性模式強調的是高可用性和資料保護而非效能,但是相對地增加了交易延遲。 給定的可用性群組最多可支援五個同步認可的可用性複本,包括目前的主要複本。

    如需詳細資訊,請參閱可用性模式

  • 支援許多可用性群組容錯移轉形式:自動容錯移轉、規劃的手動容錯移轉 (通常只稱為「手動容錯移轉」),以及強制手動容錯移轉 (通常只稱為「強制容錯移轉」)。 如需詳細資訊,請參閱容錯移轉及容錯移轉模式

  • 可讓您將給定的可用性複本設定為支援下列其中一種或兩種使用中次要功能:

    利用作用中次要功能可透過更善用次要硬體資源,改善 IT 效率並降低成本。 此外,透過將讀取意圖應用程式和備份作業卸載至次要複本,有助於提高主要複本的效能。

  • 支援每個可用性群組的可用性群組接聽程式。 「可用性群組接聽程式」是用戶端可連接的伺服器名稱,以便存取 AlwaysOn 可用性群組之主要或次要複本中的資料庫。 可用性群組接聽程式會將內送連接導向至主要複本或唯讀次要複本。 接聽程式會在可用性群組容錯移轉之後提供快速應用程式容錯移轉。 如需詳細資訊,請參閱可用性群組接聽程式、用戶端連線能力及應用程式容錯移轉

  • 支援彈性容錯移轉原則,以便有效控制可用性群組容錯移轉。 如需詳細資訊,請參閱容錯移轉及容錯移轉模式

  • 支援防止頁面損毀的自動頁面修復。 如需詳細資訊,請參閱自動頁面修復

  • 支援加密和壓縮,可提供安全且高效能的傳輸方式。

  • 提供一組整合式工具,可簡化可用性群組的部署和管理作業,包括:

    • 建立和管理可用性群組的 Transact-SQL DDL 陳述式。 如需詳細資訊,請參閱可用性群組的 Transact-SQL 陳述式

    • 如下所示,SQL Server Management Studio 工具:

      • [新增可用性群組精靈] 會建立及設定可用性群組。 在某些環境中,此精靈還可以自動準備次要資料庫並且為每個資料庫啟動資料同步處理。 如需詳細資訊,請參閱使用新增可用性群組對話框

      • [將資料庫新增至可用性群組精靈] 可將一或多個主要資料庫新增至現有的可用性群組。 在某些環境中,此精靈還可以自動準備次要資料庫並且為每個資料庫啟動資料同步處理。 如需詳細資訊,請參閱使用「將資料庫加入至可用性群組」精靈

      • [將複本新增至可用性群組精靈] 可將一或多個次要複本新增至現有的可用性群組。 在某些環境中,此精靈還可以自動準備次要資料庫並且為每個資料庫啟動資料同步處理。 如需詳細資訊,請參閱使用將複本新增至可用性群組精靈

      • 容錯移轉可用性群組精靈會在可用性群組上起始手動容錯移轉。 根據您指定為容錯移轉目標之次要複本的組態和狀態,此精靈可以執行規劃的手動容錯移轉或強制手動容錯移轉。 如需詳細資訊,請參閱使用容錯移轉可用性群組精靈

    • Always On 儀表板會監視 Always On 可用性群組、可用性複本和可用性資料庫,以及評估 Always On 原則的結果。 如需詳細資訊,請參閱使用可用性群組儀表板

    • [物件總管詳細資料] 窗格會顯示現有可用性群組的基本資訊。 如需詳細資訊,請參閱使用物件總管詳細資料監視可用性群組

    • PowerShell 指令程式。 如需詳細資訊,請參閱可用性群組的 PowerShell Cmdlet

用戶端連接

您可以建立可用性群組接聽程式,以便將用戶端連接提供給給定可用性群組的主要複本。 「可用性群組接聽程式」 (Availability Group Listener) 會將連接至給定可用性群組的一組資源提供給適當可用性複本的直接用戶端連接。

可用性群組接聽程式與當做虛擬網路名稱 (VNN)、一個或多個虛擬 IP 位址 (VIP),以及 TCP 通訊埠編號的唯一 DNS 名稱相關聯。 如需詳細資訊,請參閱可用性群組接聽程式、用戶端連線能力及應用程式容錯移轉

提示

如果可用性群組只有兩個可用性複本,而且未設定為允許以唯讀方式存取次要複本,則用戶端可以使用 資料庫鏡像連接字串連接到主要複本。 在您將資料庫從資料庫鏡像移轉到 Always On 可用性群組之後,這個方法可能暫時很實用。 在您新增其他次要複本之前,您需要為可用性群組建立可用性群組接聽程式,並更新您的應用程式以使用接聽程式的網路名稱。

使用中次要複本

Always On 可用性群組支援使用中次要複本。 使用中次要複本功能提供下列支援:

  • 對次要複本執行備份作業

    次要複本可以備份記錄以及完整資料庫、檔案或檔案群組的 只複製 備份。 您可以設定可用性群組來指定應該執行備份之處的喜好設定。 請務必了解,喜好設定並不是由 SQL Server 施行,所以它對於隨選備份沒有任何影響。 這個喜好設定的解譯取決於您在給定可用性群組之每個資料庫的備份作業中所編寫的邏輯 (如果有的話)。 對於各個可用性複本,您可以指定此複本與同一個可用性群組中之其他複本的備份優先權。 如需詳細資訊,請參閱作用中次要:在次要複本上備份

  • 對一個或多個次要複本進行唯讀存取 (可讀取的次要複本)

    您可以將任何次要可用性複本設定為僅允許對其本機資料庫進行唯讀存取,但不一定支援某些作業。 這會防止對次要複本的讀寫連線嘗試。 您也可以只允許讀寫存取以防止主要複本上的唯讀工作負載。 這可以防止對主要複本進行唯讀連線。 如需詳細資訊,請參閱作用中次要:可讀取次要複本

    若可用性群組目前擁有可用性群組接聽程式與一或多個可讀取次要複本,SQL Server 可以將讀取意圖連線要求路由傳送至其中一個複本 (「唯讀路由傳送」)。 如需詳細資訊,請參閱可用性群組接聽程式、用戶端連線能力及應用程式容錯移轉

工作階段逾時期限

工作階段逾時期限是可用性複本屬性,它決定在連接關閉之前,與另一個可用性複本的連接保持非使用中的時間。 主要與次要複本會彼此 Ping,表示它們仍在使用中。 在逾時期限內從另一個複本接收到 Ping,表示連線仍為開啟狀態,且伺服器執行個體正在進行通訊。 接收到 Ping 時,可用性複本會重設它在該連接上的工作階段逾時計數器。

工作階段逾時期限防止複本無限期地等候從另一個複本接收 Ping。 如果在工作階段逾時期限內未收到另一個複本的 Ping,則複本會逾時。它的連接會關閉,而逾時的複本則進入 DISCONNECTED 狀態。 即使中斷連線的複本設定成同步認可模式,交易仍不會等候該複本重新連線及重新同步處理。

每個可用性複本的預設工作階段逾時期限為 10 秒。 此值是使用者可設定的,最小值為 5 秒。 通常我們建議您讓逾時期限保持在 10 秒或更久。 將這個值設定為小於 10 秒,可能會使負荷重的系統宣告假性失敗。

注意

在解析角色中,工作階段逾時期限不適用,因為不會發生 Ping。

自動修復頁面

每個可用性複本都會嘗試解決阻止讀取資料頁面的特定類型錯誤,以便從本機資料庫上的損毀頁面自動復原。 如果次要複本無法讀取某個頁面,此複本會向主要複本要求一個全新頁面副本。 如果主要複本無法讀取某個頁面,此複本會向所有次要複本廣播全新副本的要求,並先取得頁面以回應。 如果這個要求成功,無法讀取的頁面就會使用副本取代,這通常會解決錯誤。

如需詳細資訊,請參閱自動頁面修復

與其他 Database Engine 功能的互通性和共存性

Always On可用性群組可以與下列功能或 SQL Server 元件搭配使用:

部落格:

白皮書:

下一步