10 圍籬區隔與 STONITH #
在 HA (High Availability) 的電腦叢集中,圍籬區隔是一個極其重要的概念。叢集有時會偵測到其中一個節點行為異常,需要將其移除。這稱為「圍籬區隔」,通常透過 STONITH 資源來執行。可將圍籬區隔定義為讓 HA 叢集處於已知狀態一種方法。
叢集中的每個資源都有相關的狀態。例如:「資源 r1 已在 alice 上啟動」。在 HA 叢集中,這樣的狀態隱含「資源 r1 已在除節點 alice 之外的所有節點上停止」的含義,因為叢集必須確保每個資源只能在一個節點上啟動。每個節點都必須報告資源發生的每一項變更。因此,叢集狀態是資源狀態和節點狀態的集合。
如果無法確切判斷某個節點或資源的狀態,就會觸發圍籬區隔。即使叢集未注意到指定節點上發生了狀況,圍籬區隔也可以確保該節點不會執行任何重要的資源。
10.1 圍籬區隔的類別 #
有兩類圍籬區隔:資源層級圍籬區隔和節點層級圍籬區隔。後者為本章的主要主題。
- 資源層級圍籬區隔
資源層級圍籬區隔可確保對給定資源的獨佔存取。此情況的常見範例就是透過 SAN 光纖通道開關 (用於鎖定節點禁止存取其磁碟) 或 SCSI Reserve 之類的方法變更節點的區域。如需範例,請參閱第 11.10 節 「儲存保護的其他機制」。
- 節點層級圍籬區隔
節點層級圍籬區隔可完全防止故障節點存取共享資源。這通常可以透過一種簡單但稍嫌粗暴的方法來實現,即重設或關閉節點。
10.2 節點層級圍籬區隔 #
在 Pacemaker 叢集中,節點層級圍籬區隔的實作方式是 STONITH (關閉另一個節點)。High Availability Extension 提供了 stonith
指令行工具,此為一個可擴充介面,用於從遠端關閉叢集中的節點。如需可用選項的綜覽,請執行 stonith --help
,如需詳細資訊,請參閱 stonith
的 man 頁面。
10.2.1 STONITH 裝置 #
若要使用節點層級圍籬區隔,首先需要擁有一個圍籬區隔裝置。若要取得 High Availability Extension 支援的 STONITH 裝置清單,請在任何節點上執行下列其中一個指令:
root #
stonith -L
或
root #
crm ra list stonith
STONITH 裝置可分為以下類別:
- 配電裝置 (PDU)
在管理重要網路、伺服器和資料中心裝置的電源容量和功能方面,配電設備扮演著至關重要的角色。它們可以提供已連接設備的遠端負載監控功能,並可進行個別插座電源控制以實現遠端電能回收。
- 不斷電供電系統 (UPS)
市電電源中斷時,透過其他來源供電的穩定供電系統可為連接的裝置提供應急電能。
- 刀鋒電源控制裝置
如果您在一組刀鋒上執行叢集,則刀鋒機箱中的電源控制裝置是圍籬區隔唯一的候選裝置。當然,此裝置必須能夠管理單一刀鋒電腦。
- 無人職守裝置
無人職守裝置 (IBM RSA、HP iLO、Dell DRAC) 越來越受歡迎,甚至可能會成為現貨電腦的標準裝置。不過,它們略遜於 UPS 裝置,因為它們與其主機 (叢集節點) 共享電源。如果節點斷電,則應該控制該節點的裝置就失去作用。此時,CRM 仍會不斷嘗試圍籬區隔該節點,而所有其他資源操作都需要等待該圍籬區隔/STONITH 操作完成。
- 測試裝置
測試裝置專用於測試用途。在硬體上,對測試裝置的要求通常比較寬松。在叢集投入運營之前,必須以真正的圍籬區隔裝置取代這些裝置。
選擇何種 STONITH 裝置主要取決於您的預算及所使用的硬體類型。
10.2.2 STONITH 實作 #
SUSE® Linux Enterprise High Availability Extension 的 STONITH 實作包含兩個元件:
- pacemaker-fenced
pacemaker-fenced 是一個可由本地程序或透過網路進行存取的精靈。
它接受圍籬區隔操作的相應指令,包括重設、關機和開機。它還可以檢查圍籬區隔裝置的狀態。pacemaker-fenced
精靈在高可用性叢集中的每個節點上執行。在 DC 節點上執行的pacemaker-fenced
例項接收來自pacemaker-controld
的圍籬區隔要求。須由此程式及其他pacemaker-fenced
程式決定是否執行所需的圍籬區隔動作。- STONITH 外掛程式
每個受支援的圍籬區隔裝置都有一個可控制該裝置的 STONITH 外掛程式。STONITH 外掛程式是圍籬區隔裝置的介面。STONITH 外掛程式包含在 cluster-glue 套件中,位於每個節點的
/usr/lib64/stonith/plugins
下。(如果您同時安裝了 fence-agents 套件,則會將其中包含的外掛程式安裝在/usr/sbin/fence_*
下。)對於pacemaker-fenced
而言,所有 STONITH 外掛程式看起來都是一樣的,但在反映圍籬區隔裝置性質這一方面則大不相同。某些外掛程式支援多部裝置。典型範例為
ipmilan
(或external/ipmi
),它實作 IPMI 通訊協定並可控制支援此通訊協定的任何裝置。
10.3 STONITH 資源和組態 #
若要設定圍籬區隔,您需要設定一或多個 STONITH 資源,pacemaker-fenced
精靈不需要任何組態設定。所有組態皆儲存在 CIB 中。STONITH 資源就是類別為 stonith
的資源 (請參閱第 6.3.2 節 「受支援的資源代辦類別」)。STONITH 資源是 STONITH 外掛程式在 CIB 中的表示。除圍籬區隔操作之外,還可對 STONITH 資源執行啟動、停止和監控操作,就如同對任何其他資源一樣。啟動或停止 STONITH 資源意味著載入和卸載節點上的 STONITH 裝置驅動程式。因此,啟動和停止只是管理操作,不能轉換為圍籬區隔裝置本身的任何操作。但是,監控並不意味著需要登入裝置 (若要驗證在需要時裝置是否會正常運作)。當 STONITH 資源容錯移轉至另一個節點後,會載入相應驅動程式以使目前節點可與 STONITH 裝置通訊。
您可以像對任何其他資源一樣來設定 STONITH 資源。以下為如何使用偏好的叢集管理工具執行這些操作的詳細資料:
參數 (屬性) 清單的內容取決於 STONITH 的相應類型。若要檢視特定裝置的參數清單,請使用 stonith
指令:
stonith -t stonith-device-type -n
例如,若要檢視 ibmhmc
裝置類型的參數,請輸入以下指令:
stonith -t ibmhmc -n
若要取得裝置的簡短說明文字,請使用 -h
選項:
stonith -t stonith-device-type -h
10.3.1 STONITH 資源組態範例 #
下面提供了使用 crm
指令行工具的語法撰寫的一些範例組態。若要套用它們態,請將範例放入文字檔中 (例如,sample.txt
),然後執行以下指令:
root #
crm
< sample.txt
如需有關使用 crm
指令行工具設定資源的詳細資訊,請參閱第 8 章 「設定和管理叢集資源 (指令行)」。
可按如下所示設定 IBM RSA 無人職守裝置:
configure primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \ params nodename=alice ip_address=192.168.0.101 \ username=USERNAME password=PASSW0RD primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \ params nodename=bob ip_address=192.168.0.102 \ username=USERNAME password=PASSW0RD location l-st-alice st-ibmrsa-1 -Mandatory: alice location l-st-bob st-ibmrsa-2 -Mandatory: bob commit
本範例中使用了位置條件約束,這是因為 STONITH 操作失敗的可能性總是存在,所以,在做為執行者的節點上的 STONITH 操作也不可靠。如果重設節點,它將無法傳送關於圍籬區隔操作結果的通知。想傳送通知的唯一方法是,假設操作即將成功,然後提前傳送通知。但如果操作失敗,可能就會出現問題。因此,依照慣例,pacemaker-fenced
拒絕終止其主機。
UPS 類型圍籬區隔裝置的組態與上述範例相似。此處不做詳述。所有 UPS 裝置都採用相同的機制進行圍籬區隔,而存取裝置的方式卻有所不同。舊式 UPS 裝置只有一個序列埠,通常會使用特殊的序列纜線以 1200 鮑率進行連接。許多新型 UPS 裝置仍然只有一個序列埠,但它們通常還使用 USB 或乙太網路介面。可以使用的連接類型取決於外掛程式所支援的類型。
例如,使用 stonith -t
stonith 裝置類型
-n 指令比較 apcmaster
與 apcsmart 裝置:
stonith -t apcmaster -h
傳回下列資訊:
STONITH Device: apcmaster - APC MasterSwitch (via telnet) NOTE: The APC MasterSwitch accepts only one (telnet) connection/session a time. When one session is active, subsequent attempts to connect to the MasterSwitch will fail. For more information see http://www.apc.com/ List of valid parameter names for apcmaster STONITH device: ipaddr login password For Config info [-p] syntax, give each of the above parameters in order as the -p value. Arguments are separated by white space. Config file [-F] syntax is the same as -p, except # at the start of a line denotes a comment
使用
stonith -t apcsmart -h
您將取得下列輸出:
STONITH Device: apcsmart - APC Smart UPS (via serial port - NOT USB!). Works with higher-end APC UPSes, like Back-UPS Pro, Smart-UPS, Matrix-UPS, etc. (Smart-UPS may have to be >= Smart-UPS 700?). See http://www.networkupstools.org/protocols/apcsmart.html for protocol compatibility details. For more information see http://www.apc.com/ List of valid parameter names for apcsmart STONITH device: ttydev hostlist
第一個外掛程式支援具有網路埠和 Telnet 通訊協定的 APC UPS。第二個外掛程式使用 APC SMART 通訊協定 (透過眾多 APC UPS 產品線皆支援的序列線)。
Kdump 屬於特殊圍籬區隔裝置,實際上與圍籬區隔裝置相反。該外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回 true,並且在執行作業時將節點視為已圍籬區隔。
必須以與其他真實的 STONITH 裝置 (例如 external/ipmi
) 一致的方式使用 Kdump 外掛程式。若要正常運作圍籬區隔機制,必須在觸發真實的 STONITH 裝置之前,指定 Kdump 已經過檢查。請依以下程序中所述,使用 crm configure fencing_topology
來指定圍籬區隔裝置的順序。
使用
stonith:fence_kdump
資源代辦 (由套件 fence-agents 提供),以監控啟用了 Kdump 功能的所有節點。下面提供了資源的組態範例:configure primitive st-kdump stonith:fence_kdump \ params nodename="alice "\ 1 pcmk_host_check="static-list" \ pcmk_reboot_action="off" \ pcmk_monitor_action="metadata" \ pcmk_reboot_retries="1" \ timeout="60" commit
要監控的節點名稱。如果您需要監控多個節點,請設定更多 STONITH 資源。若要防止特定節點使用圍籬區隔裝置,請新增位置條件約束。
圍籬區隔動作將在資源逾時後啟動。
在每個節點上的
/etc/sysconfig/kdump
中,將KDUMP_POSTSCRIPT
設定為在完成 Kdump 程序後向所有節點傳送通知。例如:/usr/lib/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charlie [...]
執行 Kdump 的節點將在完成 Kdump 後自動重新啟動。
寫入新的
initrd
,以包含支援網路的fence_kdump_send
庫。使用-f
選項覆寫現有檔案,以便在下一次開機程序中使用新檔案:root #
dracut -f -a kdump在防火牆中針對
fence_kdump
資源開啟一個連接埠。預設的埠是7410
。為了能夠在觸發真實的圍籬區隔機制 (例如
external/ipmi
) 之前檢查 Kdump,請使用類似以下的組態:fencing_topology \ alice: kdump-node1 ipmi-node1 \ bob: kdump-node2 ipmi-node2
如需
fencing_topology
的詳細資訊:crm configure help fencing_topology
10.4 監控圍籬區隔裝置 #
如同任何其他資源一樣,STONITH 類別代辦也支援用於檢查狀態的監控操作。
您應定期監控 STONITH 資源,但不宜過於頻繁。對大多數裝置而言,不低於 1800 秒 (30 分鐘) 的監控間隔應已足夠。
圍籬區隔裝置是 HA 叢集必不可少的一部分,但需要用到它們的情況卻是越少越好。電源管理設備常常會受到大量廣播流量的影響。有些裝置在每分鐘達到十個左右連接時便無法處理。如果兩個用戶端同時嘗試連接,有些裝置還會發生混淆。大部分裝置都不能同時處理多個工作階段。
通常,只需每隔幾個小時檢查一次圍籬區隔裝置的狀態即可。需要執行圍籬區隔操作以及電源開關發生故障的機率很小。
如需如何使用指令行設定監控操作的詳細資訊,請參閱第 8.3.9 節 「設定資源監控」。
10.5 特殊圍籬區隔裝置 #
除了用於處理實際 STONITH 裝置的外掛程式外,我們還提供了一些用於特別目的的 STONITH 外掛程式。
下面提到的一些 STONITH 外掛程式僅用於演示和測試目的。請不要在實際情況中使用以下任一裝置,否則可能會導致資料毀損以及無法預期的後果:
external/ssh
ssh
fence_kdump
此外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回
true
,並且在執行操作時將節點視為已圍籬區隔。節點在傾印期間無法執行任何資源。這樣可避免圍籬區隔已關閉但正在傾印的節點,省下相應的時間。外掛程式必須與另一個實際的 STONITH 裝置搭配使用。如需組態詳細資料,請參閱範例 10.3 「Kdump 裝置的組態」。
external/sbd
這是一個自我圍籬區隔裝置。它會對可插入到共享磁碟中的所謂「毒藥丸」做出反應。當共享儲存的連接中斷時,該裝置會讓節點停止運作。若要瞭解如何使用此 STONITH 代辦執行基於儲存區的圍籬區隔,請參閱第 11 章、程序 11.7 「將叢集設定為使用 SBD」。也可參閱 http://www.linux-ha.org/wiki/SBD_Fencing 以取得詳細資料。
重要:external/sbd
和 DRBDexternal/sbd
圍籬區隔機制要求從每個節點都能直接讀取 SBD 分割區。因此不能使用 DRBD* 裝置存取 SBD 分割區。但您可以對 DRBD 叢集使用圍籬區隔機制,前提是 SBD 分割區位於並非鏡像複製或複製的共享磁碟上。
external/ssh
另一個基於軟體的「圍籬區隔」機制。各節點之間必須能夠以
root
身分相互登入,且無需輸入密碼。該機制需要一個參數hostlist
,指定它的目標節點。由於無法重設實際發生故障的節點,因此該機制不能用於實際的叢集,只能用於測試和演示。如果將其用於共享儲存,可能會導致資料毀損。meatware
meatware
需要使用者協助才能運作。呼叫meatware
時,它會記錄 CRIT 嚴重程度訊息,該訊息會在節點的主控台上顯示。然後,操作員會確認該節點已關閉,並發出meatclient(8)
指令。此指令指示meatware
通知叢集應將該節點視為已停止。如需詳細資訊,請參閱/usr/share/doc/packages/cluster-glue/README.meatware
。suicide
這是一個僅限軟體的裝置,它可以使用
reboot
指令重新開機執行它所在的節點。這需要由節點的作業系統執行動作,在某些情況下可能會失敗。因此,應儘可能避免使用此裝置。不過,在一個節點的叢集上使用還是安全的。- 無磁碟 SBD
如果您想要建立一個不含共享儲存的圍籬區隔機制,則此組態十分有用。在此無磁碟模式下,SBD 會使用硬體監視程式來圍籬區隔節點,而不依賴於任何共享裝置。不過,無磁碟 SBD 不能處理雙節點叢集的電腦分裂情況。此選項僅適用於具有兩個以上節點的叢集。
suicide
是「I do not shoot my host」(我自己不關閉我的主機) 規則的唯一例外。
10.6 基本建議 #
請查看以下建議清單,以免發生常見錯誤:
不要同時設定多個電源開關。
若要測試您的 STONITH 裝置及其組態,請拔下每個節點上的插頭,並驗證相應節點是否發生圍籬區隔。
在加有負載的情況下測試您的資源,並驗證逾時值是否合適。設定的逾時值太小可能會觸發 (不必要的) 圍籬區隔操作。如需詳細資訊,請參閱第 6.3.9 節 「逾時值」。
針對您的設定使用適當的圍籬區隔裝置。如需詳細資料,另請參閱第 10.5 節 「特殊圍籬區隔裝置」。
設定一或多個 STONITH 資源。依預設,全域叢集選項
stonith-enabled
設為true
。如果未定義 STONITH 資源,叢集將拒絕啟動任何資源。由於以下原因,請不要將全域叢集選項
stonith-enabled
設定為false
:系統不支援未啟用 STONITH 的叢集。
DLM/OCFS2 不允許永久等待一個永遠不會發生的圍籬區隔操作。
不要將全域叢集選項
startup-fencing
設定為false
。由於以下原因,該選項預設設定為true
:如果節點在叢集啟動期間處於未知狀態,系統將圍籬區隔該節點一次,以確定其狀態。
10.7 更多資訊 #
/usr/share/doc/packages/cluster-glue
在安裝的系統中,此目錄包含許多 STONITH 外掛程式和裝置的讀我檔案。
- http://www.linux-ha.org/wiki/STONITH
有關 STONITH 的資訊位於 High Availability Linux Project 的首頁中。
- http://www.clusterlabs.org/pacemaker/doc/
《Pacemaker Explained》(Pacemaker 說明):說明設定 Pacemaker 時用到的概念。包含全面詳盡的參考資訊。
- http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html
說明 HA 叢集中的電腦分裂、最低節點數和圍籬區隔之概念的文章。