Linux 上適用於可用性群組和容錯移轉叢集執行個體的 Pacemaker
適用於:SQL Server - Linux
從 SQL Server 2017 (14.x) 開始,Linux 和 Windows 都支援 SQL Server。 如同以 Windows 為基礎的 SQL Server 部署,SQL Server 資料庫和執行個體必須在 Linux 下具有高可用性。 本文會說明基本資訊以讓您了解 Pacemaker 與 Corosync,並說明如何針對 SQL Server 設定來進行規劃和部署。
HA 附加元件/延伸模組的基本概念
所有目前支援的發行版本都會隨附高可用性附加元件/延伸模組,其會以 Pacemaker 叢集堆疊為基礎。 此堆疊結合兩個主要元件:Pacemaker 和 Corosync。 堆疊的所有元件如下:
- Pacemaker。 核心叢集元件,會協調叢集電腦之間的各種工作。
- Corosync。 一種架構和一組 API,可提供仲裁、能夠重新啟動失敗程序等動作。
- libQB。 提供記錄等功能。
- 資源代理程式。 已提供的特有功能,讓應用程式能夠與 Pacemaker 整合。
- 隔離代理程式。 指令碼/功能,可協助隔離節點,並在發生問題時加以處理。
注意
叢集堆疊在 Linux 世界中通常會稱為 Pacemaker。
此解決方案在某些方面很類似,但在許多方面不同於使用 Windows 部署叢集設定。 在 Windows 中,叢集的可用性形式 (稱為 Windows Server 容錯移轉叢集 (WSFC)) 內建於作業系統中,而能夠建立 WSFC 的功能 (容錯移轉叢集) 預設為停用。 在 Windows 中,AG 和 FCI 建置於 WSFC 之上,而且因為 SQL Server 所提供的特定資源 DLL 而共用緊密整合。 這種緊密結合的解決方案基本上是可行的,因為它全都來自一個廠商。
在 Linux 上,雖然每個支援的發行版本都有可用的 Pacemaker,但每個發行版本都可以自訂,而且實作和版本會有些微不同。 此文章中的指示將反映部分差異。 叢集層是開放原始碼,因此,即使它隨附於發行版本,也不會以 WSFC 在 Windows 底下的相同方式緊密整合。 這就是 Microsoft 提供 mssql-server-ha 的原因,因此 SQL Server 和 Pacemaker 堆疊可以提供接近 Windows 底下但不完全相同的 AGs 和 FCI 體驗。
如需有關 Pacemaker 的完整文件,包括針對 RHEL 和 SLES 提供所有內容完整參考資訊的更深入說明:
Ubuntu 沒有可用性指南。
如需整個堆疊的詳細資訊,另請參閱 ClusterLabs 網站上的官方 Pacemaker 文件頁面 \(英文\)。
Pacemaker 概念和詞彙
本節記載 Pacemaker 實作的常見概念和術語。
節點
節點是參與叢集的伺服器。 Pacemaker 叢集原本最多支援 16 個節點。 如果 Corosync 未在其他節點上執行,則可超過此數目,但 Corosync 是 SQL Server 的必要項。 因此,叢集可針對任何 SQL Server 型設定擁有的節點數目上限為 16;這是 Pacemaker 限制,而且不會針對 SQL Server 所加諸之 AG 或 FCI 的最大限制執行任何動作。
資源
WSFC 和 Pacemaker 叢集具備資源的概念。 資源是在叢集內容中執行的特定功能,例如磁碟或 IP 位址。 例如,在 Pacemaker 底下,FCI 和 AG 資源均可建立。 這與 WSFC 中的作業並無任何不同,在設定 AG 時,您會在其中看到適用於 FCI 或 AG 資源的 SQL Server 資源,但由於 SQL Server 與 Pacemaker 整合方式的基礎差異而不會完全相同。
Pacemaker 具有標準和複製資源。 複製資源是在所有節點上同時執行的資源。 基於負載平衡目的,在多個節點上執行的 IP 位址即為一例。 針對 FCI 建立的任何資源都會使用標準資源,因為在任何指定的時間中,只有一個節點可以裝載 FCI。
注意
無偏差通訊
本發行項包含字詞「奴隸」的參考;Microsoft 將此內容中使用該字詞視為有冒犯性。 因為該字詞目前出現在軟體中,所以也會出現在本發行項中。 當軟體移除該字詞時,我們也會將其從發行項中移除。
建立 AG 時,它需要一個特殊形式的複製資源 (稱為多狀態資源)。 當 AG 只有一個主要複本時,AG 本身會在其設定來處理的所有節點上執行,而且可能允許唯讀存取之類的動作。 由於這是節點的「即時」使用方式,因此,資源具有兩種狀態的概念:已升階 (以前稱為主要) 和已取消升階 (以前稱為從屬)。 如需詳細資訊,請參閱多狀態資源:含有多重模式的資源。
資源群組/集合
類似於 WSFC 中的角色,Pacemaker 叢集具有資源群組的概念。 資源群組 (在 SLES 中稱為「集合」) 是一起搭配運作的,且可作為單一單位從一個節點容錯移轉到另外一個節點的資源集合。 資源群組不能包含設為已升階或已取消升階的資源;因此,資源群組無法用於 AG。 雖然資源群組可用於 FCI,但這通常不是建議的設定。
條件約束
WSFC 具有各種適用於資源的參數以及相依性之類的項目,這讓 WSFC 能夠得知兩個不同資源之間的父/子關聯性。 相依性只是一個規則,可用來告知 WSFC 必須先將哪些資源上線。
Pacemaker 叢集沒有相依性的概念,但有限制式。 有三種限制式:共置、位置和排序。
- 共置限制式會強制兩個資源是否應該在相同的節點上執行。
- 位置限制式會告知 Pacemaker 叢集,資源是否可以執行。
- 排序限制式會告知 Pacemaker 叢集,應該啟動資源的順序。
注意
資源群組中的資源不需要共置限制式,因為那些限制全都會被視為單一單位。
仲裁、隔離代理程式和 STONITH
概念上,Pacemaker 底下的仲裁會與 WSFC 類似。 整個叢集仲裁機制的目的就是要確保叢集能夠保持正常運作。 WSFC 和適用於 Linux 發行版本的 HA 附加元件都具有投票的概念,其中每個節點都會計入仲裁。 您希望讓大部分的投票運作,否則,在最糟的情況下,叢集將會關閉。
與 WSFC 不同的是,沒有任何見證資源可與仲裁搭配使用。 就像 WSFC 一樣,其目標是將投票者的數目保持為奇數。 仲裁設定對於 AG 的考量與 FCI 的不一樣。
WSFC 會監視參與的節點狀態,並在發生問題時加以處理。 較新版的 WSFC 提供如下功能:隔離不正常或無法使用的節點 (節點未開啟、網路通訊已關閉等)。 在 Linux 端,此類型的功能是由隔離代理程式所提供的。 此概念有時稱為隔離。 不過,這些隔離代理程式通常專屬於部署,往往會由硬體廠商和部分軟體廠商提供,例如,提供 Hypervisor 的廠商。 例如,VMware 提供的隔離代理程式可用於使用 vSphere 虛擬化的 Linux VM。
仲裁和隔離會繫結至另一個名為 STONITH (或 Shoot the Other Node in the Head) 的概念。 STONITH 在所有 Linux 發行版本上必須有支援的 Pacemaker 叢集。 如需詳細資訊,請參閱 Red Hat 高可用性叢集中的隔離 \(英文\) (RHEL)。
corosync.conf
corosync.conf
檔案包含叢集的設定。 其位於 /etc/corosync
中。 在正常的日常作業過程中,如果叢集已正確設定,則不需編輯此檔案。
叢集記錄檔位置
Pacemaker 叢集的記錄檔位置會因發行版本而有所不同。
- RHEL 和 SLES:
/var/log/cluster/corosync.log
- Ubuntu:
/var/log/corosync/corosync.log
若要變更預設的記錄檔位置,請修改 corosync.conf
。
規劃適用於 SQL Server 的 Pacemaker 叢集
本節將討論適用於 Pacemaker 叢集的重要規劃點。
針對 SQL Server 將 Linux 型 Pacemaker 叢集虛擬化
使用虛擬機器來為 AG 和 FCI 部署 Linux 型 SQL Server 部署,會由與其 Windows 型對應項目相同的規則所涵蓋。 在硬體虛擬化環境中執行的 Microsoft SQL Server 產品支援原則中有 Microsoft 提供的一組用於支援虛擬化 SQL Server 部署的基本規則。 由於平台本身的差異,不同的 Hypervisor (例如 Microsoft 的 Hyper-V 和 VMware 的 ESXi) 可能會有不同的差異。
當它進入虛擬化的 AG 和 FCI 時,請確定已針對指定 Pacemaker 叢集的節點設定反親和性。 在 AG 或 FCI 設定中設定以取得高可用性時,裝載 SQL Server 的 VM 應該永遠不會在相同的 Hypervisor 主機上執行。 例如,如果已部署兩個節點的 FCI,則「至少」必須有三部 Hypervisor 主機,以便在某部主機發生故障時,讓其中一部裝載節點的 VM 能夠在某處執行,特別是使用「即時移轉」或 vMotion 之類的功能時。
如需 Hyper-V 檔,請參閱 使用客體叢集取得高可用性
網路
與 WSFC 不同,Pacemaker 不需要專用名稱,或至少一個固定 IP 位址以供 Pacemaker 叢集本身使用。 AG 和 FCI 將需要 IP 位址 (請參閱各自的文件,以取得詳細資訊),但不需要名稱,因為沒有網路名稱資源。 SLES 確實允許基於系統管理目的來設定 IP 位址,但並非必要,因為可以在建立 Pacemaker 叢集中查看它。
就像 WSFC 一樣,Pacemaker 偏好使用多餘的網路功能,亦即具有個別 IP 位址的不同網路卡 (實體的 NIC 或 pNIC)。 就叢集設定而言,每個 IP 位址都有所謂自己的通道。 不過,就像現今的 WSFC,許多實作都會虛擬化或位於公用雲端,而只會將單一虛擬化的 NIC (vNIC) 呈現給伺服器。 如果所有 pNIC 和 vNIC 都連線到相同的實體或虛擬交換器,則網路層就不會有任何真正的冗餘,因此,設定多個 NIC 對虛擬機器而言就是一種假像。 網路冗餘通常內建於 Hypervisor 以用來虛擬化部署,而且一定會內建於公用雲端中。
相較於 WSFC,與多個 NIC 和 Pacemaker 的差異在於 Pacemaker 允許相同子網上的多個 IP 位址,但 WSFC 則不允許。 如需多個子網和 Linux 叢集的詳細資訊,請參閱設定多個子網路 Always On 可用性群組和容錯移轉叢集執行個體一文。
仲裁和 STONITH
仲裁設定和需求與 AG 或 FCI 特定的 SQL Server 部署有關。
支援的 Pacemaker 叢集需要 STONITH。 使用發行版本的文件來設定 STONITH。 適用於 SLES 之以儲存體為基礎的隔離 \(英文\) 即為一例。 針對以 ESXI 為基礎的解決方案,還有適用於 VMware vCenter 的 STONITH 代理程式。 如需詳細資訊,請參閱適用於 VMware VM VCenter SOAP 隔離的 STONITH 外掛程式代理程式 (非官方) \(英文\)。
互通性
本節記載 Linux 型叢集如何與 WSFC 或其他 Linux 發行版本互動。
WSFC
目前,沒有任何直接的方式可讓 WSFC 和 Pacemaker 叢集一起運作。 這表示,沒有任何方式能夠建立跨 WSFC 和 Pacemaker 運作的 AG 或 FCI。 不過,有兩個互通性解決方案,這兩者都是針對 AG 設計的。 FCI 可以參與跨平台設定的唯一方式是,在下列其中一個案例中以執行個體形式來參與:
- 叢集類型為「無」的 AG。 如需詳細資訊,請參閱 Windows 可用性群組文件。
- 分散式 AG 是一種特殊類型的可用性群組,可讓您將兩個不同的 AG 設定為它們自己的可用性群組。 如需分散式 AG 的詳細資訊,請參閱分散式可用性群組一文。
其他 Linux 發行版本
在 Linux 上,Pacemaker 叢集的所有節點都必須位於相同的發行版本上。 例如,這表示 RHEL 節點不能屬於具有 SLES 節點的 Pacemaker 叢集。 此問題的主要原因如先前所述:發行版本可能有不同的版本和功能,因此無法正常運作。 混合發行版本與混合 WSFC 和 Linux 的故事相同:使用「無」或分散式 AG。