適用於:Linux 上的 SQL Server
本文提供 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 (14.x) CU 1 開始,可用性群組 CLUSTER_TYPE = EXTERNAL 的高可用性會針對兩個同步複本和僅限設定的複本啟用。 僅限設定複本可以裝載於任何版本的 SQL Server 2017 (14.x) CU1 或更新版本 (包括 SQL Server Express 版本) 上。 僅限設定複本會維護 master 資料庫中可用性群組的設定資訊,但不包含可用性群組中的使用者資料庫。
設定如何影響預設資源設定
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 的可用性群組。
- 三個同步複本
- 兩個同步複本
- 兩個同步複本和僅限設定複本
三個同步複本
此設定包含三個同步複本。 根據預設,它提供高可用性和資料保護。 它也可以提供讀取級別。
具有三個同步複本的可用性群組可提供讀取級別、高可用性和資料保護。 下表描述可用性行為。
| 可用性行為 | 讀取級別 | 高可用性和 資料保護 |
資料保護 |
|---|---|---|---|
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= |
0 | 1 1 | 2 |
| 主要複本中斷 | 自動容錯移轉。 可能會遺失資料。 新的主要複本是 R/W。 | 自動容錯移轉。 新的主要複本是 R/W。 | 自動容錯移轉。 新的主資料庫不可用於讀取或寫入事務,直到以前的主資料庫恢復並作為輔助資料庫重新加入可用性組。 |
| 一個次要複本中斷 | 主要複本是 R/W。 Available secondary 可用於 Reads。 | 主要複本是 R/W。 Available secondary 可用於 Reads。 | 主資料庫不可用於讀取或寫入事務,直到失敗的輔助資料庫恢復並重新加入可用性組。 |
| 兩個次要副本中斷 | 主副本僅可用於讀取,不可用於寫入,直到其中一個輔助副本恢復並重新加入可用性組。 | 主副本僅可用於讀取,不可用於寫入,直到其中一個輔助副本恢復並重新加入可用性組。 | 主副本對於讀取或寫入事務保持不可用,直到所有失敗的輔助副本恢復並重新加入可用性組。 |
| 主要副本中斷和一個次要副本中斷 | 自動容錯移轉。 可能會遺失資料。 新的主副本僅可用於讀取,不可用於寫入,直到其中一個輔助副本恢復並重新加入可用性組。 | 自動容錯移轉。 新的主副本僅可用於讀取和寫入,直到其中一個輔助副本恢復並重新加入可用性組。 | 自動容錯移轉。 新的主副本將不可用於讀取或寫入事務,直到以前的主副本和輔助副本恢復並重新加入可用性組。 |
1 預設值
兩個同步複本
此設定可啟用資料保護。 就像其他可用性群組設定一樣,它可以啟用讀取級別。 兩個同步複本設定並不提供自動高可用性。 兩個複本設定僅適用於 SQL Server 2017 (14.x) RTM,SQL Server 2017 (14.x) 的更高版本 (CU1 和更新版本) 不再支援此設定。
具有兩個同步複本的可用性群組提供讀取級別和資料保護。 下表描述可用性行為。
| 可用性行為 | 讀取級別 | 資料保護 |
|---|---|---|
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= |
0 1 | 1 |
| 主要複本中斷 | 自動容錯移轉。 可能會遺失資料。 新的主要複本是 R/W。 | 自動容錯移轉。 新的主資料庫不可用於讀取或寫入事務,直到以前的主資料庫恢復並作為輔助資料庫重新加入可用性組。 |
| 一個次要複本中斷 | 主要複本是 R/W,執行時暴露在遺失資料風險下。 | 主資料庫不可用於讀取或寫入事務,直到失敗的輔助資料庫恢復並重新加入可用性組。 |
1 預設值
兩個同步複本和僅限設定複本
具有兩個 (或以上) 同步複本和僅限設定複本的可用性群組可提供資料保護,還可能會提供高可用性。 下圖呈現這個架構:
- 將使用者資料同步複寫到次要複本。 它也包含可用性群組的設定中繼資料。
- 同步複寫可用性群組的設定中繼資料。 它不包含使用者資料。
在可用性群組圖表中,主要複本會將設定資料推送至次要複本和僅限設定複本。 次要複本也會接收使用者資料。 僅限設定複本不會接收使用者資料。 次要複本處於同步可用性模式。 僅限設定複本不包含可用性群組中的資料庫,只包含有關可用性群組的中繼資料。 只會以同步方式認可僅限設定複本上的設定資料。
注意
具有僅限設定複本的可用性群組是 SQL Server 2017 (14.x) CU1 的新增功能。 可用性群組中的所有 SQL Server 執行個體都必須是 SQL Server 2017 (14.x) 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 (14.x) 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 是一個單調遞增的 大整數,代表當地可用性群組副本相對於該群組中其他副本的最新同步狀態。
這個數字會在你執行故障轉移、新增或移除副本,以及其他可用性群組操作時更新。
主要副本會更新號碼,然後推送到次要副本。 次要複本如果保持最新,則具有相同的 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_COMMIT 為 0 時,你有資料遺失的風險。 如果主要系統中斷,資源代理不會自動觸發故障切換。 你必須選擇等待主伺服器恢復,或手動切換。
若要將 REQUIRED_COPIES_TO_COMMIT 設定為 0,請執行:
sudo pcs resource update <ag_cluster> required_copies_to_commit=0
使用 CRM (在 SUSE Linux Enterprise Server 上)的等效指令是:
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 = 1
1 |
叢集自動發出 FAILOVER無資料遺失。 在先前的主要複本復原並聯結可用性群組作為次要複本之前,新的主要複本將會拒絕所有連線。 |
主要複本會拒絕所有連線,直到次要複本復原為止。 |
1 SQL Server 的 Pacemaker 資源代理程式預設行為。
可用性群組 - 三個同步處理複本
| 設定 | 主要複本中斷 | 一個次要複本中斷 |
|---|---|---|
REQUIRED_COPIES_TO_COMMIT = 0 |
您必須手動發出 FAILOVER.可能會導致資料遺失。 新的主要複本是 R/W。 |
主要複本是 R/W。 |
REQUIRED_COPIES_TO_COMMIT = 1
1 |
叢集自動發出 FAILOVER。無資料遺失。 新的主要複本是 R/W。 |
主要複本是 R/W。 |
1 SQL Server 的 Pacemaker 資源代理程式預設行為。