可用性群組設定的高可用性和資料保護

適用於:SQL Server - Linux

本文提供 Linux 伺服器上 SQL Server Always On 可用性群組的支援部署設定。 可用性群組支援高可用性和資料保護。 容錯移轉後的自動失敗偵測、自動容錯移轉和透明重新連線提供高可用性。 同步處理的複本則提供資料保護。

在 Windows Server 容錯移轉叢集 (WSFC) 上,高可用性的常見設定會使用兩個同步複本和第三個伺服器或檔案共用來提供仲裁。 檔案共用見證會驗證可用性群組設定,例如同步處理的狀態,以及複本的角色。 此設定可確保選擇作為容錯移轉目標的次要複本,具有最新的資料和可用性群組設定變更。

WSFC 會同步處理可用性群組複本與檔案共用見證之間,容錯移轉仲裁的設定中繼資料。 當可用性群組不在 WSFC 上時,SQL Server 執行個體會將設定中繼資料存放在 master 資料庫中。

例如,Linux 叢集上的可用性群組具有 CLUSTER_TYPE = EXTERNAL。 沒有任何 WSFC 可仲裁容錯移轉。 在此情況下,設定中繼資料會由 SQL Server 執行個體進行管理和維護。 由於此叢集中沒有見證伺服器,因此需要第三個 SQL Server 執行個體來儲存設定狀態中繼資料。 這三個 SQL Server 執行個體同時提供叢集的分散式中繼資料儲存體。

叢集管理員可以查詢可用性群組中的 SQL Server 執行個體,並協調容錯移轉以維持高可用性。 在 Linux 叢集中,Pacemaker 是叢集管理員。

SQL Server 2017 CU 1 可針對將 CLUSTER_TYPE = EXTERNAL 用於兩個同步複本,加上僅限設定複本的可用性群組,啟用高可用性。 僅限設定複本可以裝載於任何版本的 SQL Server 2017 CU1 或更新版本 (包括 SQL Server Express Edition) 上。 僅限設定複本會維護 master 資料庫中可用性群組的設定資訊,但不包含可用性群組中的使用者資料庫。

設定如何影響預設資源設定

SQL Server 2017 引進 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 叢集資源設定。 此設定可確保在主要複本認可每個交易之前,指定的次要複本數目會寫入交易資料以進行記錄。 當您使用外部叢集管理員時,這項設定會影響高可用性和資料保護。 設定的預設值取決於建立叢集資源時其架構。 當您安裝 SQL Server 資源代理程式 mssql-server-ha 並為可用性群組建立叢集資源時,叢集管理員會偵測可用性群組設定並設定 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT

如果設定支援,資源代理程式參數 REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 會設定為提供高可用性和資料保護的值。 如需詳細資訊,請參閱了解 SQL Server 的 Pacemaker 資源代理程式

下列各節說明叢集資源的預設行為。

請選擇可用性群組設計,以符合高可用性、資料保護及讀取級別的特定商務需求。

下列設定描述可用性群組的設計模式,以及每個模式的功能。 這些設計模式適用於高可用性解決方案中 CLUSTER_TYPE = EXTERNAL 的可用性群組。

  • 三個同步複本
  • 兩個同步複本
  • 兩個同步複本和僅限設定複本

三個同步複本

此設定包含三個同步複本。 根據預設,它提供高可用性和資料保護。 它也可以提供讀取級別。

Diagram showing three synchronous replicas.

具有三個同步複本的可用性群組可提供讀取級別、高可用性和資料保護。 下表描述可用性行為。

可用性行為 讀取級別 高可用性和
資料保護
資料保護
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= 0 1 1 2
主要複本中斷 自動容錯移轉。 可能會遺失資料。 新的主要複本是 R/W。  自動容錯移轉。 新的主要複本是 R/W。 自動容錯移轉。 在先前的主要複本復原並聯結可用性群組作為次要複本之前,新的主要複本無法供使用者更新交易使用。 
一個次要複本中斷 主要複本是 R/W。 主要複本是 R/W。 在失敗次要複本復原並聯結可用性群組之前,主要複本無法供使用者更新交易使用。

1 預設值

兩個同步複本

此設定可啟用資料保護。 就像其他可用性群組設定一樣,它可以啟用讀取級別。 兩個同步複本設定並不提供自動高可用性。 兩個複本設定僅適用於 SQL Server 2017 RTM,SQL Server 2017 的更高版本 (CU1 和更新版本) 不再支援此設定。

Diagram showing two synchronous replicas.

具有兩個同步複本的可用性群組提供讀取級別和資料保護。 下表描述可用性行為。

可用性行為 讀取級別 資料保護
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= 0 1 1
主要複本中斷 自動容錯移轉。 可能會遺失資料。 新的主要複本是 R/W。 自動容錯移轉。 在先前的主要複本復原並聯結可用性群組作為次要複本之前,新的主要複本無法供使用者更新交易使用。
一個次要複本中斷 主要複本是 R/W,執行時暴露在遺失資料風險下。  在次要複本復原之前,主要複本無法供使用者更新交易使用。

1 預設值

兩個同步複本和僅限設定複本

具有兩個 (或以上) 同步複本和僅限設定複本的可用性群組可提供資料保護,還可能會提供高可用性。 下圖呈現這個架構:

Diagram showing a configuration-only availability group.

  1. 將使用者資料同步複寫到次要複本。 它也包含可用性群組的設定中繼資料。
  2. 同步複寫可用性群組的設定中繼資料。 它不會包含使用者資料。

在可用性群組圖表中,主要複本會將設定資料推送至次要複本和僅限設定複本。 次要複本也會接收使用者資料。 僅限設定複本不會接收使用者資料。 次要複本處於同步可用性模式。 僅限設定複本不包含可用性群組中的資料庫,只包含有關可用性群組的中繼資料。 只會以同步方式認可僅限設定複本上的設定資料。

注意

具有僅限設定複本的可用性群組是 SQL Server 2017 CU1 的新增功能。 可用性群組中的所有 SQL Server 執行個體都必須是 SQL Server 2017 CU1 或更新版本。

REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT 的預設值為 0。 下表描述可用性行為。

可用性行為 高可用性和
資料保護
資料保護
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= 0 1 1
主要複本中斷 自動容錯移轉。 新的主要複本是 R/W。 可能會遺失資料。 自動容錯移轉。 新的主要複本無法供使用者更新交易使用。
次要複本中斷 主要複本是 R/W,執行時暴露在遺失資料風險下 (如果主要複本失敗且無法復原)。 如果主要複本也失敗,則不會進行自動容錯移轉。  主要複本無法供使用者更新交易使用。 如果主要複本也失敗,則沒有任何可容錯移轉的複本。 
僅限設定複本中斷 主要複本是 R/W。 如果主要複本也失敗,則不會進行自動容錯移轉。  主要複本是 R/W。 如果主要複本也失敗,則不會進行自動容錯移轉。 
同步次要 + 僅限設定複本中斷 主要複本無法供使用者更新交易使用。 不會進行自動容錯移轉。  主要複本無法供使用者更新交易使用。 如果主要複本也失敗,則沒有任何可容錯移轉的複本。 

1 預設值

注意

裝載僅限設定複本的 SQL Server 執行個體也可以裝載其他資料庫。 它也可以參與作為多個可用性群組的僅限設定資料庫。

需求

  • 具有僅限設定複本的可用性群組中所有複本,都必須是 SQL Server 2017 CU 1 或更新版本。
  • 任何版本的 SQL Server 都可以裝載僅限設定複本,包括 SQL Server Express。
  • 除了主要複本之外,可用性群組至少需要一個次要複本。
  • 僅限設定複本不會計入每個 SQL Server 執行個體的複本數目上限。 SQL Server Standard Edition 最多允許三個複本,SQL Server Enterprise Edition 最多允許 9 個。

考量

  • 每個可用性群組不能有一個以上的僅限設定複本。
  • 僅限設定複本不能是主要複本。
  • 您無法修改僅限設定複本的可用性模式。 若要從僅限設定複本變更為同步或非同步次要複本,請移除僅限設定複本,並新增具有所需可用性模式的次要複本。
  • 僅限設定複本會與可用性群組的中繼資料同步。 沒有使用者資料。
  • 具有一個主要複本和一個僅限設定複本,但沒有次要複本的可用性群組無效。
  • 您無法在 SQL Server Express Edition 的執行個體上建立可用性群組。

了解 SQL Server 的 Pacemaker 資源代理程式

SQL Server 2017 (14.x) 將 sequence_number 引進 sys.availability_groups,以顯示標示為 SYNCHRONOUS_COMMIT 的複本是否為最新狀態。 sequence_number 是依序遞增的 BIGINT,表示本機可用性群組複本相對於可用性群組其餘複本的最新更新狀態。 執行容錯移轉、新增/移除複本以及其他可用性群組作業都會更新這個數字。 這個數字會針對主要複本更新,然後推送到次要複本。 因此最新的次要複本有與主要複本相同的 sequence_number

當 Pacemaker 決定要將複本升級為主要複本時,它會先傳送通知到所有複本以擷取序號並儲存它 (此通知稱為預先升級通知)。 接下來,當 Pacemaker 嘗試將複本升級為主要複本時,如果該複本的序號是所有複本的所有序號中最高的,就只會升級複本本身,否則會拒絕升級作業。 如此一來,只有序號最高的複本可以升級為主要複本,確保不會遺失資料。

升階只有在至少一個可供升級的複本與前一個主要複本具有相同序號的前提下,才能保證運作。 預設行為是讓 Pacemaker 資源代理程式自動設定 REQUIRED_COPIES_TO_COMMIT,以便至少有一個同步認可次要複本是最新狀態,並可作為自動容錯移轉的目標。 透過每個監視動作,REQUIRED_COPIES_TO_COMMIT 的值會計算 (必要時並更新) 為 ('同步認可複本數' / 2)。 之後在容錯移轉時,資源代理程式會要求 (total number of replicas - required_copies_to_commit 複本) 來回應預先升級通知,以便能夠將其中一個複本升級為主要複本。 具有最高 sequence_number 的複本會升級為主要複本。

例如,讓我們考慮具有三個同步複本的可用性群組案例 - 一個主要複本和兩個同步認可次要複本。

  • REQUIRED_COPIES_TO_COMMIT 為 3 / 2 = 1

  • 要回應預先升級動作的必要複本數為 3-1 = 2。 因此,必須要啟動兩個複本,才能觸發容錯移轉。 在主要複本中斷時,如果其中一個次要複本沒有回應,而且只有其中一個次要複本回應預先升級動作,資源代理程式無法保證回應的次要複本具有最高 sequence_number,因此不會觸發容錯移轉。

使用者可以選擇覆寫預設行為,並將可用性群組資源設定為不依照上述自動設定 REQUIRED_COPIES_TO_COMMIT

重要

REQUIRED_COPIES_TO_COMMIT0 時,有遺失資料的風險。 如果是主要複本中斷,資源代理程式就不會自動觸發容錯移轉。 使用者必須決定是否要等候主要複本以復原或手動容錯移轉。

若要將 REQUIRED_COPIES_TO_COMMIT 設定為 0,請執行:

sudo pcs resource update <ag_cluster> required_copies_to_commit=0

相當於使用 crm (對 SLES) 的命令為:

sudo crm resource param <ag_cluster> set required_synchronized_secondaries_to_commit 0

若要還原為預設的計算值,請執行:

sudo pcs resource update <ag_cluster> required_copies_to_commit=

注意

更新資源屬性會導致所有複本停止並重新啟動。 這表示主要複本會暫時降級為次要複本,然後再次升級,因而造成暫時寫入無法使用。 REQUIRED_COPIES_TO_COMMIT 的新值只有在重新啟動複本之後才會設定,因此不會立即執行 pcs 命令。

平衡高可用性與資料保護

上述的預設行為也適用於兩個同步複本 (主要 + 次要) 的情況。 Pacemaker 預設 REQUIRED_COPIES_TO_COMMIT = 1,確保次要複本會保持最新狀態,以取得最高的資料保護。

警告

由於次要複本的計劃性或非計劃性中斷,這會導致主要複本無法使用的風險較高。 使用者可以選擇變更資源代理程式的預設行為,並將 REQUIRED_COPIES_TO_COMMIT 覆寫為 0

sudo pcs resource update <ag1> required_copies_to_commit=0

覆寫後,資源代理程式就會使用 REQUIRED_COPIES_TO_COMMIT 的新設定並停止計算。 使用者必須據以手動進行更新 (比方說,如果他們增加複本的數目)。

下表描述在不同的可用性群組資源設定中主要或次要複本中斷的結果:

可用性群組 - 兩個同步處理複本

設定 主要複本中斷 一個次要複本中斷
REQUIRED_COPIES_TO_COMMIT = 0 使用者必須發出手動 FAILOVER
可能會遺失資料。
新的主要複本是 R/W
主要複本是 R/W,執行時暴露在遺失資料風險下。
REQUIRED_COPIES_TO_COMMIT = 11 叢集自動發出 FAILOVER
無資料遺失。
在先前的主要複本復原並聯結可用性群組作為次要複本之前,新的主要複本將會拒絕所有連線。
主要複本會拒絕所有連線,直到次要複本復原為止。

1 SQL Server 的 Pacemaker 資源代理程式預設行為。

可用性群組 - 三個同步處理複本

設定 主要複本中斷 一個次要複本中斷
REQUIRED_COPIES_TO_COMMIT = 0 使用者必須發出手動 FAILOVER
可能會遺失資料。
新的主要複本是 R/W
主要複本是 R/W
REQUIRED_COPIES_TO_COMMIT = 11 叢集自動發出 FAILOVER
無資料遺失。
新的主要複本是 RW
主要複本是 R/W

1 SQL Server 的 Pacemaker 資源代理程式預設行為。