套用至 SUSE Linux Enterprise High Availability Extension 12

8 圍籬區隔與 STONITH

在 HA (High Availability) 的電腦叢集中,圍籬區隔是一個極其重要的概念。叢集有時會偵測到其中一個節點行為異常,需要將其移除。這稱為「圍籬區隔」,通常透過 STONITH 資源來執行。可將圍籬區隔定義為讓 HA 叢集處於已知狀態一種方法。

叢集中的每個資源都有相關的狀態。例如:資源 r1 已在 alice 上啟動。在 HA 叢集中,這樣的狀態隱含資源 r1 已在除節點 alice 之外的所有節點上停止的含義,因為叢集必須確保每個資源只能在一個節點上啟動。每個節點都必須報告資源發生的每一項變更。因此,叢集狀態是資源狀態和節點狀態的集合。

如果無法確切判斷某個節點或資源的狀態,就會觸發圍籬區隔。即使叢集未注意到指定節點上發生了狀況,圍籬區隔也可以確保該節點不會執行任何重要的資源。

8.1 圍籬區隔的類別

有兩類圍籬區隔:資源層級圍籬區隔和節點層級圍籬區隔。後者為本章的主要主題。

資源層級圍籬區隔

如果使用資源層級圍籬區隔,叢集可以確保節點無法存取一或多個資源。一個典型範例為 SAN,在此範例中,圍籬區隔操作會變更 SAN 交換器上的規則,以拒絕從節點進行存取。

資源層級的圍籬區隔可利用要保護之資源所依賴的一般資源來實現。此資源只需拒絕在此節點上啟動,所依賴的資源亦不會在該節點上執行。

節點層級圍籬區隔

節點層級圍籬區隔可確保節點不會執行任何資源。這通常可以透過一種簡單但稍嫌強制的方法來實現:重設或關閉節點。

8.2 節點層級圍籬區隔

SUSE® Linux Enterprise High Availability Extension 中,圍籬區隔透過 STONITH (Shoot The Other Node in the Head) 來實現。它提供節點層級的圍籬區隔。High Availability Extension 提供了 stonith 指令行工具,此為一個可擴充介面,用於從遠端關閉叢集中的節點。如需可用選項的綜覽,請執行 stonith --help,如需詳細資訊,請參閱 stonith 的 man 頁面。

8.2.1 STONITH 裝置

若要使用節點層級圍籬區隔,首先需要擁有一個圍籬區隔裝置。若要取得 High Availability Extension 支援的 STONITH 裝置清單,請在任何節點上以 root 身分執行以下指令:

stonith -L

STONITH 裝置可分為以下類別:

配電裝置 (PDU)

在管理重要網路、伺服器和資料中心設備的電源容量和功能方面,配電裝置扮演著至關重要的角色。它們可以提供已連接設備的遠端負載監控功能,並可進行個別插座電源控制以實現遠端電能回收。

不斷電供電系統 (UPS)

市電電源中斷時,透過其他來源供電的穩定供電系統可為連接的設備提供應急電能。

刀鋒電源控制裝置

如果您在一組刀鋒上執行叢集,則刀鋒機箱中的電源控制裝置是圍籬區隔唯一的候選裝置。當然,此裝置必須能夠管理單一刀鋒電腦。

無人職守裝置

無人職守裝置 (IBM RSA、HP iLO、Dell DRAC) 越來越受歡迎,甚至可能會成為現貨電腦的標準裝置。不過,它們略遜於 UPS 裝置,因為它們與其主機 (叢集節點) 共享電源。如果節點斷電,則應該控制該節點的裝置就失去作用。此時,CRM 仍會不斷嘗試圍籬區隔該節點,而所有其他資源操作都需要等待該圍籬區隔/STONITH 操作完成。

測試裝置

測試裝置專用於測試用途。在硬體上,對測試裝置的要求通常比較寬松。在叢集投入運營之前,必須以真正的圍籬區隔裝置取代這些裝置。

選擇何種 STONITH 裝置主要取決於您的預算及所使用的硬體類型。

8.2.2 STONITH 實作

SUSE® Linux Enterprise High Availability Extension 的 STONITH 實作包含兩個元件:

stonithd

stonithd 是一個可由本地程序或透過網路進行存取的精靈。它接受圍籬區隔操作的相應指令,包括重設、關機和開機。它還可以檢查圍籬區隔裝置的狀態。

stonithd 精靈在 CRM HA 叢集中的每個節點上執行。在 DC 節點上執行的 stonithd 例項接收來自 CRM 的圍籬區隔要求。須由此程式及其他 stonithd 程式決定是否執行所需的圍籬區隔操作。

STONITH 外掛程式

每個受支援的圍籬區隔裝置都有一個可控制該裝置的 STONITH 外掛程式。STONITH 外掛程式是圍籬區隔裝置的介面。在每個節點上,所有 STONITH 外掛程式都位於 /usr/lib/stonith/plugins 中 (在 64 位元架構中,其目錄為 /usr/lib 64/stonith/plugins)。對於 stonithd 而言,所有 STONITH 外掛程式看起來都是一樣的,但在反映圍籬區隔裝置性質這一方面則大不相同。

某些外掛程式支援多個裝置。典型範例為 ipmilan (或 external/ipmi),它實作 IPMI 通訊協定並可控制支援此通訊協定的任何裝置。

8.3 STONITH 組態

若要設定圍籬區隔,您需要設定一或多個 STONITH 資源,stonithd 精靈不需要任何組態設定。所有組態皆儲存在 CIB 中。STONITH 資源就是類別為 stonith 的資源 (請參閱第 4.2.2 節「受支援的資源代辦類別」)。STONITH 資源是 STONITH 外掛程式在 CIB 中的表示。除圍籬區隔操作之外,還可對 STONITH 資源執行啟動、停止和監控操作,就如同對任何其他資源一樣。啟動或停止 STONITH 資源意味著載入和卸載節點上的 STONITH 裝置驅動程式。因此,啟動和停止只是管理操作,不能轉換為圍籬區隔裝置本身的任何操作。但是,監控並不意味著需要登入裝置 (若要驗證在需要時裝置是否會正常運作)。當 STONITH 資源容錯移轉至另一個節點後,會載入相應驅動程式以使目前節點可與 STONITH 裝置通訊。

您可以像對任何其他資源一樣來設定 STONITH 資源。如需有關設定資源的詳細資訊,請參閱第 5.3.3 節「建立 STONITH 資源」第 6.4.3 節「建立 STONITH 資源」

參數 (屬性) 清單的內容取決於 STONITH 的相應類型。若要檢視特定裝置的參數清單,請使用 stonith 指令︰

stonith -t stonith-device-type -n

例如,若要檢視 ibmhmc 裝置類型的參數,請輸入以下指令:

stonith -t ibmhmc -n

若要取得裝置的簡短說明文字,請使用 -h 選項:

stonith -t stonith-device-type -h

8.3.1 STONITH 資源組態範例

下面提供了使用 crm 指令行工具的語法撰寫的一些範例組態。若要套用它們態,請將範例放入文字檔中 (例如,sample.txt),然後執行以下指令:

root # crm < sample.txt

如需有關使用 crm 指令行工具設定資源的詳細資訊,請參閱第 6 章「設定和管理叢集資源 (指令行)

警告
警告:測試組態

下面提供的一些範例僅用於示範和測試用途。切勿在現實叢集案例中使用任何測試組態範例。

範例 8.1 測試組態

configure
primitive st-null stonith:null \
params hostlist="alice bob"
clone fencing st-null
commit
   
範例 8.2 測試組態

代用組態:

configure
 primitive st-alice stonith:null \
 params hostlist="alice"
 primitive st-bob stonith:null \
 params hostlist="bob"
 location l-st-alice st-alice -inf: alice
 location l-st-bob st-bob -inf: bob
 commit

如果關注叢集軟體,則此組態範例極其適用。與現實組態的唯一區別在於不發生任何圍籬區隔操作。

範例 8.3 測試組態

下面的 external/ssh 組態是一個更貼近實際的範例 (但仍然只用於測試):

configure
 primitive st-ssh stonith:external/ssh \
 params hostlist="alice bob"
 clone fencing st-ssh
 commit

此組態也可重設節點。該組態與第一個組態 (為空 STONITH 裝置) 相似。在此範例中,將使用複製品。它們是 CRM/Pacemaker 功能。複製是一種捷徑:不需要定義 n 個名稱不同的相同資源,只需一個複製的資源就已足夠。複製品最常見的用法無疑是與 STONITH 資源一起使用,但前提是所有節點都可存取 STONITH 裝置。

範例 8.4 IBM RSA 無人職守裝置組態

實際裝置組態並沒有明顯差異,雖然某些裝置可能需要更多屬性。可按如下所示設定 IBM RSA 無人職守裝置:

configure
primitive st-ibmrsa-1 stonith:external/ibmrsa-telnet \
params nodename=alice ipaddr=192.168.0.101 \
userid=USERID passwd=PASSW0RD
primitive st-ibmrsa-2 stonith:external/ibmrsa-telnet \
params nodename=bob ipaddr=192.168.0.102 \
userid=USERID passwd=PASSW0RD
location l-st-alice st-ibmrsa-1 -inf: alice
location l-st-bob st-ibmrsa-2 -inf: bob
commit

本範例中使用了位置條件約束,這是因為 STONITH 操作失敗的可能性總是存在,所以,在做為執行者的節點上的 STONITH 操作也不可靠。如果重設節點,它將無法傳送關於圍籬區隔操作結果的通知。想傳送通知的唯一方法是,假設操作即將成功,然後提前傳送通知。但如果操作失敗,可能就會出現問題。因此,依照慣例,stonithd 拒絕終止其主機。

範例 8.5 UPS 圍籬區隔裝置組態

UPS 類型圍籬區隔裝置的組態與上述範例相似。此處不做詳述。所有 UPS 裝置都採用相同的機制進行圍籬區隔,而存取裝置的方式卻有所不同。舊式 UPS 裝置只有一個序列埠,通常會使用特殊的序列纜線以 1200 鮑率進行連接。許多新型 UPS 裝置仍然只有一個序列埠,但它們通常還使用 USB 或乙太網路介面。可以使用的連線類型取決於外掛程式所支援的類型。

例如,使用 stonith -t stonith 裝置類型 -n 指令比較 apcmasterapcsmart 裝置:

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

使用

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 need 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 產品線皆支援的序列線)。

8.3.2 條件約束與複製品

正如第 8.3.1 節「STONITH 資源組態範例」 所述,設定 STONITH 資源的方法有數種:使用條件約束、複製品或兩者皆用。選擇使用何種構想進行組態設定取決於幾項因素:圍籬區隔裝置的性質、裝置管理的主機數、叢集節點數,或個人優先設定。

如果在您的組態中使用複製品不會帶來不良後果,且它們確實可以減輕組態設定工作,則可以使用複製的 STONITH 資源。

8.4 監控圍籬區隔裝置

如同任何其他資源一樣,STONITH 類別代辦也支援用於檢查狀態的監控操作。

注意
注意:監控 STONITH 資源

您應定期監控 STONITH 資源,但不宜過於頻繁。對大多數裝置而言,不低於 1800 秒 (30 分鐘) 的監控間隔應已足夠。

圍籬區隔裝置是 HA 叢集必不可少的一部分,但需要用到它們的情況卻是越少越好。電源管理設備常常會受到大量廣播流量的影響。有些裝置在每分鐘達到十個左右連線時便無法處理。如果兩個用戶端同時嘗試連接,有些裝置還會發生混淆。大部分裝置都不能同時處理多個工作階段。

通常,只需每隔幾個小時檢查一次圍籬區隔裝置的狀態即可。需要執行圍籬區隔操作以及電源開關發生故障的機率很小。

如需如何使用指令行設定監控操作的詳細資訊,請參閱第 6.4.8 節「設定資源監控」

8.5 特殊圍籬區隔裝置

除了用於處理實際 STONITH 裝置的外掛程式外,我們還提供了一些用於特別目的的 STONITH 外掛程式。

警告
警告:僅供測試之用

下面提到的一些 STONITH 外掛程式僅用於演示和測試目的。請不要在實際情況中使用以下任一裝置,否則可能會導致資料毀損以及無法預期的後果:

  • external/ssh

  • ssh

  • null

external/kdumpcheck

此外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回 true,並且在執行操作時將節點視為已圍籬區隔。節點在傾印期間無法執行任何資源。這樣可避免圍籬區隔已關閉但正在傾印的節點,省下相應的時間。外掛程式必須與另一個實際的 STONITH 裝置搭配使用。如需詳細資料,請參閱 /usr/share/doc/packages/cluster-glue/README_kdumpcheck.txt

external/sbd

這是一個自我圍籬區隔裝置。它會對可插入到共享磁碟中的所謂毒藥丸做出反應。當共享儲存的連接中斷時,該裝置會讓節點停止運作。若要瞭解如何使用此 STONITH 代辦執行基於儲存的圍籬區隔,請參閱第 17 章「儲存保護。也可參閱 http://www.linux-ha.org/wiki/SBD_Fencing 以取得詳細資料。

重要
重要:external/sbd 和 DRBD

external/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

null

這是一個虛構的裝置,用於各種測試案例。它總是聲稱自己關閉了一個節點,但從來不會執行任何動作。除非您完全瞭解所執行的操作,否則切勿使用它。

suicide

這是一個僅限軟體的裝置,它可以使用 reboot 指令重新開機執行它所在的節點。這需要由節點的作業系統執行動作,在某些情況下可能會失敗。因此,應儘可能避免使用此裝置。不過,在一個節點的叢集上使用還是安全的。

suicidenullI do not shoot my host(我自己不關閉我的主機) 規則唯一的例外。

8.6 基本建議

請查看以下建議清單,以免發生常見錯誤:

  • 不要同時設定多個電源開關。

  • 若要測試您的 STONITH 裝置及其組態,請拔下每個節點上的插頭,並驗證相應節點是否發生圍籬區隔。

  • 在加有負載的情況下測試您的資源,並驗證逾時值是否合適。設定的逾時值太小可能會觸發 (不必要的) 圍籬區隔操作。如需詳細資訊,請參閱第 4.2.9 節「逾時值」

  • 針對您的設定使用適當的圍籬區隔裝置。如需詳細資料,另請參閱第 8.5 節「特殊圍籬區隔裝置」

  • 設定一或多個 STONITH 資源。依預設,全域叢集選項 stonith-enabled 設為 true。如果未定義 STONITH 資源,叢集將拒絕啟動任何資源。

  • 由於以下原因,請不要將全域叢集選項 stonith-enabled 設定為 false

    • 系統不支援未啟用 STONITH 的叢集。

    • DLM/OCFS2 不允許永久等待一個永遠不會發生的圍籬區隔操作。

  • 不要將全域叢集選項 startup-fencing 設定為 false。由於以下原因,該選項預設設定為 true:如果節點在叢集啟動期間處於未知狀態,系統將圍籬區隔該節點一次,以確定其狀態。

8.7 更多資訊

/usr/share/doc/packages/cluster-glue

在安裝的系統中,此目錄包含許多 STONITH 外掛程式和裝置的讀我檔案。

http://www.linux-ha.org/wiki/STONITH

有關 STONITH 的資訊位於 The High Availability Linux Project 的首頁中。

http://www.clusterlabs.org/doc/
  • Fencing and Stonith》(圍籬區隔與 Stonith)︰有關圍籬區隔的資訊位於 Pacemaker Project 的首頁上。

  • Pacemaker Explained (Pacemaker 1.1 for Corosync 2.x and crmsh)》(Pacemaker 說明 (適用於 Corosync 2.x 與 crmsh 的 Pacemaker 1.1)):解釋設定 Pacemaker 時用到的概念。包含全面詳盡的資訊,以供參考。

http://techthoughts.typepad.com/managing_computers/2007/10/split-brain-quo.html

說明 HA 叢集中的電腦分裂、最低節點數和圍籬區隔之概念的文章。

列印此頁面