套用至 SUSE Linux Enterprise High Availability Extension 12 SP5

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) 越來越受歡迎,甚至可能會成為現貨電腦的標準裝置。但是,如果這些裝置與其主機 (一個叢集節點) 共用電源,則它們可能無法按需運作。如果節點斷電,則應該控制該節點的裝置就失去作用。因此,建議使用備用電池無人職守裝置。另一方面,這些裝置是透過網路存取的。這意味著可能存在單一故障點或安全隱患。

測試裝置

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

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

10.2.2 STONITH 實作

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

stonithd

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

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

STONITH 外掛程式

每個受支援的圍籬區隔裝置都有一個可控制該裝置的 STONITH 外掛程式。STONITH 外掛程式是圍籬區隔裝置的介面。cluster-glue 套件中的 STONITH 外掛程式位於每個節點上的 /usr/lib64/stonith/plugins 中。(如果您還安裝了 fence-agents 套件,該套件中的外掛程式將安裝在 /usr/sbin/fence_* 中。)對於 stonithd 而言,所有 STONITH 外掛程式看起來都是一樣的,但在反映圍籬區隔裝置性質這一方面則大不相同。

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

10.3 STONITH 資源和組態

若要設定圍籬區隔,您需要設定一或多個 STONITH 資源,stonithd 精靈不需要任何組態設定。所有組態皆儲存在 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 章 「設定和管理叢集資源 (指令行)

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

可按如下所示設定 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 -inf: alice
location l-st-bob st-ibmrsa-2 -inf: bob
commit

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

範例 10.2︰ UPS 圍籬區隔裝置組態

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

使用

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

範例 10.3︰ Kdump 裝置的組態

Kdump 屬於特殊圍籬區隔裝置,實際上與圍籬區隔裝置相反。該外掛程式可檢查節點上是否正在執行核心傾印。如果是,它會傳回 true,並且在執行作業時將節點視為已圍籬區隔。

必須以與其他真實的 STONITH 裝置 (例如 external/ipmi) 一致的方式使用 Kdump 外掛程式。若要正常運作圍籬區隔機制,必須在觸發真實的 STONITH 裝置之前,指定 Kdump 已經過檢查。請依以下程序中所述,使用 crm configure fencing_topology 來指定圍籬區隔裝置的順序。

  1. 使用 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

    1

    要監控的節點名稱。如果您需要監控多個節點,請設定更多 STONITH 資源。若要防止特定節點使用圍籬區隔裝置,請新增位置條件約束。

    圍籬區隔動作將在資源逾時後啟動。

  2. 在每個節點上的 /etc/sysconfig/kdump 中,將 KDUMP_POSTSCRIPT 設定為在完成 Kdump 程序後向所有節點傳送通知。例如︰

    /usr/lib/fence_kdump_send -i INTERVAL -p PORT -c 1 alice bob charlie [...]

    執行 Kdump 的節點將在完成 Kdump 後自動重新啟動。

  3. 寫入新的 initrd,以包含支援網路的 fence_kdump_send 庫。使用 -f 選項覆寫現有檔案,以便在下一次開機程序中使用新檔案︰

    root # dracut -f -a kdump
  4. 在防火牆中針對 fence_kdump 資源開啟一個連接埠。預設的埠是 7410

  5. 為了能夠在觸發真實的圍籬區隔機制 (例如 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 資源

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

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

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

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

10.5 特殊圍籬區隔裝置

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

警告
警告:僅供測試之用

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

  • external/ssh

  • ssh

fence_kdump

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

如需組態詳細資料,請參閱範例 10.3 「Kdump 裝置的組態」

external/sbd

這是一個自我圍籬區隔裝置。它會對可插入到共享磁碟中的所謂毒藥丸做出反應。當共享儲存的連接中斷時,該裝置會讓節點停止運作。若要瞭解如何使用此 STONITH 代辦執行基於儲存區的圍籬區隔,請參閱第 11 章程序 11.7 「將叢集設定為使用 SBD」。也可參閱 https://github.com/ClusterLabs/sbd 以取得詳細資料。

重要
重要: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

suicide

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

無磁碟 SBD

如果您想要建立一個不含共享儲存的圍籬區隔機制,則此組態十分有用。在此無磁碟模式下,SBD 會使用硬體監視程式來圍籬區隔節點,而不依賴於任何共享裝置。不過,無磁碟 SBD 不能處理雙節點叢集的電腦分裂情況。因此,要使用無磁碟 SBD,叢集需要有三個或更多節點。

suicideI 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://clusterlabs.org/pacemaker/doc/crm_fencing.html

關於 STONITH 的資訊。

http://www.clusterlabs.org/doc/
  • Pacemaker Explained》(Pacemaker 說明)︰說明設定 Pacemaker 時用到的概念。包含全面詳盡的參考資訊。

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

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

列印此頁面