antony@notes:~/suse$ cat "Pacemaker-解析.md"
Pacemaker 解析
Pacemaker 解析
1. Introduction
1.1. 甚麼是 Pacemaker
Pacemaker 是一個高可用的 cluster resource manager (叢集資源管理器),通俗的說法就是一個軟體跑在叢集的每一台 node 上,目的是為了保持所需服務的資料完整性和最小化降低(資源)停機的時間。
It is maintained by the ClusterLabs community.
Pacemaker 的核心功能 :
- 檢測節點級 (node-level) 和服務級 (service-level) 故障並從中恢復
- 能夠透過隔離 (fencing) 故障節點來確保資料完整性
- 每一個叢集支援 1 台或多台 node
- 支援多種 resource interface standards (任何可以編寫腳本的內容都可以 clustered)
- 支援 shared storage (不是必須)
- 支援幾乎任何 redundancy 的設定 (active/passive, N+1, etc.)
- 自動複製設定,可以從任何節點更新
- 可以在叢集內指定服務之間的多係,像是 ordering、colocation 和 anti-colocation
- 支援高級的 Service 種類,像是 clones(在多個 node 上的服務同時 active),promotable clones(clones that can run in one of two roles),和 containerized services
- Unified, scriptable cluster management tools
:::info
:bulb: Fencing
Fencing,也稱為 STONITH (Shoot The Other Node In The Head 的縮寫),是確保節點不可能運作服務的能力。這是透過 fence devices (隔離設備)來實現的,例如切斷目標電源的智慧電源開關,或切斷目標對本地網路的存取的智慧網路開關。
Pacemaker 將 fence devices 標示為一種特別的資源。
如果沒有 fencing,叢集無法從某些故障條件(例如無回應的節點)中安全地恢復。
:::
1.1.1. Cluster Architecture
在較高的層次上,叢集可以被視為具有以下部分(它們通常一起稱為 cluster stack):
- Resources: 這就是叢集存在的原因,服務需要保持高可用性。
- Resource agents: 這些腳本或作業系統元件可根據一組資源參數啟動、停止和監控資源。它們在 Pacemaker 和託管服務之間提供了統一的介面。
- Fence agents: 這些腳本可根據 target (目標)和 fence device 參數執行節點 fencing 的操作。
- Cluster membership layer: 該元件提供有關叢集的可靠訊息傳遞、成員資格和法定人數資訊。目前,Pacemaker 支援 Corosync 作為該層。
- Cluster resource manager: Pacemaker 是處理叢集中發生的事件並做出反應的大腦。這些事件可能包括節點加入或離開叢集;故障、維護或規劃活動導致的資源事件;以及其他管理作業。為實現所需的可用性,Pacemaker 可啟動和停止資源並 fence 節點。
- Cluster tools: 它們為使用者提供與叢集互動的介面。提供各種命令列和圖形 (GUI) 介面。
大多數託管服務本身並不具備叢集感知能力。不過,許多流行的開源叢集檔案系統都使用通用的 Distributed Lock Manager(DLM),它直接使用 Corosync 的訊息傳遞和成員功能,以及 Pacemaker 的 fence 節點功能。
What is a Distributed Lock Manager? A Distributed Lock Manager (DLM) is a software component that controls and synchronizes access to shared resources across multiple nodes in a distributed computing system. It ensures that no two processes access or change shared data simultaneously, thereby preventing issues like data corruption. DLMs are widely employed in databases, distributed file systems, and other data management systems.

1.1.2. Pacemaker Architecture
Pacemaker 本身由多個一起工作 Daemons 組成
pacemakerdpacemaker-attrdpacemaker-basedpacemaker-controldpacemaker-execdpacemaker-fencedpacemaker-schedulerd

Pacemaker 的主程序(pacemakerd)會啟動所有其他背景程序,並在它們意外退出時重新啟動。
叢集資訊庫(Cluster Information Base,CIB)是叢集設定檔以及所有節點和資源狀態的 XML 表示形式。 CIB manager(pacemaker-based)負責保持整個叢集的 CIB 同步,並處理修改 CIB 的請求。
attribute manager(pacemaker-attrd)維護所有節點的屬性 (attributes) 資料庫,使其在整個叢集中保持同步,並處理修改這些屬性的請求。這些屬性通常記錄在 CIB 中。
scheduler(pacemaker-schedulerd)將 CIB 的快照作為輸入,確定需要採取哪些行動才能實現叢集的理想狀態。
local executor(pacemaker-execd)處理在本機叢集節點上執行 resource agents 程式的請求,並傳回結果。
fencer(pacemaker-fenced)處理 fence 節點的請求。給定一個目標節點後,fencer 會決定哪個叢集節點應執行哪個 fencing device(s),並呼叫必要的 fencing agents(直接呼叫或透過向其他節點上的 fencer 對節點發出請求),然後傳回結果。
controller(pacemaker-controld)是 Pacemaker 的 coordinator (協調器),負責維護群集成員的一致視圖並協調所有其他元件。
Pacemaker 透過選舉其中一個 controller 作為 Designated Controller(DC)來集中管理叢集決策。如果當選的 DC 程序(或其所在的節點)發生故障,新的 DC 程序會迅速建立。 DC 透過取得 CIB 的目前快照對叢集事件做出回應,並將其回饋給 scheduler,然後要求 executors(直接在本機節點上執行,或透過向其他節點上的 controller 對等節點發出請求)和 fencer 執行任何必要的操作。
1.1.3. Node Redundancy Designs
Pacemaker 幾乎支援任何 node redundancy configuration,包含 Active/Active, Active/Passive, N+1, N+M, N-to-1, 和 N-to-N.
在許多情況下,使用 Pacemaker 和 DRBD 的兩個(或更多)節點的 Active/Passive 叢集是一種經濟高效的高可用性解決方案。其中一個節點提供所需的服務,如果它發生故障,另一個節點將接替它。