跳至內容跳至頁面導覽:上一頁 [access key p]/下一頁 [access key n]
documentation.suse.com / SUSE Linux Enterprise High Availability Extension 文件 / 管理指南 / 組態和管理 / 組態和管理基礎
適用範圍 SUSE Linux Enterprise High Availability Extension 15 SP4

6 組態和管理基礎

HA 叢集的主要目的是管理使用者服務。Apache Web 伺服器或資料庫便是使用者服務的典型範例。從使用者的角度來看,命令這些服務執某些特定操作,它們就會按要求執行。不過,對於叢集而言,它們只是可以啟動或停止的資源 — 服務的性質與叢集無關。

本章介紹一些設定資源和管理叢集時需瞭解的基本概念。後續章節將介紹如何使用 High Availability Extension 提供的各種管理工具執行主要的組態與管理任務。

6.1 使用案例情境

叢集一般分為以下兩種類別:

  • 雙節點叢集

  • 包含兩個以上節點的叢集。這通常表示節點數是奇數。

新增不同的拓撲可以衍生不同的使用案例。下面是最常見的使用案例:

位於一個位置的雙節點叢集

組態::FC SAN 或類似的共用儲存,第 2 層網路。

使用情境::內嵌式叢集,注重服務的高可用性,而不是實現資料備援來進行資料複製。例如,此類設定可用於廣播電台或裝配生產線控制器。

位於兩個位置的雙節點叢集 (使用最為廣泛)

組態::對稱的延伸叢集,FC SAN,以及跨兩個位置的第 2 層網路。

使用情境::經典的延伸叢集,注重服務的高可用性和本地資料備援。用於資料庫和企業資源規劃。過去數年來最熱門的設定之一。

位於三個位置的奇數數量的節點

組態::2×N+1 個節點,FC SAN 跨兩個主要位置第三個輔助站點不部署 FC SAN,而是當成多數仲裁者使用。第 2 層網路至少跨兩個主要位置。

使用情境::經典的延伸叢集,注重服務的高可用性和資料備援。例如資料庫和企業資源規劃。

6.2 最低節點數判斷

當一個或多個節點與叢集其餘節點間的通訊失敗時,就會發生叢集分割。這些節點只能與同一分割區中的其他節點通訊,並不知道被隔開的節點的存在。如果叢集分割區具有多數節點 (或投票),則將其定義為具有最低節點數 (即達到法定數量)。透過最低節點數計算來獲得此結果。若要圍籬區隔,就必須達到最低節點數。

SUSE Linux Enterprise High Availability Extension 11 與 SUSE Linux Enterprise High Availability Extension 15 的最低節點數計算方式有所不同。在 SUSE Linux Enterprise High Availability Extension 11 中,由 Pacemaker 計算最低節點數。從 SUSE Linux Enterprise High Availability Extension 12 開始,Corosync 可以直接處理雙節點叢集的最低節點數,而無需變更 Pacemaker 組態。

最低節點數計算方式受以下因素的影響:

叢集節點數

為使服務保持執行狀態,包含兩個以上節點的叢集依賴最低節點數 (多數投票數) 來解決叢集分割區。根據以下公式,您可以計算叢集正常運作所需的最小可作業節點數:

N ≥ C/2 + 1

N = minimum number of operational nodes
C = number of cluster nodes

例如,五節點叢集至少需要三個可作業節點 (或兩個可以容錯移轉的節點)。

我們強烈建議使用雙節點叢集或奇數數量的叢集節點。雙節點叢集適合跨兩個站點的延伸設定。所含節點數為奇數的叢集可以在單個站點上建構,也可以分散在三個站點之間。

Corosync 組態

Corosync 是一個訊息和成員資格層,具體請參閱第 6.2.4 節 「雙節點叢集的 Corosync 組態」第 6.2.5 節 「N 節點叢集的 Corosync 組態」

6.2.1 全域叢集選項

全域叢集選項控制叢集在遇到特定情況時的運作方式。它們分為不同的組,可透過 Hawk2 和 crm 外圍程序等叢集管理工具來檢視和修改。

一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數:

6.2.2 全域選項 no-quorum-policy

此全域選項定義在叢集分割區沒有達到最低節點數 (節點多數不是該分割區的一部分) 時如何運作。

允許的值:

ignore

若將 no-quorum-policy 設定為 ignore,可使叢集的行為如同它具有最低節點數一般。它仍會進行資源管理。

在 SLES 11 中,建議對雙節點叢集使用此設定。此選項從 SLES 12 開始已過時。Corosync 依據組態和條件為叢集節點或單個節點提供最低節點數 — 或者不提供最低節點數。

對於雙節點叢集,唯一有意義的行為就是永遠像失去仲裁一樣來做出回應。第一個步驟永遠應該是嘗試圍籬區隔遺失的節點。

freeze

如果達不到最低節點數,叢集分割區便會凍結。資源管理將繼續:執行中的資源不會停止 (但是可能會重新啟動,以便監控事件),但是受影響的分割區內不會再啟動其他資源。

此設定適合某些資源依賴與其他節點之通訊的叢集 (例如,OCFS2 掛接)。在這種情況下,預設設定 no-quorum-policy=stop 不起作用,因為它會造成既無法停止資源,又無法連接對等節點的狀況。相反,任何停止這些資源的嘗試最終都會逾時,並會造成停止失敗,同時觸發升級復原與圍籬區隔。

stop (預設值)

如果不符合最低節點數規則,受影響的叢集分割區中的所有資源都會依序停止。

suicide

如果達不到最低節點數,受影響叢集分割區中的所有節點都會被圍籬區隔。此選項只能與 SBD 結合使用,具體請參閱第 11 章 「儲存保護和 SBD

6.2.3 全域選項 stonith-enabled

此全域選項定義是否套用圍籬區隔,以允許 STONITH 裝置關閉失敗的節點以及其上資源無法停止的節點。此全域選項預設為 true,因為正常的叢集運作需要使用 STONITH 裝置。依據預設值,如果未定義 STONITH 資源,叢集將拒絕啟動任何資源。

如果出於某種原因需要停用圍籬區隔,請將 stonith-enabled 設定為 false,但請注意,這樣做會影響您產品的支援狀態。此外,在 stonith-enabled="false" 的情況下,分散式鎖定管理員 (DLM) 等資源以及相依於 DLM 的所有服務 (例如 lvmlockd、GFS2 和 OCFS2) 都將無法啟動。

重要
重要:不支援沒有 STONITH 的組態

系統不支援沒有 STONITH 的叢集。

6.2.4 雙節點叢集的 Corosync 組態

使用開機程序檔時,Corosync 組態包含一個 quorum 區段,其中包含以下選項:

範例 6.1︰ 雙節點叢集的 Corosync 組態摘要
quorum {
   # Enable and configure quorum subsystem (default: off)
   # see also corosync.conf.5 and votequorum.5
   provider: corosync_votequorum
   expected_votes: 2
   two_node: 1
}

與 SUSE Linux Enterprise 11 不同,SUSE Linux Enterprise 12 及更新版本中的 votequorum 子系統由 Corosync 版本 2.x 提供支援。這表示不得使用 no-quorum-policy=ignore 選項。

當設定了 two_node: 1 時,預設會自動啟用 wait_for_all 選項。如果未啟用 wait_for_all,則叢集應在兩個節點上平行啟動。否則,第一個節點將對缺少的第二個節點執行啟動圍籬區隔。

6.2.5 N 節點叢集的 Corosync 組態

如果不使用雙節點叢集,我們強烈建議使用奇數數量的節點來構成 N 節點叢集。在最低節點數組態方面,您具有以下選擇:

  • 使用 crm cluster join 指令新增更多節點,或

  • 手動調整 Corosync 組態。

如果您要手動調整 /etc/corosync/corosync.conf,請使用以下設定:

範例 6.2︰ N 節點叢集的 Corosync 組態摘要
quorum {
   provider: corosync_votequorum 1
   expected_votes: N 2
   wait_for_all: 1 3
}

1

使用 Corosync 的最低節點數服務

2

預期投票數。可以在 quorum 區段中提供此參數,或者在提供了 nodelist 區段的情況下由系統自動計算此參數。

3

啟用「等待所有節點」(WFA) 功能。如果啟用了 WFA,僅在所有節點可見之後,叢集才會首次達到法定數量。若要避免啟動時出現某些競爭情況,可以將 wait_for_all 設定為 1。例如,在五節點叢集中,每個節點有一個投票,因此,expected_votes 設定為 5。如果三個或更多個節點彼此可見,則叢集分割區將達到法定數量,可以開始運作。

6.3 叢集資源

做為叢集管理員,您需要為您叢集中的伺服器上執行的所有資源或應用程式建立叢集資源。叢集資源可包括網站、電子郵件伺服器、資料庫、檔案系統、虛擬機器,以及其他您希望使用者隨時都可以存取的伺服器型應用程式或服務。

6.3.1 資源管理

若想在叢集中使用某項資源,必須先對其進行設定。例如,如果想要使用 Apache 伺服器做為叢集資源,請先設定 Apache 伺服器並完成 Apache 組態設定,然後才能在叢集中啟動各個資源。

如果資源具有特定的環境要求,請確保這些要求在所有叢集節點上均得到滿足並且一致。此類組態並非由 High Availability Extension 管理。您必須自行管理。

注意
注意:不要操作叢集所管理的服務

當您正透過 High Availability Extension 管理某個資源時,就不能再啟動或停止該資源 (例如,不能在叢集之外手動啟動或停止,或者在開機或重新開機時啟動或停止)。High Availability Extension 軟體負責所有服務的啟動或停止動作。

如果服務已在叢集控制下執行,而您需要執行測試或維護任務,請務必先將資源、節點或整個叢集置於維護模式,然後再對其進行任何手動處理。如需詳細資料,請參閱第 17.2 節 「用於維護任務的不同選項」

在叢集中設定資源之後,可以使用叢集管理工具手動啟動、停止、清理、移除或移轉資源。以下為如何使用偏好的叢集管理工具執行這些操作的詳細資料:

重要
重要:資源 ID 和節點名稱

叢集資源和叢集節點的名稱應該不同。否則 Hawk2 將會失敗。

6.3.2 支援的資源代理程式類別

對於每個新增的叢集資源,都需要定義資源代辦所遵循的標準。資源代辦會提取它們所提供的服務並向叢集提供準確的狀態,這樣叢集便可不理會其所管理的資源。當接收到啟動、停止或監控指令時,叢集會依賴資源代辦來做出恰當的反應。

通常,資源代辦採用的是外圍程序檔的形式。High Availability Extension 支援以下類別的資源代辦:

Open Cluster Framework (OCF) 資源代理程式

OCF RA 代辦最適合與高可用性搭配使用,特別是在您需要可升級複製品資源或特殊監控功能的情況下。代辦通常位於 /usr/lib/ocf/resource.d/提供者/ 內。它們的功能類似於 LSB 程序檔。但是,組態始終使用環境變數進行設定,因此它們更容易接受並處理參數。OCF 規格對於動作必須傳回的離開碼有著嚴格的定義,請參閱第 9.3 節 「OCF 傳回代碼和故障復原」。叢集完全遵循這些規格。

所有 OCF 資源代辦都必須至少含有動作 startstopstatusmonitormeta-datameta-data 動作可取回有關如何設定代辦的資訊。例如,如果您要詳細瞭解提供者 heartbeatIPaddr 代辦,可以使用以下指令:

OCF_ROOT=/usr/lib/ocf /usr/lib/ocf/resource.d/heartbeat/IPaddr meta-data

輸出的是 XML 格式的資訊,分為多個區段,包括代辦的一般描述、可用參數和可用動作。

您也可以使用 crmsh 來檢視關於 OCF 資源代辦的資訊。如需詳細資料,請參閱第 8.1.3 節 「顯示有關 OCF 資源代理程式的資訊」

Linux Standards Base (LSB) 程序檔

LSB 資源代辦通常由作業系統/套裝作業系統提供,位於 /etc/init.d。若要與叢集一起使用,它們必須符合 LSB init 程序檔規格。例如,它們必須執行幾個動作,至少包含 startstoprestartreloadforce-reloadstatus。如需詳細資訊,請參閱 http://refspecs.linuxbase.org/LSB_4.1.0/LSB-Core-generic/LSB-Core-generic/iniscrptact.html

這些服務的組態尚未標準化。如果要將 LSB 程序檔與 High Availability 搭配使用,請確定您瞭解如何設定相關程序檔。相關資訊通常可以在 /usr/share/doc/packages/套件名稱目錄中相關套件的文件內找到。

Systemd

從 SUSE Linux Enterprise 12 起,systemd 取代了常用的 System V init 精靈。Pacemaker 可以管理 systemd 服務 (如果這些服務存在)。systemd 不使用 init 程序檔,而是使用單位檔案。一般情況下,服務 (或單位檔案) 由作業系統提供。如果您要轉換現有的 init 程序檔,請造訪 http://0pointer.de/blog/projects/systemd-for-admins-3.html 獲取詳細資訊。

服務

目前有許多通用類型的系統服務同時存在:LSB (屬於 System V init)、systemd 和 (在某些套裝作業系統中提供的) upstart。因此,Pacemaker 支援使用特殊別名,這樣可以輕鬆地確定哪個服務適用於指定的叢集節點。當叢集中混合使用了 systemd、upstart 和 LSB 服務時,此功能特別有用。Pacemaker 將嘗試依照以下順序尋找指定服務:LSB (SYS-V) init 程序檔、Systemd 單位檔案或 Upstart 工作。

Nagios

使用監控外掛程式 (以前稱為 Nagios 外掛程式) 可以監控遠端主機上的服務。Pacemaker 可以使用監控外掛程式 (如果有) 來執行遠端監控。如需詳細資訊,請參閱第 6.6.1 節 「使用監控外掛程式監控遠端主機上的服務」

STONITH (圍籬區隔) 資源代理程式

此類別專用於圍籬區隔相關資源。如需詳細資訊,請參閱 第 10 章 「圍籬區隔與 STONITH

High Availability Extension 隨附的代辦將寫入 OCF 規格。

6.3.3 資源類型

以下是可建立的資源類型:

基本資源

基本資源,是最基本的資源類型。

瞭解如何使用偏好的叢集管理工具建立基本資源:

群組

群組包含一組需放置在一起的資源,這些資源按順序啟動並以相反順序停止。若需更多資訊,請參閱第 6.3.5.1 節 「群組」

複製品

複製品是可在多個主機上處於使用中狀態的資源。任何資源都可複製,只要相應的資源代辦支援複製功能。若需更多資訊,請參閱第 6.3.5.2 節 「複製品」

可升級複製品 (也稱為多狀態資源) 是一種可以升級的特殊類型的複製品資源。

6.3.4 資源範本

如果您要建立大量具有相似組態的資源,定義資源範本是最輕鬆的方法。定義資源範本後,便可在基本資源或某些類型的條件約束中參考該範本,如第 6.5.3 節 「資源範本和條件約束」所述。

如果某個基本資源中參考了某個範本,該基本資源將會繼承範本中定義的所有操作、例項屬性 (參數)、中繼屬性和使用率屬性。此外,您也可以為基本資源定義特定的操作或屬性。如果在範本和基本資源兩者中都定義了上述其中任何一項,則基本資源中定義的值會優先於範本中定義的值。

瞭解如何使用偏好的叢集組態工具定義資源範本:

6.3.5 進階資源類型

基本資源是最簡單的一種資源,易於設定,不過您的叢集組態可能還需要更進階的資源類型,例如群組、複製品資源或可升級複製品資源。

6.3.5.1 群組

有些叢集資源依存於其他元件或資源,它們要求每個元件或資源以特定順序啟動並與其相依的資源在同一伺服器上執行。若要簡化此組態,您可以使用叢集資源群組。

範例 6.3︰ Web 伺服器的資源群組

需要 IP 位址與檔案系統的 Web 伺服器就是資源群組的一個範例。在此範例中,每個元件都是組合成一個叢集資源群組中的獨立資源。資源群組將在一或多個伺服器上執行。若軟體或硬體出現異常,群組會容錯移轉至叢集中的另一個伺服器,這一點與個別叢集資源類似。

群組資源
圖 6.1︰ 群組資源

群組具有以下內容:

啟動和停止

資源以顯示的順序依次啟動,並以相反順序停止。

相依性

若群組中的某個資源在任何地方都無法執行,則群組中位於該資源之後的所有資源均不允許執行。

內容

群組僅會包含基本叢集資源的集合。群組至少須包含一個資源,否則組態視為無效。若要引用群組資源的子代,請使用子代 ID,而不要使用群組 ID。

條件約束

儘管您可以在條件約束中參考群組的子代,但一般最好使用群組的名稱。

粘性

粘性在群組中屬於加法類內容。群組中每個使用中成員的粘性值都會影響群組的總值。因此,若 resource-stickiness 的預設值為 100,並且群組有七個成員,其中五個處於使用中狀態,則整個群組偏向於其目前位置 (分數為 500)。

資源監控

若要對群組啟用資源監控,您必須為要監控的群組中的每個資源分別設定監控。

瞭解如何使用偏好的叢集管理工具建立群組:

6.3.5.2 複製品

您可能要讓某些資源同時在叢集的多個節點上執行。若要實現此目的,您必須將資源設定為複製品。可以設定為複製品的資源範例包括叢集檔案系統,如 OCFS2。您可以複製所提供的任何資源。相關資源的資源代辦會為此操作提供支援。您甚至可以對複製品資源進行不同的設定,具體視代管它們的節點而定。

資源複製品分為三種類型:

匿名複製品

這是最簡單的一種複製品。無論在何處執行,它們的行為都相同。因此,每部機器上只能有一個匿名複製品例項處於使用中狀態。

全域唯一的複製品

這些資源是不同的實體。在一個節點上執行的複製品例項與在另一個節點上執行的另一個例項不同;在相同節點上的任何兩個例項也不相同。

可升級複製品 (多狀態資源)

這些資源的使用中例項分為兩種狀態:主動與被動。這些狀態有時也稱為主要與次要。可升級複製品可以是匿名的,也可以是全域唯一。並請參閱第 6.3.5.3 節 「可升級複製品 (多狀態資源)」

複製品只能包含一個群組或一個一般資源。

設定資源監控或條件約束時,複製品的要求與簡單資源不同。如需詳細資料,請參閱 http://www.clusterlabs.org/pacemaker/doc/ 上的《Pacemaker Explained》(Pacemaker 說明)。詳情位於「Clones - Resources That Should be Active on Multiple Hosts」(複製品 - 應在多個主機上啟動的資源) 一節。

瞭解如何使用偏好的叢集管理工具建立複製品:

6.3.5.3 可升級複製品 (多狀態資源)

可升級複製品 (以前稱為多狀態資源) 是一種特殊的複製品。它們可讓例項處於兩種操作模式之一 (主要或次要)。可升級複製品只能包含一個群組或一個一般資源。

設定資源監控或條件約束時,可升級複製品的要求與簡單資源不同。如需詳細資料,請參閱《Pacemaker Explained》(Pacemaker 說明)。Pacemaker 1.1 版本可從 http://www.clusterlabs.org/pacemaker/doc/ 取得。詳情位於「Multi-state - Resources That Have Multiple Modes」(多狀態 - 有多種模式的資源) 一節。

6.3.6 資源選項 (中繼屬性)

對於新增的每個資源,您都可以定義選項。叢集使用選項來決定資源的行為方式 — 它們會告知 CRM 如何處理特定資源。資源選項可透過 crm_resource --meta 指令或者依程序 7.5 「新增基本資源」所述使用 Hawk2 來設定。

表 6.1︰ 基本資源選項

選項

描述

預設值

priority

如果並非所有資源都可處於使用中狀態,叢集將停止優先程度較低的資源,以便讓優先程度較高的資源保持使用中狀態。

0

target-role

叢集應嘗試讓此資源保持什麼狀態?允許的值:StoppedStarted、​UnpromotedPromoted

Started

is-managed

叢集是否允許啟動及停止資源?允許的值:truefalse。如果該值設定為 false,則仍會監控資源的狀態,並報告任何故障。這與將資源設定為 maintenance="true" 的情況完全不同。

true

maintenance

是否可以手動處理資源?允許的值:truefalse。如果設定為 true,則所有資源將會變為不受管理狀態:叢集將停止監控這些資源,因此將會忽視這些資源的狀態。您可以視需要停止或重新啟動叢集資源,不必等待叢集嘗試重新啟動它們。

false

resource-stickiness

資源希望留在原處的程度如何?

calculated

migration-threshold

此資源在節點上的失敗次數達到多少次才會取消該節點代管此資源的資格?

INFINITY (已停用)

multiple-active

如果叢集發現資源在多個節點上處於使用中狀態,應如何處理?允許的值:block (將資源標示為不受管理)、stop_only、​stop_start

stop_start

failure-timeout

等待多少秒之後才會當做失敗未發生 (潛在含義為允許資源回到其失敗的節點上)?

0 (已停用)

allow-migrate

允許對支援 migrate_to/​migrate_from 動作的資源執行資源移轉。

false

remote-node

此資源定義之遠端節點的名稱。這會使資源變成一個遠端節點,並且定義唯一的名稱以用於識別該遠端節點。如果未設定其他參數,則此值還將做為要在 remote-port 連接埠連接的主機名稱。

警告
警告:使用唯一的 ID

此值不得與任何現有資源 ID 或節點 ID 重複。

none (已停用)

remote-port

訪客與 pacemaker_remote 建立連接時使用的自訂連接埠。

3121

remote-addr

當遠端節點的名稱不是訪客的主機名稱時,要連接到的 IP 位址或主機名稱。

remote-node (用做主機名稱的值)

remote-connect-timeout

等待中訪客連接在逾時之前所要經過的時間。

60s

6.3.7 例項屬性 (參數)

所有資源類別的程序檔均可接收參數,參數決定了資源的行為及其控制的服務例項。如果您的資源代辦支援參數,您可以使用 crm_resource 指令或 Hawk2 (如程序 7.5 「新增基本資源」所述) 新增參數。在 crm 指令行公用程式和 Hawk2 中,例項屬性分別稱為 paramsParameter。您可用 root 身分執行如下指令來獲取受 OCF 程序檔支援的例項屬性清單:

root # crm ra info [class:[provider:]]resource_agent

或 (不含選擇性的部分):

root # crm ra info resource_agent

輸出會列出所有受支援的屬性、其用途與預設值。

例如,指令

root # crm ra info IPaddr

傳回下列輸出:

Manages virtual IPv4 addresses (portable version) (ocf:heartbeat:IPaddr)

This script manages IP alias IP addresses
It can add an IP alias, or remove one.

Parameters (* denotes required, [] the default):

ip* (string): IPv4 address
The IPv4 address to be configured in dotted quad notation, for example
"192.168.1.1".

nic (string, [eth0]): Network interface
The base network interface on which the IP address will be brought
online.

If left empty, the script will try and determine this from the
routing table.

Do NOT specify an alias interface in the form eth0:1 or anything here;
rather, specify the base interface only.

cidr_netmask (string): Netmask
The netmask for the interface in CIDR format. (ie, 24), or in
dotted quad notation  255.255.255.0).

If unspecified, the script will also try to determine this from the
routing table.

broadcast (string): Broadcast address
Broadcast address associated with the IP. If left empty, the script will
determine this from the netmask.

iflabel (string): Interface label
You can specify an additional label for your IP address here.

lvs_support (boolean, [false]): Enable support for LVS DR
Enable support for LVS Direct Routing configurations. In case a IP
address is stopped, only move it to the loopback device to allow the
local node to continue to service requests, but no longer advertise it
on the network.

local_stop_script (string):
Script called when the IP is released

local_start_script (string):
Script called when the IP is added

ARP_INTERVAL_MS (integer, [500]): milliseconds between gratuitous ARPs
milliseconds between ARPs

ARP_REPEAT (integer, [10]): repeat count
How many gratuitous ARPs to send out when bringing up a new address

ARP_BACKGROUND (boolean, [yes]): run in background
run in background (no longer any reason to do this)

ARP_NETMASK (string, [ffffffffffff]): netmask for ARP
netmask for ARP - in nonstandard hexadecimal format.

Operations' defaults (advisory minimum):

start         timeout=90
stop          timeout=100
monitor_0     interval=5s timeout=20s
注意
注意:群組、複製品或可升級複製品的例項屬性

請注意,群組、複製品和可升級複製品資源沒有例項屬性。但是,群組、複製品或可升級複製品的子代會繼承任何例項屬性集。

6.3.8 資源操作

叢集預設不會確保資源仍正常。若要指示叢集確保資源能正常運作,您需要在資源定義中新增監控操作。可為所有類別或資源代辦新增監控操作。若需更多資訊,請參閱第 6.4 節 「資源監控」

表 6.2︰ 資源操作內容

操作

描述

id

動作執行人名稱。必須唯一。(ID 不顯示)。

name

執行的動作。通用值:monitorstartstop

interval

執行操作的頻率。單位:秒

timeout

宣告動作失敗之前等待多長時間?

requires

需符合什麼條件才會執行此動作。允許的值:nothingquorumfencing。預設值取決於圍籬區隔是否啟用及資源類別是否為 stonith。對於 STONITH 資源,預設值為 nothing

on-fail

此動作失敗時所採取的動作。允許的值:

  • ignore:當做資源未失敗。

  • block:在資源上不執行任何進一步操作。

  • stop:停止資源且不在其他任何地方啟動。

  • restart:停止資源並再次啟動 (可能在其他節點上)。

  • fence:將發生資源故障的節點關閉 (STONITH)。

  • standby:將發生資源失敗之節點上的所有資源移出。

enabled

如果為 false,則會將操作視做不存在。允許的值:truefalse

role

只有在資源具有此角色時,才執行操作。

record-pending

可以全域設定,也可以針對個別資源設定。讓 CIB 反映對資源執行之 in-flight 操作的狀態。

description

操作的描述。

6.3.9 逾時值

以下參數可能會影響資源的逾時值:

  • op_defaults (操作的全域逾時),

  • 資源範本中定義的特定逾時值

  • 為資源定義的特定逾時值

注意
注意:值的優先程度

如果為資源定義了特定值,則該值將優先於全域預設值。資源的特定值也優先於資源範本中定義的值。

設定合適的逾時值非常重要。將逾時值設定得太小,會因以下緣故產生許多 (不必要的) 圍籬區隔操作:

  1. 如果某個資源發生逾時,該資源將會失敗,並且叢集會嘗試將其停止。

  2. 如果停止該資源的操作也失敗 (例如,由於停止逾時設定得太短),叢集將圍籬區隔該節點。它會將發生此情況的節點視為失控。

您可以使用 crmsh 和 Hawk2 調整操作的全域預設值並設定任何特定的逾時值。確定及設定逾時值的最佳實務如下:

程序 6.1︰ 確定逾時值
  1. 檢查啟動和停止資源所需的時間 (負載狀態下)。

  2. 如果需要,請新增 op_defaults 參數並相應地設定 (預設) 逾時值:

    1. 例如,將 op_defaults 設定為 60 秒:

      crm(live)configure#  op_defaults timeout=60
    2. 對於需要較長時間的資源,請單獨定義每個逾時值。

  3. 為資源設定操作時,請新增獨立的 startstop 操作。使用 Hawk2 設定操作時,它將為這些操作提供有用的逾時建議。

6.4 資源監控

若要確定資源是否正在執行,必須設定針對該資源的資源監控。

若資源監控偵測到失敗,系統將執行以下動作:

  • 根據 /etc/corosync/corosync.conflogging 區段中指定的組態產生記錄檔案訊息。

  • 失敗狀況會反映在叢集管理工具 (Hawk2、crm status) 及 CIB 狀態區段中。

  • 叢集會啟動重要的復原動作,其中可能包括停止資源以修複失敗狀態,以及在本地或在其他節點上重新啟動資源。也可能不重新啟動資源,具體視組態及叢集狀態而定。

若不設定資源監控,則不會向您通知資源成功啟動後發生的失敗,並且叢集會始終將資源顯示為處於正常狀態。

監控已停止的資源

通常,叢集只會在資源執行時對其進行監控。但是,若要偵測並行存取違規,還需針對停止的資源設定監控。例如:

primitive dummy1 Dummy \
    op monitor interval="300s" role="Stopped" timeout="10s" \
    op monitor interval="30s" timeout="10s"

當資源 dummy1 狀態為 role="Stopped" 時,此組態就會每隔 300 秒觸發一次對該資源的監控操作。當該資源執行時,將每隔 30 秒對其監控一次。

查探

CRM 會針對每個節點上的每個資源執行初始監控,即所謂的查探。在清理資源後也會執行查探。如果為某個資源定義了多個監控操作,CRM 將會選取間隔最短的監控操作,並使用它的逾時值做為查探的預設逾時。如果沒有設定任何監控操作,則會套用針對整個叢集的預設值。預設值為 20 秒 (如果未透過設定 op_defaults 參數指定其他值)。如果您不想依賴自動計算結果或 op_defaults 值,請為此資源的查探定義特定的監控操作。為此,可以新增一個監控操作並將 interval 設定為 0,例如:

crm(live)configure# primitive rsc1 ocf:pacemaker:Dummy \
    op monitor interval="0" timeout="60"

不論在 op_defaults 中定義的全域逾時為何值,或者是否設定了任何其他作業逾時,rsc1 查探都將於 60 秒後逾時。如果在指定相應資源的查探時未設定 interval="0",CRM 會自動檢查是否為該資源定義了其他任何監控操作,並依如上所述計算查探的逾時值。

瞭解如何使用偏好的叢集管理工具為資源新增監控操作:

6.5 資源條件約束

設定所有資源只是工作的一部分。即使叢集瞭解所有必需的資源,可能仍然無法正確地對其進行處理。資源條件約束可讓您指定資源可在哪些叢集節點上執行,載入資源的順序以及特定資源所依賴的其他資源。

6.5.1 條件約束類型

系統中的條件約束分為三種類型:

資源位置

位置條件約束,定義資源可在、不可在或偏好在哪些節點上執行。

資源並存

並存條件約束,告訴叢集哪些資源可以或不可以同時在節點上執行。

資源順序

順序條件約束,定義動作執行的順序。

重要
重要:條件約束與特定資源類型的限制
  • 不要為資源群組的成員建立並存條件約束。應該建立指向整個資源群組的並存條件約束。其他所有類型的條件約束可安全地用於資源群組的成員。

  • 不要對包含複製品資源或者已套用可升級複製品資源的資源使用任何條件約束。條件約束必須套用於複製品或可升級複製品資源,而不能套用於子資源。

6.5.1.1 資源集

6.5.1.1.1 使用資源集定義條件約束

您可以使用另一種形式來定義位置、並存或順序條件約束,即資源集,使用此方式,基本資源會全部歸到一個集中。以前,為了實現此目的,需要定義一個資源群組 (並不總是能準確反映出設計目的),或者將每種關係定義為個別的條件約束。隨著資源和組合數量的增長,後一種方法會導致條件約束劇增。透過資源集進行設定不一定會降低繁瑣性,但更易於理解和維護,如以下範例中所示。

範例 6.4︰ 用於位置條件約束的資源集

例如,您可以在 crmsh 中使用資源集 (loc-alice) 的以下組態,在同一個節點 alice 上放置兩個虛擬 IP (vip1vip2):

crm(live)configure# primitive vip1 IPaddr2 params ip=192.168.1.5
crm(live)configure# primitive vip2 IPaddr2 params ip=192.168.1.6
crm(live)configure# location loc-alice { vip1 vip2 } inf: alice

如果想要使用資源集來取代並存條件約束的組態,請參考以下兩個範例:

範例 6.5︰ 並存資源鏈
<constraints>
     <rsc_colocation id="coloc-1" rsc="B" with-rsc="A" score="INFINITY"/>
     <rsc_colocation id="coloc-2" rsc="C" with-rsc="B" score="INFINITY"/>
     <rsc_colocation id="coloc-3" rsc="D" with-rsc="C" score="INFINITY"/>
</constraints>

資源集表達的相同組態:

<constraints>
    <rsc_colocation id="coloc-1" score="INFINITY" >
     <resource_set id="colocated-set-example" sequential="true">
      <resource_ref id="A"/>
      <resource_ref id="B"/>
      <resource_ref id="C"/>
      <resource_ref id="D"/>
     </resource_set>
    </rsc_colocation>
</constraints>

如果您要使用資源集來取代順序條件約束的組態,請參考以下兩個範例:

範例 6.6︰ 排序資源鏈
<constraints>
     <rsc_order id="order-1" first="A" then="B" />
     <rsc_order id="order-2" first="B" then="C" />
     <rsc_order id="order-3" first="C" then="D" />
</constraints>

可以使用包含排序資源的資源集來實現相同目的:

範例 6.7︰ 以資源集表示的排序資源鏈
<constraints>
     <rsc_order id="order-1">
     <resource_set id="ordered-set-example" sequential="true">
     <resource_ref id="A"/>
     <resource_ref id="B"/>
     <resource_ref id="C"/>
     <resource_ref id="D"/>
     </resource_set>
     </rsc_order>
</constraints>

資源集可以是排序的 (sequential=true),也可以是未排序的 (sequential=false)。此外,您可以使用 require-all 屬性在 ANDOR 邏輯之間切換。

6.5.1.1.2 用於無相依項的並存條件約束的資源集

有時,將一組資源放置在同一個節點上 (定義並存條件約束) 會很有用,但前提是這些資源之間不存在硬性相依性。例如,您要在同一個節點上放置兩個資源,但希望叢集在其中一個資源失敗時重新啟動另一個資源。可以在 crm 外圍程序中使用 weak bond 指令來實現此目的。

瞭解如何使用偏好的叢集管理工具設定這些弱鍵

6.5.1.2 更多資訊

瞭解如何使用偏好的叢集管理工具建立各種條件約束。

如需設定條件約束的詳細資訊,以及有關順序與並存基本概念的詳細背景資訊,請參閱以下文件。您可以從 http://www.clusterlabs.org/pacemaker/doc/ 上取得這些文件:

  • Pacemaker Explained》(Pacemaker 說明) 的「Resource Constraints」(資源條件約束) 一章

  • Colocation Explained》(並存說明)

  • Ordering Explained》(順序說明)

6.5.2 分數和 infinity

定義條件約束時,還需要處理分數。所有類型的分數對於叢集的工作方式而言都是不可或缺的。實際上,從移轉資源到決定要將降級叢集中哪個資源停止的所有操作,都是透過某種方式對分數進行操作來實現。系統會對每個資源都計算分數,針對某個資源分數為負數的所有節點都不能執行該資源。計算完針對資源的分數之後,叢集會選擇分數最高的節點。

INFINITY 目前定義為 1,000,000。與其相關的加法或減法計算遵循以下三項基本規則:

  • 任何值 + INFINITY = INFINITY

  • 任何值 - INFINITY = -INFINITY

  • INFINITY - INFINITY = -INFINITY

定義資源條件約束時,您還要指定每個條件約束的分數。分數表示您要指定給此資源條件約束的值。系統會先套用分數較高的條件約束,然後再套用分數較低的條件約束。透過為指定資源建立不同分數的其他位置條件約束,即可指定資源將容錯移轉至之目標節點的順序。

6.5.3 資源範本和條件約束

如果您定義了一個資源範本 (請參閱第 6.3.4 節 「資源範本」),則可以在以下類型的條件約束中參考該範本:

  • 順序條件約束

  • 並存條件約束

  • rsc_ticket 條件約束 (適用於 Geo 叢集)

不過,並存條件約束不得包含對同個範本的多個參考。資源集不得包含對範本的參考。

條件約束中參考的資源範本代表由該範本衍生的所有基本資源。也就是說,這些條件約束將適用於所有參考了資源範本的基本資源。在條件約束中參考資源範本是另外一種使用資源集的方式,這種方式能夠大大簡化叢集設定。如需有關資源集的詳細資料,請參閱程序 7.17 「在條件約束中使用資源集」

6.5.4 容錯移轉節點

若資源失敗,系統會自動將其重新啟動。若無法在目前節點上重新啟動,或資源已在目前節點上失敗 N 次,則會嘗試容錯移轉至其他節點。每次資源失敗,其 failcount 值都會增加。您可以定義一個失敗計數,讓資源在失敗該次數 (migration-threshold) 之後移轉至新節點。若叢集中有兩個以上的節點,則特定資源容錯移轉所至的節點由 High Availability 軟體來選擇。

但是,您可以透過為該資源設定一或多個位置條件約束以及一個 migration-threshold,指定資源容錯移轉所至的節點。

瞭解如何使用偏好的叢集管理工具指定容錯移轉節點:

範例 6.8︰ 移轉限定值 - 處理流程

例如,假設您已為資源 rsc1 設定位置條件約束,讓其偏向於在 alice 上執行。若資源在該節點上失敗,系統會檢查 migration-threshold,並將其與 failcount 進行比較。若 failcount >= migration-threshold,則將資源移轉至優先設定次佳的節點。

達到限定值後,便不再允許該節點執行失敗的資源,除非資源的 failcount 被重設。此操作可由叢集管理員手動執行,也可透過設定資源的 failure-timeout 選項來完成。

例如,設定 migration-threshold=2failure-timeout=60s 會在資源失敗兩次後將其移轉至新節點。一分鐘過後,允許該資源移回原節點 (視粘性與條件約束的分數而定)。

移轉限定值概念有兩種例外情況,發生於資源無法啟動或無法停止之時:

  • 啟動失敗會將 failcount 設定為 INFINITY,因此一旦發生便會立即移轉資源。

  • 停止失敗會導致圍籬區隔 (當 stonith-enabled 設定為預設值 true 時)。

    若未定義任何 STONITH 資源 (或 stonith-enabled 設定為 false),則資源將不會移轉。

以下章節詳細介紹了如何使用移轉限定值以及如何使用偏好的叢集管理工具重設失敗計數的信息:

6.5.5 錯誤回復節點

當原始節點恢復連接且位於叢集中時,資源可以錯誤回復至該節點。為防止資源錯誤回復到之前執行它的節點,或者要指定讓該資源錯誤回復到其他節點,請變更其資源粘性值。您可以在建立資源時或建立之後指定資源粘性。

指定資源粘性的值時,請考慮以下事項:

值為 0

此為預設值。資源處於系統中的最佳位置。這表示當有更佳的或負載更低的節點可用時,則移動資源。此選項幾乎等同於自動錯誤回復,除了資源可能會移至原先節點 (資源之前於其上處於使用中狀態) 之外的節點這種情況。

值大於 0

資源偏向於保留在其目前的位置,但當有更合適的節點時,則可能會移動。值越高表示越偏向於將資源保留在目前的位置。

值小於 0

資源偏向於從其目前位置移開。絕對值越高表示越偏向於移動資源。

值為 INFINITY

資源始終保留在其目前的位置,除非由於此節點不再符合執行該資源的條件 (節點關機、節點待命、達到 migration-threshold,或組態變更) 而強制關閉此選項。此選項幾乎等同於完全停用自動錯誤回復。

值為 -INFINITY

資源始終從其目前位置移開。

6.5.6 依據資源負載影響放置資源

並非所有資源都相同。有些資源 (例如 Xen 客體作業系統) 要求代管它們的節點符合其容量要求。如果放置資源後其所需的容量之和超過了提供的容量,資源效能便會下降 (甚至無法執行)。

鑒於此,High Availability Extension 允許您指定以下參數:

  1. 特定節點提供的容量。

  2. 特定資源要求的容量。

  3. 配置資源的整體策略。

瞭解如何使用偏好的叢集管理工具設定這些設定:

如果一個節點有足夠的可用容量來滿足資源的要求,則認為該節點符合資源要求。容量實際上與 High Availability Extension 完全無關,這只是為了確定在將資源移至某個節點前,該節點滿足此資源的全部容量要求。

若要手動設定資源的要求以及節點提供的容量,可以利用使用率屬性。您可以依據自己的偏好命名使用率屬性,依據組態需要定義任意數量的名稱/值對。但是,屬性的值必須是整數。

如果具有使用率屬性的多個資源已分組或具有並存條件約束,High Availability Extension 會將這種情況考慮在內。可能的話,系統會將資源放置在可以滿足全部容量要求的節點上。

注意
注意:群組的使用率屬性

使用者無法直接為資源群組設定使用率屬性。不過,若要簡化群組的組態設定,您可以新增具有群組中所有資源所需總容量的使用率屬性。

High Availability Extension 現在還提供了用於自動偵測和設定節點容量及資源要求的方法:

NodeUtilization 資源代辦可檢查節點的容量 (與 CPU 和 RAM 相關)。若要設定自動偵測,請建立類別、提供者和類型如下的複製品資源:ocf:pacemaker:NodeUtilization。每個節點上都應該執行一個該複製品例項。該例項啟動後,一個使用率區段會新增至 CIB 中的節點組態。

為了自動偵測資源的最低要求 (與 RAM 和 CPU 相關),我們改進了 Xen 資源代辦。Xen 資源啟動後會反映 RAM 和 CPU 的使用情況。使用率屬性將會自動新增至資源組態。

注意
注意:適用於 Xen 和 libvirt 的不同資源代理程式

ocf:heartbeat:Xen 資源代辦不應與 libvirt 配合使用,因為 libvirt 需要能夠修改機器描述檔案。

對於 libvirt,請使用 ocf:heartbeat:VirtualDomain 資源代理程式。

除了偵測最低要求外,High Availability Extension 還允許透過 VirtualDomain 資源代辦監控目前使用率。它可以偵測虛擬機器的 CPU 和 RAM 使用情況。若要使用此功能,請設定類別、提供者和類型如下的資源:ocf:heartbeat:VirtualDomain。可用的例項屬性如下:autoset_utilization_cpuautoset_utilization_hv_memory。兩者都預設為 true。如此,每個監控週期都會更新 CIB 中的使用率值。

無論是手動還是自動設定容量與要求,都必須使用 placement-strategy 內容 (在全域叢集選項中) 指定配置策略。可用的值如下:

default (預設值)

不考量使用率值。資源依據位置分數配置。如果分數相同,則在各節點上平均分配資源。

utilization

判斷節點的可用容量是否足夠滿足資源的要求時,會參考使用率值。但是,依舊會依據配置給節點的資源數量完成負載平衡。

minimal

判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會儘可能將資源集中到少量節點上,以節省其餘節點上的能耗。

balanced

判斷節點是否有足夠的可用容量來滿足資源的要求時,會考量使用率值。系統會嘗試將資源平均分配,以便最佳化資源效能。

注意
注意:設定資源優先程度

提供的配置策略效能最佳,它們雖然沒有使用複雜的啟發式解析程式,卻總能獲得最佳的配置效果。請確保資源的優先程度已正確設定,以便先排程最重要的資源。

範例 6.9︰ 負載平衡放置的範例組態

以下範例中說明了一個含四台虛擬機器的三節點叢集 (每個節點相同)。

node alice utilization memory="4000"
node bob utilization memory="4000"
node  charlie utilization memory="4000"
primitive xenA Xen utilization hv_memory="3500" \
     params xmfile="/etc/xen/shared-vm/vm1"
     meta priority="10"
primitive xenB Xen utilization hv_memory="2000" \
     params xmfile="/etc/xen/shared-vm/vm2"
     meta priority="1"
primitive xenC Xen utilization hv_memory="2000" \
     params xmfile="/etc/xen/shared-vm/vm3"
     meta priority="1"
primitive xenD Xen utilization hv_memory="1000" \
     params xmfile="/etc/xen/shared-vm/vm4"
     meta priority="5"
property placement-strategy="minimal"

三個節點都開啟時,資源 xenA 將首先放置到一個節點上,然後是 xenDxenBxenC 會同時隨 xenD 一起配置,或是其中一項隨 xenD 一起配置。

如果一個節點失敗,表示可用的總記憶體太少,無法代管全部資源。xenAxenD 會保證得到配置。但剩餘的兩個資源 xenBxenC 中僅有一個會予以放置。由於他們的優先程度相同,因此結果會有多種。若要解決這種不確定的狀況,您需要為其中一個設定較高的優先程度。

6.5.7 使用標記對資源分組

標記是最近新增至 Pacemaker 中的功能。使用標記可以一次參考多個資源,而無需在這些資源之間建立任何並存或順序關係。這個功能在把概念上相關的資源分組在一起時將十分實用。例如,如果有多個資源與某個資料庫相關,您可以建立名為 databases 的標記,並將與該資料庫相關的所有資源新增至此標記。這樣,只需使用一個指令就能停止或啟動所有這些資源。

在條件約束中也可以使用標記。例如,以下位置條件約束 loc-db-prefer 會套用至標記為 databases 的資源集:

location loc-db-prefer databases 100: alice

瞭解如何使用偏好的叢集管理工具建立標記:

6.6 管理遠端主機上的服務

在過去幾年中,監控和管理遠端主機上的服務已變得日益重要。SUSE Linux Enterprise High Availability Extension 11 SP3 透過監控外掛程式提供了細緻的監控遠端主機上之服務的功能。最近新增的 pacemaker_remote 服務現在允許 SUSE Linux Enterprise High Availability Extension 15 SP4 全面管理和監控遠端主機上的資源,就如同這些資源是真實的叢集節點一般,並且無需在遠端機器上安裝叢集堆疊。

6.6.1 使用監控外掛程式監控遠端主機上的服務

監控虛擬機器的操作可以借助 VM 代辦來執行 (該代辦僅檢查客體作業系統是否出現在 hypervisor 中),也可以透過從 VirtualDomain 或 Xen 代辦中呼叫的外部程序檔執行。到目前為止,較精細的監控只能透過在虛擬機器中安裝整個 High Availability 堆疊來實現。

透過提供對監控外掛程式 (以前稱為 Nagios 外掛程式) 的支援,High Availability Extension 現在還允許您監控遠端主機上的服務。您可以收集關於客體作業系統的外部狀態,而不必修改客體作業系統影像。例如,VM 客體作業系統可以執行 Web 服務或簡單網路資源,不過這些服務或資源必須位於可以存取的位置。借助 Nagios 資源代辦,您現在可以監控客體作業系統上的 Web 服務或網路資源。如果這些服務不再可存取,High Availability Extension 便會觸發對相應客體作業系統的重新啟動或移轉操作。

如果客體依存於某項服務 (例如,客體要使用的 NFS 伺服器) 運作,則該服務可能是由叢集管理的一般資源,也可能是使用 Nagios 資源監控的外部服務。

若要設定 Nagios 資源,必須在主機上安裝下列套件:

  • monitoring-plugins

  • monitoring-plugins-metadata

必要時,YaST 或 Zypper 將會解析對其他套件的任何相依性。

將監控外掛程式設定為屬於資源容器 (一般是 VM) 的資源,就是一個典型的使用案例。如果容器的任何資源發生故障,容器將會重新啟動。如需組態設定範例,請參閱範例 6.10 「為監控外掛程式設定資源」。或者,若要使用 Nagios 資源代辦來透過網路監控主機或服務,也可以將其設定為一般資源。

範例 6.10︰ 為監控外掛程式設定資源
primitive vm1 VirtualDomain \
    params hypervisor="qemu:///system" config="/etc/libvirt/qemu/vm1.xml" \
    op start interval="0" timeout="90" \
    op stop interval="0" timeout="90" \
    op monitor interval="10" timeout="30"
primitive vm1-sshd nagios:check_tcp \
    params hostname="vm1" port="22" \ 1
    op start interval="0" timeout="120" \ 2
    op monitor interval="10"
group g-vm1-and-services vm1 vm1-sshd \
    meta container="vm1" 3

1

受支援的參數與監控外掛程式的長選項相同。監控外掛程式使用參數 hostname 連接至服務。因此,屬性的值必須是可解析的主機名稱或 IP 位址。

2

因為要啟動客體作業系統並執行其服務需要一段時間,所以監控資源的啟動逾時必須足夠長。

3

類型為 ocf:heartbeat:Xenocf:heartbeat:VirtualDomainocf:heartbeat:lxc 的叢集資源容器。它可以是一個 VM,也可以是一個 Linux 容器。

上方範例中,check_tcp 外掛程式僅有一個 資源,但您可為不同的外掛程式類型 (例如,check_httpcheck_udp) 設定多個資源。

如果各服務的主機名稱相同,也可為群組指定 hostname 參數,而不必將它新增至各個基本資源。例如:

group g-vm1-and-services vm1 vm1-sshd vm1-httpd \
     meta container="vm1" \
     params hostname="vm1"

如有任一受監控外掛程式監控的服務在 VM 中執行失敗,叢集將會偵測到該情況,並重新啟動容器資源 (VM)。發生這種情況所需執行的動作可透過指定服務監控操作的 on-fail 屬性來設定。該屬性預設為 restart-container

系統考慮 VM 的移轉限定值時,會將服務的失敗計數考慮在內。

6.6.2 使用 pacemaker_remote 管理遠端節點上的服務

使用 pacemaker_remote 服務可將高可用性叢集延伸到虛擬節點或遠端裸機。這些虛擬節點或遠端裸機無需執行叢集堆疊就能成為叢集的成員。

High Availability Extension 現在可以啟動虛擬環境 (KVM 和 LXC) 以及這些虛擬環境中存在的資源,而無需虛擬環境執行 Pacemaker 或 Corosync。

對於同時要管理做為叢集資源的虛擬機器以及這些虛擬機器中存在之資源的使用案例,您現在可以使用以下設定:

  • 正常(裸機) 叢集節點執行 High Availability Extension。

  • 虛擬機器執行 pacemaker_remote 服務 (幾乎不需要在 VM 端進行任何組態設定)。

  • 正常叢集節點上的叢集堆疊啟動 VM,並連接至 VM 上執行的 pacemaker_remote 服務,以將 VM 做為遠端節點整合到叢集中。

由於遠端節點上未安裝叢集堆疊,這意味著:

  • 遠端節點不計入最低節點數。

  • 遠端節點無法成為 DC。

  • 遠端節點不受延展性限制的約束 (Corosync 存在 32 個節點的成員數量限制)。

Pacemaker Remote Quick Start中介紹了關於 remote_pacemaker 服務的詳細資訊,包括多個使用案例和詳細的設定說明。

6.7 監控系統狀態

為了避免發生節點因用完磁碟空間而無法管理指定給它的任何資源的情況,High Availability Extension 提供了資源代辦 ocf:pacemaker:SysInfo。使用該代辦可以監控節點的磁碟分割區狀態。SysInfo 資源代辦會建立節點屬性 #health_disk;如果受監控磁碟的可用空間低於指定限制,代辦會將該屬性設為 red

若要定義當節點狀態達到嚴重狀況時 CRM 應如何應對,可使用全域叢集選項 node-health-strategy

程序 6.2︰ 設定系統狀態監控

若要在節點用完磁碟空間時將資源從該節點中移走,請執行以下步驟:

  1. 設定 ocf:pacemaker:SysInfo 資源:

    primitive sysinfo ocf:pacemaker:SysInfo \
         params disks="/tmp /var"1 min_disk_free="100M"2 disk_unit="M"3 \
         op monitor interval="15s"

    1

    要監控的磁碟分割區。例如,/tmp/usr/var/dev。若要指定多個分割區做為屬性值,請用空格分隔這些分割區。

    注意
    注意:系統永遠會監控 / 檔案系統

    不需要在 disks 中指定根分割區 (/)。預設總是會對其進行監控。

    2

    這些分割區需要的最小可用磁碟空間。(選擇性) 您可以指定用於度量的單位 (在上方的範例中使用的是 M,表示百萬位元組)。如果未指定,min_disk_free 預設會使用 disk_unit 參數中定義的單位。

    3

    用於報告磁碟空間的單位。

  2. 為完成資源組態設定,建立一個 ocf:pacemaker:SysInfo 複製品並在叢集的每個節點上將其啟動。

  3. node-health-strategy 設定為 migrate-on-red

    property node-health-strategy="migrate-on-red"

    如果 #health_disk 屬性設定為 redpacemaker-schedulerd 會新增 -INF 至該節點的資源分數。如此,所有資源都將從此節點中移走。STONITH 資源將是最後一個停止的資源,不過,即使 STONITH 資源不再執行,節點仍可處於圍籬區隔模式。圍籬區隔的節點可以直接存取 CIB 並將繼續工作。

在節點的系統狀態變成 red 之後,解決導致問題發生的根源。然後清除 red 狀態,讓節點再次具備執行資源的資格。登入叢集節點,並使用下列其中一種方法:

  • 執行下列指令:

    root # crm node status-attr NODE delete #health_disk
  • 在該節點上重新啟動 Pacemaker。

  • 將節點重新開機。

節點將恢復正常狀態,並且可以重新執行資源。

6.8 更多資訊

http://crmsh.github.io/

用於高可用性叢集管理的進階指令行介面 crm 外圍程序 (crmsh) 的主頁。

http://crmsh.github.io/documentation

提供關於 crm 外圍程序的多個文件,包括使用 crmsh 完成基本叢集設定的入門教學課程,以及 crm 外圍程序的綜合手冊。後者的網址為 http://crmsh.github.io/man-2.0/http://crmsh.github.io/start-guide/ 上提供了教學課程。

http://clusterlabs.org/

Pacemaker 首頁,High Availability Extension 隨附的叢集資源管理員。

http://www.clusterlabs.org/pacemaker/doc/

提供一些綜合手冊,以及一些解釋一般概念的簡短文件。例如:

  • Pacemaker Explained (Pacemaker 說明):包含全面詳盡的資訊,以供參考。

  • Colocation Explained》(並存說明)

  • Ordering Explained》(順序說明)