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

5 組態和管理基礎

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

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

5.1 使用案例情境

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

  • 雙節點叢集

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

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

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

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

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

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

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

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

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

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

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

5.2 仲裁判斷

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

仲裁不是由 Pacemaker 計算或確定。Corosync 可以直接處理雙節點叢集的仲裁,無需變更 Pacemaker 組態。

仲裁計算方式受以下因素的影響:

叢集節點數

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

N ≥ C/2 + 1

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

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

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

Corosync 組態

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

5.2.1 雙節點叢集的 Corosync 組態

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

範例 5.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
}

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

5.2.2 N 節點叢集的 Corosync 組態

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

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

  • 手動調整 Corosync 組態。

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

範例 5.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。如果三個或更多個節點彼此可見,則叢集分割區將達到法定數量,可以開始運作。

5.3 全域叢集選項

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

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

5.3.1 全域選項 no-quorum-policy

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

可用的值如下:

ignore

如果將 no-quorum-policy 設為 ignore,叢集分割區就會像其具有仲裁一樣運作,即使情況並非如此。叢集分割區可以發出圍籬區隔指令,並繼續進行資源管理。

在 SLES 11 中,建議對雙節點叢集使用此設定。從 SLES 12 開始,ignore 值已過時,不允許使用。Corosync 依據組態和條件為叢集節點或單個節點提供仲裁 — 或者不提供仲裁。

對於雙節點叢集,當節點發生故障時,唯一有意義的行為就是永遠做出回應。第一個步驟永遠應該是嘗試圍籬區隔遺失的節點。

freeze

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

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

stop (預設值)

如果失去仲裁能力,受影響的叢集分割區中的所有資源都會依序停止。

suicide

如果失去仲裁能力,受影響叢集分割區中的所有節點都會被圍籬區隔。此選項只能與 SBD 結合使用,具體請參閱第 13 章 「儲存保護和 SBD

5.3.2 全域選項 stonith-enabled

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

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

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

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

5.4 Hawk2 簡介

若要設定和管理叢集資源,請使用 Hawk2 或 crm 外圍程序 (crmsh) 指令列公用程式。

Hawk2 的使用者友好 Web 介面可讓您從 Linux 或非 Linux 機器監控和管理您的高可用性叢集。您可使用 (圖形) 網頁瀏覽器從叢集內外的任何機器存取 Hawk2。

5.4.1 Hawk2 要求

僅當系統符合以下要求後,使用者才能登入 Hawk2:

hawk2 套件

要透過 Hawk2 連接的所有叢集節點都必須已安裝 hawk2 套件。

網頁瀏覽器

在要使用 Hawk2 存取叢集節點的機器上,需要安裝啟用了 JavaScript 和 Cookie 的 (圖形) 網頁瀏覽器才能建立連接。

Hawk2 服務

若要使用 Hawk2,您要透過 Web 介面連接的節點上必須啟動相應的 Web 服務。請參閱程序 5.1 「啟動 Hawk2 服務」

如果您已使用 crm 外圍程序提供的開機程序檔設定叢集,那麼此時 Hawk2 服務已啟用。

每個叢集節點上的使用者名稱、群組和密碼

Hawk2 使用者必須是 haclient 群組的成員。安裝程序會建立名為 hacluster 的 Linux 使用者,該使用者已新增至 haclient 群組中。

使用 crm cluster init 程序檔進行設定時,將為 hacluster 使用者設定預設密碼。在啟動 Hawk2 之前,請將它變更為安全密碼。如果您未使用 crm cluster init 程序檔,請先為 hacluster 設定密碼,或者建立屬於 haclient 群組的新使用者。請在您要使用 Hawk2 與之連接的所有節點上執行此操作。

萬用字元證書處理

萬用字元證書是指對多個子網域有效的公用金鑰證書。例如,*.example.com 的萬用字元證書可以保障 login.example.comwww.example.com 等網域的安全。

Hawk2 支援萬用字元證書及可轉換證書。/srv/www/hawk/bin/generate-ssl-cert 可產生自行簽署的預設私密金鑰和證書。

若要使用您自己的證書 (可轉換或萬用字元證書),請以您自己的證書取代產生的證書 (位於 /etc/ssl/certs/hawk.pem 處)。

程序 5.1︰ 啟動 Hawk2 服務
  1. 在您要與之連接的節點上,開啟外圍程序並以 root 身分登入。

  2. 輸入以下指令檢查服務的狀態

    # systemctl status hawk
  3. 如果服務沒有執行,則使用以下指令將其啟動

    # systemctl start hawk

    如果希望 Hawk2 在開機時自動啟動,請執行以下指令:

    # systemctl enable hawk

5.4.2 登入

Hawk2 Web 介面使用 HTTPS 通訊協定和連接埠 7630

您無需使用 Hawk 登入個別叢集節點,而是可以將一個浮動的虛擬 IP 位址 (IPaddrIPaddr22) 設定為叢集資源。該位址無需任何特殊組態設定。如此,無論 Hawk 服務在哪個實體節點上執行,用戶端都可以連接到該服務。

在使用 crm 外圍程序提供的開機程序檔設定叢集時,系統會詢問您是否設定虛擬 IP 以用於叢集管理。

程序 5.2︰ 登入 Hawk2 Web 介面
  1. 在任一部機器上,啟動網頁瀏覽器並輸入以下 URL:

    https://HAWKSERVER:7630/

    使用執行 Hawk Web 服務的任何叢集節點的 IP 位址或主機名稱取代 HAWKSERVER。如果已設定虛擬 IP 位址以供您使用 Hawk2 進行叢集管理,請使用該虛擬 IP 位址取代 HAWKSERVER

    注意
    注意:證書警告

    當您首次嘗試存取該 URL 時,如果系統顯示證書警告,則表示使用了自行簽署的證書。依預設,自行簽署的證書不被視為可信證書。

    若要驗證證書,請聯絡叢集操作人員獲取證書詳細資料。

    若仍要繼續,您可以在瀏覽器中新增一個例外以略過此警告。

    如需關於如何將自行簽署的證書取代為官方證書管理中心所簽署證書的資訊,請參閱取代自行簽署的證書

  2. 在 Hawk2 登入螢幕中,輸入 hacluster使用者 (或任何屬於群組 haclient的其他使用者) 的使用者名稱密碼

  3. 按一下登入

5.4.3 Hawk2 綜覽:主要元素

登入 Hawk2 後,左側會顯示一個導覽列,右側會顯示一個頂層列,其中包含若干連結。

注意
注意:Hawk2 中的可用功能

依預設,以 roothacluster 身分登入的使用者對於所有叢集組態任務都擁有完整的讀-寫存取權限。不過,您可以使用存取控制清單 (ACL) 來定義精細的存取權限。

如果 CRM 中啟用了 ACL,則 Hawk2 的可用功能取決於指定給您的使用者角色及其所指定的存取權限。Hawk2 中的歷程總管只能由使用者 hacluster 來執行。

5.4.3.1 左側導覽列

監測
  • 狀態:扼要顯示當前的叢集狀態 (與 crmsh 上的 crm status 類似)。如需詳細資料,請參閱第 11.1.1 節 「監控單個叢集」。如果叢集包含 guest nodes (執行 pacemaker_remote 精靈的節點),這些節點也會顯示。螢幕重新整理頻率接近即時重新整理:任何節點或資源狀態的變更都幾乎立即可見。

  • 儀表板:可讓您監控多個叢集 (如果您設定了 Geo 叢集,則這些叢集還可以位於不同站點)。如需詳細資料,請參閱第 11.1.2 節 「監控多個叢集」。如果叢集包含 guest nodes (執行 pacemaker_remote 精靈的節點),這些節點也會顯示。螢幕重新整理頻率接近即時重新整理:任何節點或資源狀態的變更都幾乎立即可見。

疑難排解
  • 歷程:開啟可以用來產生叢集報告的歷程總管。如需詳細資料,請參閱第 11.3 節 「檢視叢集歷程」

  • 指令記錄:可列出近期由 Hawk2 執行的 crmsh 指令。

組態

5.4.3.2 頂層列

Hawk2 的頂層列顯示以下項目:

  • 批次:按一下可切換到批次模式。可用於模擬和分階段進行變更並透過單次交易套用這些變更。如需詳細資料,請參閱第 5.4.7 節 「使用批次模式」

  • USERNAME:可用於設定 Hawk2 的優先設定 (例如,Web 介面的語言,或者是否在 STONITH 處於停用狀態時顯示警告)。

  • 說明:存取 SUSE Linux Enterprise High Availability Extension 文件、閱讀版本說明或報告錯誤。

  • 登出:按一下可登出。

5.4.4 設定全域叢集選項

全域叢集選項控制叢集在遇到特定情況時的運作方式。它們分為不同的組,可透過 Hawk2 和 crmsh 等叢集管理工具來檢視和修改。一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數:

程序 5.3︰ 修改全域叢集選項
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 叢集組態

    叢集組態螢幕隨即開啟。它會顯示全域叢集選項及其當前的值。

    若要在螢幕右側顯示參數的簡要描述,請將游標懸停在該參數上。

    Hawk2 - 叢集組態
    圖 5.1︰ Hawk2 - 叢集組態
  3. 檢查 no-quorum-policystonith-enabled 的值,必要時予以調整:

    1. no-quorum-policy 設為適當的值。請參閱 第 5.3.1 節 「全域選項 no-quorum-policy,以取得詳細資料。

    2. 如果出於某種原因需要停用圍籬區隔,請將 stonith-enabled 設定為 no。依預設,該參數設定為 true,因為執行常規的叢集操作必須要使用 STONITH 裝置。依據預設值,如果未設定 STONITH 資源,叢集將拒絕啟動任何資源。

      重要
      重要:不支援沒有 STONITH 的組態
      • 您必須為叢集設定節點圍籬區隔機制。

      • 全域叢集選項 stonith-enabledstartup-fencing 必須設定為 true。如果您變更這些選項,將會失去支援。

    3. 若要從叢集組態中移除某個參數,請按一下該參數旁邊的減號圖示。如果某個參數被刪除,叢集會將該參數視為具有預設值。

    4. 若要將新參數新增至叢集組態,請從下拉式方塊中選擇一個參數。

  4. 如果您需要變更資源預設值操作預設值,請執行下列步驟:

    1. 若要調整值,請在下拉式方塊中選取其他值,或直接編輯該值。

    2. 若要新增新的資源預設值或操作預設值,請從空下拉式方塊中選擇一項,然後輸入值。如果已定義預設值,Hawk2 會自動提供這些預設值。

    3. 若要移除某個參數,請按一下該參數旁邊的減號圖示。如果沒有為資源預設值操作預設值指定值,叢集會使用第 6.12 節 「資源選項 (中繼屬性)」第 6.14 節 「資源操作」 中所述的預設值。

  5. 確認您的變更。

5.4.5 顯示目前的叢集組態 (CIB)

叢集管理員有時需要知道叢集組態。Hawk2 可以 crm 外圍程序語法、XML 和圖形形式顯示目前組態。若要檢視 crm 外圍程序語法形式的叢集組態,請從左側導覽列中選取組態 › 編輯組態,並按一下顯示。若要改為以原始 XML 顯示組態,請按一下 XML。按一下圖形會以圖形顯示 CIB 中設定的節點和資源。它還會顯示各資源之間的關係。

5.4.6 使用精靈新增資源

Hawk2 精靈是設定簡單資源 (如虛擬 IP 位址或 SBD STONITH 資源) 的便捷方式。對於包含多個資源的複雜組態 (例如 DRBD 區塊裝置或 Apache Web 伺服器的資源組態) 而言,這種方法也十分有用。精靈會引導您完成所有組態步驟,並提供您需要輸入的參數的相關資訊。

程序 5.4︰ 使用資源精靈
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 從左側導覽列中,選取組態 › 精靈

  3. 按一下具體類別旁邊的向下箭頭圖示,藉以擴大該類別,然後選取所需精靈。

  4. 按照螢幕上的指示執行操作。在最後一個設定步驟之後,驗證所輸入的值。

    Hawk2 會顯示它將執行的動作以及設定成果。根據組態,系統可能會提示您要先輸入 root 密碼,才能套用組態。

Hawk2 - Apache Web 伺服器精靈
圖 5.2︰ Hawk2 - Apache Web 伺服器精靈

如需詳細資訊,請參閱第 6 章 「設定叢集資源

5.4.7 使用批次模式

Hawk2 提供批次模式,包括叢集模擬器。該模式可用於以下操作:

  • 對叢集進行分階段變更並透過單次交易套用這些變更,而不是讓每項變更立即生效。

  • 模擬變更和叢集事件,例如,瞭解可能失敗的情況。

例如,在建立相互依賴的資源群組時,可以使用批次模式。透過使用批次模式,您可以避免將中繼或不完整的組態套用到叢集。

啟用批次模式後,您可以新增或編輯資源和條件約束,或變更叢集組態。此外,還可以模擬叢集中的事件,包括變為線上或離線的節點、資源操作,以及要授予或撤銷的票證。如需詳細資料,請參閱程序 5.6 「插入節點、資源或票證事件」

叢集模擬器會在每次變更後自動執行,並在使用者介面上顯示預期效果。舉例而言,這還意味著當您在批次模式下停止某資源時,使用者介面上會將該資源顯示為已停止,但實際上,該資源仍在執行中。

重要
重要:線上系統的精靈和變更

某些精靈包含除純叢集組態以外的其他動作。在批次模式下使用這些精靈時,叢集組態以外的任何其他變更都將立即套用到線上系統。

因此,需要 root 權限的精靈無法在批次模式下執行。

程序 5.5︰ 使用批次模式
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 若要啟用批次模式,請從頂層列選取批次

    頂層列下方即會另外顯示一列,指出批次模式處於使用中狀態,並會包含指向您可在批次模式下執行的動作的連結。

    Hawk2 批次模式已啟用
    圖 5.3︰ Hawk2 批次模式已啟用
  3. 當批次模式處於使用中狀態時,對叢集執行任意變更,例如新增或編輯資源和條件約束,或編輯叢集組態。

    系統將會模擬變更,並將其顯示在所有螢幕上。

  4. 若要檢視所做變更的詳細資料,請從批次模式列中選取顯示批次模式視窗即會開啟。

    對於任何組態變更,該模式會以 crmsh 語法顯示即時狀態與模擬變更之間的差異:以 - 字元開頭的行表示目前的狀態,而以 + 開頭的行則顯示預期狀態。

  5. 若要插入事件或檢視更多詳細資料,請參閱程序 5.6。否則請關閉視窗。

  6. 選擇是丟棄還是套用模擬的變更,然後確認您的選擇。此操作還會停用批次模式,使您回到正常模式。

在批次模式下執行時,Hawk2 還允許您插入節點事件資源事件

節點事件

可讓您變更節點的狀態。可用的狀態有線上離線不正常

資源事件

可讓您變更資源的一些內容。例如,您可以設定操作 (如 monitorstartstop)、操作要套用到的節點,以及要模擬的預期結果。

票證事件

可讓您測試授予和撤銷票證 (用於 Geo 叢集) 的影響。

程序 5.6︰ 插入節點、資源或票證事件
  1. 登入 Hawk2:

    https://HAWKSERVER:7630/
  2. 如果批次模式尚未啟動,請按一下頂層列上的批次以切換到批次模式。

  3. 在批次模式列中,按一下顯示以開啟批次模式視窗。

  4. 若要模擬節點的狀態變更:

    1. 按一下插入 › 節點事件

    2. 選取您要操作的節點,並選取其目標狀態

    3. 確認您的變更。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

  5. 若要模擬某個資源作業:

    1. 按一下插入 › 資源事件

    2. 選取要操作的資源和要模擬的操作

    3. 如有必要,請定義一個間隔

    4. 選取要在其上執行該操作的節點以及預期的結果。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

    5. 確認您的變更。

  6. 若要模擬票證動作:

    1. 按一下插入 › 票證事件

    2. 依次選取要操作的票證和要模擬的動作

    3. 確認您的變更。您的事件便會新增至批次模式對話方塊中所列的事件佇列中。

  7. 批次模式對話方塊 (圖形 5.4) 會為每個插入的事件顯示新的一行。此處列出的所有事件都會立即被模擬並反映到狀態螢幕上。

    如果您還進行了任何組態變更,線上狀態和模擬變更之間的差異會顯示在所插入事件的下方。

    Hawk2 批次模式 - 插入的事件和組態變更
    圖 5.4︰ Hawk2 批次模式 - 插入的事件和組態變更
  8. 若要移除插入的事件,請按一下該事件旁邊的移除圖示。Hawk2 會相應地更新狀態螢幕。

  9. 若要檢視模擬執行的更多詳細資料,請按一下模擬器並選擇以下選項之一:

    摘要

    顯示詳細的摘要。

    CIB (入)/CIB (出)

    CIB (入) 會顯示初始的 CIB 狀態。CIB (出) 會顯示轉換後 CIB 的情況。

    轉換圖表

    顯示轉換的圖形表示。

    移交

    顯示轉換的 XML 表示。

  10. 如果您已複查模擬的變更,請關閉批次模式視窗。

  11. 若要結束批次模式,請套用丟棄模擬的變更。

5.5 crmsh 簡介

若要設定和管理叢集資源,可以使用 crm 外圍程序 (crmsh) 指令列公用程式或 Hawk2 (Web 使用者介面)。

本節介紹指令列工具 crmcrm 指令有多個子指令,用於管理資源、CIB、節點、資源代理程式及其他。該指令提供包含內嵌式範例的完整說明系統。所有範例都遵循附錄 B 中所述的命名慣例。

事件記錄至 /var/log/crmsh/crmsh.log 中。

注意
注意:使用者權限

您需要有足夠的權限方可管理叢集。執行 crm 指令及其子指令的使用者需為 root 使用者或 CRM 擁有者使用者 (通常是使用者 hacluster)。

不過,user 選項可讓您以一般 (非特權) 使用者的身分執行 crm 指令及其子指令,並在需要時使用 sudo 指令變更使用者 ID。例如,在下面的指令中,crm 使用 hacluster 做為授權使用者 ID:

# crm options user hacluster

必須設定 /etc/sudoers,這樣 sudo 就不會要求提供密碼。

提示
提示:互動式 crm 提示符

使用不含引數 (或只含一個 sublevel 引數) 的 crm,crm 外圍程序將進入互動式模式。此模式由以下提示符指示:

crm(live/HOSTNAME)

為了容易閱讀,我們的文件在互動式 crm 提示符中省略了主機名稱。只有當您需要在特定節點 (如 alice) 上執行互動式外圍程序時,我們才會包含主機名稱,例如:

crm(live/alice)

5.5.1 取得說明

可以使用以下幾種方法來存取說明:

  • 若要輸出 crm 及其指令列選項的用法:

    # crm --help
  • 若要列出所有可用指令的清單:

    # crm help
  • 存取其他說明區段,而不僅僅是指令參考:

    # crm help topics
  • 若要檢視 configure 子指令的延伸說明文字:

    # crm configure help
  • 若要列印 groupconfigure 子指令的語法、用法和範例:

    # crm configure help group

    以下指令的作用相同:

    # crm help configure group

基本上 help 子指令 (不要與 --help 選項混淆) 的所有輸出都會開啟一個文字編輯器。這個文字檢視器可讓您向上或向下捲動,更方便地閱讀說明文字。若要離開該文字檢視器,請按 Q 鍵。

提示
提示:在 Bash 和互動式外圍程序中使用 Tab 鍵補齊

crmsh 不僅對互動式外圍程序支援 Tab 鍵補齊,在 Bash 中也能直接全面支援此功能。例如,輸入 crm help config→| 會補齊文字,就像在互動式外圍程序中一樣。

5.5.2 執行 crmsh 的子指令

crm 指令本身的使用方式如下:

  • 直接:: 將所有子指令與 crm 結合使用,再按 Enter,便會立即顯示輸出。例如,輸入 crm help ra 可獲取有關 ra 子指令 (資源代理程式) 的資訊。

    可以縮寫子指令,前提是縮寫後的子指令是唯一的。例如,您可以將 status 縮寫為 st,crmsh 可以識別該縮寫。

    另一項功能是縮寫參數。通常,您會透過 params 關鍵字新增參數。如果 params 區段是第一個且是唯一存在的區段,則您可以省略它。例如,以下行:

    # crm primitive ipaddr IPaddr2 params ip=192.168.0.55

    相當於以下行:

    # crm primitive ipaddr IPaddr2 ip=192.168.0.55
  • 做為 crm 外圍程序程序檔:: 外圍程序程序檔包含 crmcrm 的子指令。如需詳細資訊,請參閱 第 5.5.4 節 「使用 crmsh 的外圍程序程序檔」

  • 做為 crmsh 叢集程序檔::這是中繼資料、對 RPM 套件的參照、組態檔案及使用單一描述性名稱同捆之 crmsh 子指令的集合。可以透過 crm script 指令來管理這些內容。

    請不要將它們與 crmsh 外圍程序程序檔相混淆:雖然兩者具有一些共同的目標,但 crm 外圍程序程序檔只包含子指令,而叢集程序檔所包含的遠遠不只是簡單的指令列舉。如需詳細資訊,請參閱 第 5.5.5 節 「使用 crmsh 的叢集程序檔」

  • 做為內部外圍程序互動:: 輸入 crm 可進入內部外圍程序。提示符會切換為 crm(live)。執行 help 可獲取可用子指令的綜覽。由於內部外圍程序有幾種不同層級的子指令,您可以輸入一個子指令並按 Enter進入此層級。

    例如,如果輸入 resource,便會進入資源管理層級。提示符會切換為 crm(live)resource#。若要離開內部外圍程序,請使用 quit 指令。如果需要回到上一個層級,可使用 backupendcd

    輸入 crm 和相應的子指令 (不帶任何選項) 並按 Enter,即可直接進入該層級。

    內部外圍程序還支援 Tab 鍵對子指令和資源的補齊功能。輸入指令的開頭,然後按 →|crm 便會補齊相應的物件。

crmsh 還支援執行同步指令。使用 -w 選項可以啟用該功能。如果已啟動 crm 但未指定 -w,之後可以將使用者首選的 wait 設為 yes (options wait yes) 來啟用它。如果啟用了此選項,crm 會一直等到轉換完成。每當啟動轉換後,就會顯示一些點來指出進度。同步的指令執行僅適用於 resource start 這樣的指令。

注意
注意:區分管理子指令與組態子指令

crm 工具有管理功能 (子指令 resourcenode),可用於進行組態設定 (configurecib)。

下面的小節概述了 crm 工具的重要方面。

5.5.3 顯示有關 OCF 資源代理程式的資訊

由於您始終都需要在叢集組態中處理資源代理程式,因此 crm 工具包含了 ra 指令。使用該指令可以顯示資源代理程式的相關資訊並對其進行管理 (如需其他資訊,另請參閱第 6.2 節 「支援的資源代理程式類別」):

# crm ra
crm(live)ra# 

指令 classes 可列出所有類別和提供者:

crm(live)ra# classes
 lsb
 ocf / heartbeat linbit lvm2 ocfs2 pacemaker
 service
 stonith
 systemd

若要取得某個類別 (和提供者) 的所有可用資源代理程式的綜覽,請使用 list 指令:

crm(live)ra# list ocf
AoEtarget           AudibleAlarm        CTDB                ClusterMon
Delay               Dummy               EvmsSCC             Evmsd
Filesystem          HealthCPU           HealthSMART         ICP
IPaddr              IPaddr2             IPsrcaddr           IPv6addr
LVM                 LinuxSCSI           MailTo              ManageRAID
ManageVE            Pure-FTPd           Raid1               Route
SAPDatabase         SAPInstance         SendArp             ServeRAID
...

若要檢視資源代理程式的綜覽,請使用 info

crm(live)ra# info ocf:linbit:drbd
This resource agent manages a DRBD* resource
as a master/slave resource. DRBD is a shared-nothing replicated storage
device. (ocf:linbit:drbd)

Master/Slave OCF Resource Agent for DRBD

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

drbd_resource* (string): drbd resource name
    The name of the drbd resource from the drbd.conf file.

drbdconf (string, [/etc/drbd.conf]): Path to drbd.conf
    Full path to the drbd.conf file.

Operations' defaults (advisory minimum):

    start         timeout=240
    promote       timeout=90
    demote        timeout=90
    notify        timeout=90
    stop          timeout=100
    monitor_Slave_0 interval=20 timeout=20 start-delay=1m
    monitor_Master_0 interval=10 timeout=20 start-delay=1m

Q 鍵可離開檢視器。

提示
提示:直接使用 crm

前面的範例中使用了 crm 指令的內部外圍程序。但是,您不一定要使用該外圍程序。如果將相應的子指令新增至 crm,也可獲得同樣的結果。例如,在外圍程序中輸入 crm ra list ocf 可以列出所有 OCF 資源代理程式。

5.5.4 使用 crmsh 的外圍程序程序檔

Crmsh 外圍程序程序檔提供了將 crmsh 子指令列舉到檔案中的便捷方式。如此,您便可輕鬆註解特定行或稍後重新執行這些行。請注意,crmsh 外圍程序程序檔只能包含 crmsh 子指令,不允許包含任何其他指令。

您需要先建立包含特定指令的檔案,然後才能使用 crmsh 外圍程序程序檔。例如,下面的檔案會列印叢集的狀態並提供所有節點的清單:

範例 5.3︰ 簡單的 crmsh 外圍程序程序檔
# A small example file with some crm subcommands
status
node list

以井字號 (#) 開頭的所有行都是備註,系統會將其忽略。如果某行過長,可在結尾插入反斜線 (\),然後換到下一行。為方便閱讀,建議縮排屬於特定子指令的行。

若要使用此程序檔,請使用以下其中一種方法:

# crm -f example.cli
# crm < example.cli

5.5.5 使用 crmsh 的叢集程序檔

從所有叢集節點收集資訊和部署任何變更是一項關鍵的叢集管理任務。您無需在不同的節點上手動執行相同的程序 (這很容易出錯),而可以使用 crmsh 叢集程序檔。

請不要將它們與 crmsh 外圍程序程序檔相混淆,第 5.5.4 節 「使用 crmsh 的外圍程序程序檔」中對後者進行了介紹。

對比 crmsh 外圍程序程序檔,叢集程序檔另外會執行如下任務:

  • 安裝特定任務所需的軟體。

  • 建立或修改任何組態檔案。

  • 收集資訊並報告叢集的潛在問題。

  • 將變更部署到所有節點。

crmsh 叢集程序檔不會取代其他叢集管理工具,而是提供整合的方式用於在叢集中執行上述任務。如需詳細資訊,請參閱http://crmsh.github.io/scripts/

5.5.5.1 用法

若要取得所有可用叢集程序檔的清單,請執行:

# crm script list

若要檢視程序檔的組成部份,請使用 show 指令和叢集程序檔的名稱,例如:

# crm script show mailto
mailto (Basic)
MailTo

 This is a resource agent for MailTo. It sends email to a sysadmin
whenever  a takeover occurs.

1. Notifies recipients by email in the event of resource takeover

  id (required)  (unique)
      Identifier for the cluster resource
  email (required)
      Email address
  subject
      Subject

show 的輸出包含標題、簡短描述與程序。每個程序劃分為依指定順序執行的一系列步驟。

每個步驟包含必要參數與選擇性參數的清單,以及這些參數的簡短描述和預設值。

每個叢集程序檔都可識別一組通用參數。可將這些參數傳遞給任何程序檔:

表 5.1︰ 通用參數
參數引數描述
actionINDEX如果設定此參數,則只會執行單一動作 (verify 傳回索引)
dry_runBOOL如果設定此參數,則只會模擬執行 (預設值:no)
nodesLIST列出要對其執行程序檔的節點
portNUMBER要連接到的埠
statefileFILE在以單一步進方式執行時,狀態將會儲存在指定的檔案中
sudoBOOL如果設定此參數,crm 將在適當的情況下提示輸入 sudo 密碼並使用 sudo (預設值:no)
timeoutNUMBER以秒為單位的執行逾時 (預設值:600)
userUSER以指定使用者的身分執行程序檔

5.5.5.2 驗證和執行叢集程序檔

在執行某個叢集程序檔之前,請檢查該程序檔將要執行的動作並驗證其參數,以避免出現問題。叢集程序檔可能會執行一系列動作,並且可能會出於各種原因而失敗。因此,在執行程序檔之前驗證參數可幫助避免出現問題。

例如,mailto 資源代理程式需要唯一的識別碼和一個電子郵件地址。若要驗證這些參數,請執行:

# crm script verify mailto id=sysadmin email=tux@example.org
1. Ensure mail package is installed

        mailx

2. Configure cluster resources

        primitive sysadmin MailTo
                email="tux@example.org"
                op start timeout="10"
                op stop timeout="10"
                op monitor interval="10" timeout="10"

        clone c-sysadmin sysadmin

verify 指令會列印步驟,並用給定的參數取代所有預留位置。verify 會報告發現的任何問題。如果一切正常,請用 run 取代 verify 指令:

# crm script run mailto id=sysadmin email=tux@example.org
INFO: MailTo
INFO: Nodes: alice, bob
OK: Ensure mail package is installed
OK: Configure cluster resources

使用 crm status 檢查您的資源是否已整合到叢集:

# crm status
[...]
 Clone Set: c-sysadmin [sysadmin]
     Started: [ alice bob ]

5.5.6 使用組態範本

注意
注意:取代注意事項

組態範本已棄用,日後會被移除。叢集程序檔將取代組態範本。請參閱第 5.5.5 節 「使用 crmsh 的叢集程序檔」

組態範本是可供 crmsh 使用的現成叢集組態。不要將它們與資源範本 (如第 6.8.2 節 「使用 crmsh 建立資源範本」 所述) 混淆。資源範本適用於叢集而非 crm 外圍程序。

組態範本只需略做調整就能符合特定使用者的需求。當某範本建立組態時,便會有警告訊息發出提示,您稍後可以在進一步自訂時編輯該提示。

以下程序說明如何建立一個簡單但功能齊備的 Apache 組態:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    # crm configure
  2. 藉由組態範本建立新的組態:

    1. 切換到 template 子指令:

      crm(live)configure# template
    2. 列出可用的組態範本:

      crm(live)configure template# list templates
      gfs2-base   filesystem  virtual-ip  apache   clvm     ocfs2    gfs2
    3. 指定所需的組態範本。由於現在需要 組態,因此請選取 apacheapache 範本並將其命名為 g-intranet

      crm(live)configure template# new g-intranet apache
      INFO: pulling in template apache
      INFO: pulling in template virtual-ip
  3. 定義參數:

    1. 列出您建立的組態:

      crm(live)configure template# list
      g-intranet
    2. 顯示需要由您填寫的必要變更:

      crm(live)configure template# show
      ERROR: 23: required parameter ip not set
      ERROR: 61: required parameter id not set
      ERROR: 65: required parameter configfile not set
    3. 啟用偏好的文字編輯器,填寫步驟 3.b 中顯示為錯誤的所有行:

      crm(live)configure template# edit
  4. 顯示組態並檢查其是否有效 (視步驟 3.c 中輸入的組態而定,可能會顯示粗體文字):

    crm(live)configure template# show
    primitive virtual-ip ocf:heartbeat:IPaddr \
        params ip="192.168.1.101"
    primitive apache apache \
        params configfile="/etc/apache2/httpd.conf"
        monitor apache 120s:60s
    group g-intranet \
        apache virtual-ip
  5. 套用組態:

    crm(live)configure template# apply
    crm(live)configure# cd ..
    crm(live)configure# show
  6. 將變更提交至 CIB:

    crm(live)configure# commit

如果您瞭解詳細資料,還可以使指令更簡單。您可以在外圍程序中使用以下指令來彙總上述程序:

# crm configure template \
   new g-intranet apache params \
   configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"

如果您在內部 crm 外圍程序中,請使用以下指令:

crm(live)configure template# new intranet apache params \
   configfile="/etc/apache2/httpd.conf" ip="192.168.1.101"

但是,之前的指令只是藉由組態範本建立其組態,而不會套用或提交至 CIB。

5.5.7 使用陰影組態進行測試

陰影組態用於測試不同的組態案例。如果您已建立幾個非正式組態,則可以逐個進行測試以查看變更的效果。

一般程序如下:

  1. root 身分登入並啟動 crm 互動式外圍程序:

    # crm configure
  2. 建立新的非正式組態:

    crm(live)configure# cib new myNewConfig
    INFO: myNewConfig shadow CIB created

    如果省略陰影 CIB 的名稱,將會建立臨時名稱 @tmp@

  3. 若要將目前的即時組態複製至您的陰影組態,請使用以下指令,否則請跳過此步驟:

    crm(myNewConfig)# cib reset myNewConfig

    之前的指令可讓您以後修改任何現有資源時更為方便。

  4. 和平常一樣進行變更。建立非正式組態之後,所有變更即會套用至該組態。若要儲存所有變更,請使用以下指令:

    crm(myNewConfig)# commit
  5. 如果重新需要使用即時叢集組態,請使用以下指令切換回來:

    crm(myNewConfig)configure# cib use live
    crm(live)# 

5.5.8 組態變更除錯

在將組態變更載入回叢集之前,建議您先使用 ptest 檢閱變更。ptest 指令可顯示提交變更後將發生之動作的圖表。您需要 graphviz 套件才能顯示圖表。以下範例是一份記錄,新增了監控操作:

# crm configure
crm(live)configure# show fence-bob
primitive fence-bob stonith:apcsmart \
        params hostlist="bob"
crm(live)configure# monitor fence-bob 120m:60s
crm(live)configure# show changed
primitive fence-bob stonith:apcsmart \
        params hostlist="bob" \
        op monitor interval="120m" timeout="60s"
crm(live)configure# ptest
crm(live)configure# commit

5.5.9 叢集圖表

若要輸出叢集圖表,請使用 crm configure graph 指令。該指令會在目前所在的視窗中顯示目前的組態,因此需要 X11。

如果您偏好使用可擴充向量圖形 (SVG),請使用如下指令:

# crm configure graph dot config.svg svg

5.5.10 管理 Corosync 組態

Corosync 是大多數 HA 叢集的基礎訊息傳送層。corosync 子指令提供用於編輯和管理 Corosync 組態的指令。

例如,若要列出叢集的狀態,可以使用 status

# crm corosync status
Printing ring status.
Local node ID 175704363
RING ID 0
        id      = 10.121.9.43
        status  = ring 0 active with no faults
Quorum information
------------------
Date:             Thu May  8 16:41:56 2014
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          175704363
Ring ID:          4032
Quorate:          Yes

Votequorum information
----------------------
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2
Flags:            Quorate

Membership information
----------------------
    Nodeid      Votes Name
 175704363          1 alice.example.com (local)
 175704619          1 bob.example.com

diff 指令會比較所有節點上的 Corosync 組態 (如果未另行指定),並列印各節點之間的差異:

# crm corosync diff
--- bob
+++ alice
@@ -46,2 +46,2 @@
-       expected_votes: 2
-       two_node: 1
+       expected_votes: 1
+       two_node: 0

如需詳細資訊,請參閱http://crmsh.nongnu.org/crm.8.html#cmdhelp_corosync

5.5.11 設定獨立於 cib.xml 的密碼

如果叢集組態包含密碼之類的敏感性資訊,應將其儲存在本地檔案中。這樣,支援報告中就絕對不會記錄或洩漏這些參數。

使用 secret 前,請先執行 show 指令瞭解所有資源的概況:

# crm configure show
primitive mydb mysql \
   params replication_user=admin ...

若要為上文的 mydb 資源設定密碼,請使用以下指令:

# crm resource secret mydb set passwd linux
INFO: syncing /var/lib/heartbeat/lrm/secrets/mydb/passwd to [your node list]

您可以使用以下指令取得儲存的密碼:

# crm resource secret mydb show passwd
linux

各節點間的參數需要同步;crm resource secret 指令可用於執行此操作。強烈建議僅使用此指令來管理機密參數。

5.6 更多資訊

http://crmsh.github.io/

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

http://crmsh.github.io/documentation

提供有關 crm 外圍程序的多個文件,包括使用 crmsh 完成基本叢集設定的 Getting Started 教程,以及 crm 外圍程序的綜合性 Manual。後者的網址為 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:包含全面詳細的參考資訊。

  • Colocation Explained

  • Ordering Explained