適用於:Linux 上的 SQL Server
在可用性群組 (AG) 的上下文中,可用性複本的主要角色和次要角色通常可以在稱為故障轉移的程序中互換。 容錯移轉共有三種形式,包括自動容錯移轉 (不會遺失資料)、規劃的手動容錯移轉 (不會遺失資料),以及強制手動容錯移轉 (可能會遺失資料),這種形式通常稱為「強制容錯移轉」。 自動及經過規劃的手動容錯移轉會保留所有資料。 AG 會在可用性複本層級容錯移轉。 亦即 AG 會容錯移轉至其中一個次要複本 (目前的容錯移轉目標)。
如需了解故障轉移的背景資訊,請參閱故障轉移及故障轉移模式 (Always On 可用性群組)。
在 SQL Server 2025 (17.x) 的累積更新 (CU) 3 和後續版本中,mssql-server-ha 套件提供了適用於 Red Hat Enterprise Linux (RHEL) 和 Ubuntu 的新版 Pacemaker HA 代理程式 v2。
Pacemaker HA 代理 v2 相較於前一代代理,帶來了可靠性與效能的提升,包括:
提升故障切換效能,以縮短計畫內外的故障切換時間。
支援 TLS 1.3,用於 Pacemaker 叢集與 SQL Server 之間的通訊。
Pacemaker HA agent v2 目前還在預覽階段。 現有的 Pacemaker HA 代理程式(v1)仍完整支援生產部署。
手動容錯移轉
使用叢集管理工具來容錯移轉外部叢集管理員所管理的 AG。 例如,如果解決方案使用 Pacemaker 來管理 Linux 叢集,則請使用 pcs 在 Red Hat Enterprise Linux (RHEL) 或 Ubuntu 上執行手動容錯移轉。 在 SUSE Linux Enterprise Server (SLES) 上,使用 crm。 (自 SQL Server 2025(17.x)起,SUSE Linux Enterprise Server (SLES) 不再支援。)
Important
在正常作業下,請勿使用 Transact-SQL 或 SQL Server 管理工具 (例如 SSMS 或 PowerShell) 進行容錯移轉。 當 CLUSTER_TYPE = EXTERNAL 時,FAILOVER_MODE 的唯一可接受值為 EXTERNAL。 使用這些設定,所有手動或自動容錯移轉動作都會由外部叢集管理員執行。 如需強制容錯移轉(可能導致資料遺失)的指示,請參閱強制容錯移轉。
手動故障切換步驟
若要進行容錯移轉,將成為主要複本的次要複本必須是同步的。 如果次要複本為非同步,請變更可用性模式。
以手動方式進行兩個步驟的容錯移轉。
首先,手動將 AG 資源從擁有該資源的叢集節點移至新節點,以進行容錯移轉。
叢集會將 AG 資源進行故障轉移並新增位置限制。 此條件約束會將資源設定為在新的節點上執行。 請移除此條件約束,以便在未來成功進行容錯移轉。
其次,移除位置條件約束。
步驟 1。 手動進行容錯移轉,移動可用性群組資源
若要將名為 ag_cluster 的 AG 資源手動容錯移轉到名為 nodeName2 的叢集節點,請執行適用於您的發行版本的命令:
RHEL/Ubuntu 範例
sudo pcs resource move ag_cluster-master nodeName2 --master --lifetime=30SSLES 範例
crm resource migrate ag_cluster nodeName2 --lifetime=30S
當您使用 --lifetime 選項時,為了移動資源而建立的位置條件約束本質上為暫時性,且在上一個範例中維持 30 秒有效狀態。
暫時條件約束不會自動清除,且可能會顯示在條件約束清單中,但顯示為到期的條件約束。 到期的條件約束不會影響 Pacemaker 叢集的故障切換行為。 若您在移動資源時未使用 --lifetime 選項,則應移除自動新增的位置條件約束,如以下章節所示。
步驟 2。 移除位置條件約束
在手動容錯移轉期間,pcs 命令 move 或 crm 命令 migrate 會針對要放置在新目標節點上的資源新增位置條件約束。 若要查看新的條件約束,請在手動移動資源後執行下列命令:
RHEL/Ubuntu 範例
sudo pcs constraint list --fullSLES 範例
crm config show這是一個因手動切換造成而建立的限制範例。
Enabled on: Node1 (score:INFINITY) (role: Master) (id:cli-prefer-ag_cluster-master)Note
在 Red Hat Enterprise Linux 8.x 和 Ubuntu 18.04 上的 Pacemaker 叢集中,AG 資源的名稱可能類似於 ag_cluster-clone,因為資源的命名方式已經演變為使用可推動的複本。
RHEL/Ubuntu 範例
在下列命令中,
cli-prefer-ag_cluster-master是需要移除的條件約束識別碼。sudo pcs constraint list --full會傳回此識別碼。sudo pcs resource clear ag_cluster-master或
sudo pcs constraint remove cli-prefer-ag_cluster-master或者,您也可以在單一行中移動和清除自動產生的條件約束,如下所示。 下列範例會根據 Red Hat Enterprise Linux 8.x 使用 clone 術語。
sudo pcs resource move ag_cluster-clone --master nodeName2 && sleep 30 && sudo pcs resource clear ag_cluster-cloneSLES 範例
在下列命令中,
cli-prefer-ms-ag_cluster是條件約束的識別碼。crm config show會傳回此識別碼。crm configure delete cli-prefer-ms-ag_cluster commit
Note
自動容錯移轉不會增加位置限制,因此不需要清理。
如需詳細資訊,請參閱:
強制故障切換
強制容錯移轉僅用於災害復原。 在此情況下,因為主要資料中心已關閉,所以您無法使用叢集管理工具進行容錯移轉。 如果您強制容錯移轉至非同步的次要複本,有些資料可能會遺失。 只有在您必須立即還原 AG 的服務且願意承擔遺失資料的風險時,才強制執行容錯移轉。
如果您無法使用叢集管理工具與叢集進行互動 (例如,如果叢集由於主要資料中心發生嚴重損壞事件而沒有回應),您可能必須強制容錯移轉以略過外部叢集管理員。 不建議將此程序用於一般作業,因為它會有造成資料遺失的風險。 當叢集管理工具無法執行容錯移轉動作時,請使用此程序。 在功能上,此程序類似於在 Windows 的 AG 上執行強制手動容錯移轉。
此強制容錯移轉處理程序專屬於 Linux 上的 SQL Server。
驗證叢集不再管理 AG 資源。
在目標叢集節點上將資源設定為非受控模式。 此命令會指示資源代理程式停止資源監視和管理。 例如:
sudo pcs resource unmanage <resourceName>如果嘗試將資源模式設定為非受控模式失敗,請刪除該資源。 例如:
sudo pcs resource delete <resourceName>Note
當你刪除一個資源時,也會刪除所有相關的限制。
在裝載次要複本的 SQL Server 執行個體上設定工作階段內容變數
external_cluster。EXECUTE sp_set_session_context @key = N'external_cluster', @value = N'yes';使用 Transact-SQL 為 AG 進行容錯移轉。 在下列範例中,以您的 AG 名稱取代
<MyAg>。 連線到裝載目標次要複本的 SQL Server 執行個體,並執行下列命令:ALTER AVAILABILITY GROUP <MyAg> FORCE_FAILOVER_ALLOW_DATA_LOSS;在強制切換之後,請先讓 AG 回復至健康狀態,再重新啟動叢集資源的監視和管理,或者重建 AG 資源。 請查看強制容錯移轉後的重要工作。
請重新啟動叢集資源的監視和管理:
若要重新啟動叢集資源監視和管理,請執行下列命令:
sudo pcs resource manage <resourceName> sudo pcs resource cleanup <resourceName>如果您刪除了叢集資源,請予以重新建立。 若要重新建立叢集資源,請遵循建立可用性群組資源中的指示。
Important
請不要將上述步驟用於災害復原演練,因為其可能會有造成資料遺失的風險。 而是將非同步複本變更為同步,並遵循一般手動容錯移轉的指示。
資料庫層級監控與故障轉移觸發
針對 CLUSTER_TYPE=EXTERNAL,相較於 WSFC,容錯移轉觸發語意會有所不同。 當 AG 位於 WSFC 的 SQL Server 執行個體上時,從資料庫的 ONLINE 狀態轉換時,會導致 AG 健康狀態回報錯誤。 因此,叢集管理員會觸發故障轉移動作。 在 Linux 上,SQL Server 執行個體無法與叢集通訊。 監視資料庫健康狀態的作業是「由外而內」進行。 如果使用者選擇進行資料庫層級的容錯移轉監視和容錯移轉 (透過在建立 AG 時設定 DB_FAILOVER=ON 選項),叢集會在每次執行監視動作時,檢查資料庫狀態是否為 ONLINE。 叢集會查詢 sys.databases 中的狀態。 如果狀態不同於 ONLINE,並且符合自動切換條件的話,系統會自動執行切換。 容錯移轉的實際時間取決於監控動作的頻率,以及在 sys.databases. 中更新的資料庫狀態。
自動容錯移轉需要至少一個同步複本。
相關內容
- 為 SQL Server 可用性群組配置 Red Hat Enterprise Linux Pacemaker 叢集
- 配置 SUSE Linux Enterprise Server Pacemaker 叢集以支援 SQL Server 可用性群組
- 為 SQL Server 可用性群組配置 Ubuntu Pacemaker 叢集
參與編輯 SQL 文件
您知道您可以自行編輯 SQL 內容嗎? 如果這麼做,您不僅能協助改善我們的文件,還能被列為該頁面的貢獻者。
欲了解更多資訊,請參閱 編輯Microsoft學習文件。