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
區段,其中包含以下選項:
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
,請使用以下設定:
quorum { provider: corosync_votequorum 1 expected_votes: N 2 wait_for_all: 1 3 }
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 的叢集。
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.com
、www.example.com
等網域的安全。Hawk2 支援萬用字元證書及可轉換證書。
/srv/www/hawk/bin/generate-ssl-cert
可產生自行簽署的預設私密金鑰和證書。若要使用您自己的證書 (可轉換或萬用字元證書),請以您自己的證書取代產生的證書 (位於
/etc/ssl/certs/hawk.pem
處)。
在您要與之連接的節點上,開啟外圍程序並以
root
身分登入。輸入以下指令檢查服務的狀態
#
systemctl status hawk
如果服務沒有執行,則使用以下指令將其啟動
#
systemctl start hawk
如果希望 Hawk2 在開機時自動啟動,請執行以下指令:
#
systemctl enable hawk
5.4.2 登入 #
Hawk2 Web 介面使用 HTTPS 通訊協定和連接埠 7630
。
您無需使用 Hawk 登入個別叢集節點,而是可以將一個浮動的虛擬 IP 位址 (IPaddr
或 IPaddr2
2) 設定為叢集資源。該位址無需任何特殊組態設定。如此,無論 Hawk 服務在哪個實體節點上執行,用戶端都可以連接到該服務。
在使用 crm 外圍程序提供的開機程序檔設定叢集時,系統會詢問您是否設定虛擬 IP 以用於叢集管理。
在任一部機器上,啟動網頁瀏覽器並輸入以下 URL:
https://HAWKSERVER:7630/
使用執行 Hawk Web 服務的任何叢集節點的 IP 位址或主機名稱取代 HAWKSERVER。如果已設定虛擬 IP 位址以供您使用 Hawk2 進行叢集管理,請使用該虛擬 IP 位址取代 HAWKSERVER。
注意:證書警告當您首次嘗試存取該 URL 時,如果系統顯示證書警告,則表示使用了自行簽署的證書。依預設,自行簽署的證書不被視為可信證書。
若要驗證證書,請聯絡叢集操作人員獲取證書詳細資料。
若仍要繼續,您可以在瀏覽器中新增一個例外以略過此警告。
如需關於如何將自行簽署的證書取代為官方證書管理中心所簽署證書的資訊,請參閱取代自行簽署的證書。
在 Hawk2 登入螢幕中,輸入
hacluster
使用者 (或任何屬於群組haclient
的其他使用者) 的 和 。按一下
。
5.4.3 Hawk2 綜覽:主要元素 #
登入 Hawk2 後,左側會顯示一個導覽列,右側會顯示一個頂層列,其中包含若干連結。
依預設,以 root
或 hacluster
身分登入的使用者對於所有叢集組態任務都擁有完整的讀-寫存取權限。不過,您可以使用存取控制清單 (ACL) 來定義精細的存取權限。
如果 CRM 中啟用了 ACL,則 Hawk2 的可用功能取決於指定給您的使用者角色及其所指定的存取權限。Hawk2 中的hacluster
來執行。
5.4.3.2 頂層列 #
Hawk2 的頂層列顯示以下項目:
- :按一下可切換到批次模式。可用於模擬和分階段進行變更並透過單次交易套用這些變更。如需詳細資料,請參閱
5.4.4 設定全域叢集選項 #
全域叢集選項控制叢集在遇到特定情況時的運作方式。它們分為不同的組,可透過 Hawk2 和 crmsh 等叢集管理工具來檢視和修改。一般情況下,可以保留預先定義的值。但是,為了讓叢集的關鍵功能正常運作,還需要在執行基本叢集設定後調整以下參數:
登入 Hawk2:
https://HAWKSERVER:7630/
從左側導覽列中,選取
› 。若要在螢幕右側顯示參數的簡要描述,請將游標懸停在該參數上。
圖 5.1︰ Hawk2 - 叢集組態 #檢查
和 的值,必要時予以調整:將 第 5.3.1 節 「全域選項
設為適當的值。請參閱no-quorum-policy
」,以取得詳細資料。如果出於某種原因需要停用圍籬區隔,請將
設定為no
。依預設,該參數設定為true
,因為執行常規的叢集操作必須要使用 STONITH 裝置。依據預設值,如果未設定 STONITH 資源,叢集將拒絕啟動任何資源。重要:不支援沒有 STONITH 的組態您必須為叢集設定節點圍籬區隔機制。
全域叢集選項
stonith-enabled
和startup-fencing
必須設定為true
。如果您變更這些選項,將會失去支援。
若要從叢集組態中移除某個參數,請按一下該參數旁邊的
圖示。如果某個參數被刪除,叢集會將該參數視為具有預設值。若要將新參數新增至叢集組態,請從下拉式方塊中選擇一個參數。
如果您需要變更
或 ,請執行下列步驟:若要調整值,請在下拉式方塊中選取其他值,或直接編輯該值。
若要新增新的資源預設值或操作預設值,請從空下拉式方塊中選擇一項,然後輸入值。如果已定義預設值,Hawk2 會自動提供這些預設值。
若要移除某個參數,請按一下該參數旁邊的第 6.12 節 「資源選項 (中繼屬性)」 及第 6.14 節 「資源操作」 中所述的預設值。
圖示。如果沒有為 和 指定值,叢集會使用
確認您的變更。
5.4.5 顯示目前的叢集組態 (CIB) #
叢集管理員有時需要知道叢集組態。Hawk2 可以 crm 外圍程序語法、XML 和圖形形式顯示目前組態。若要檢視 crm 外圍程序語法形式的叢集組態,請從左側導覽列中選取
› ,並按一下 。若要改為以原始 XML 顯示組態,請按一下 。按一下 會以圖形顯示 CIB 中設定的節點和資源。它還會顯示各資源之間的關係。5.4.6 使用精靈新增資源 #
Hawk2 精靈是設定簡單資源 (如虛擬 IP 位址或 SBD STONITH 資源) 的便捷方式。對於包含多個資源的複雜組態 (例如 DRBD 區塊裝置或 Apache Web 伺服器的資源組態) 而言,這種方法也十分有用。精靈會引導您完成所有組態步驟,並提供您需要輸入的參數的相關資訊。
登入 Hawk2:
https://HAWKSERVER:7630/
從左側導覽列中,選取
› 。按一下具體類別旁邊的向下箭頭圖示,藉以擴大該類別,然後選取所需精靈。
按照螢幕上的指示執行操作。在最後一個設定步驟之後,
所輸入的值。Hawk2 會顯示它將執行的動作以及設定成果。根據組態,系統可能會提示您要先輸入
root
密碼,才能 組態。
如需詳細資訊,請參閱第 6 章 「設定叢集資源」。
5.4.7 使用批次模式 #
Hawk2 提供叢集模擬器。該模式可用於以下操作:
,包括對叢集進行分階段變更並透過單次交易套用這些變更,而不是讓每項變更立即生效。
模擬變更和叢集事件,例如,瞭解可能失敗的情況。
例如,在建立相互依賴的資源群組時,可以使用批次模式。透過使用批次模式,您可以避免將中繼或不完整的組態套用到叢集。
啟用批次模式後,您可以新增或編輯資源和條件約束,或變更叢集組態。此外,還可以模擬叢集中的事件,包括變為線上或離線的節點、資源操作,以及要授予或撤銷的票證。如需詳細資料,請參閱程序 5.6 「插入節點、資源或票證事件」。
叢集模擬器會在每次變更後自動執行,並在使用者介面上顯示預期效果。舉例而言,這還意味著當您在批次模式下停止某資源時,使用者介面上會將該資源顯示為已停止,但實際上,該資源仍在執行中。
某些精靈包含除純叢集組態以外的其他動作。在批次模式下使用這些精靈時,叢集組態以外的任何其他變更都將立即套用到線上系統。
因此,需要 root
權限的精靈無法在批次模式下執行。
登入 Hawk2:
https://HAWKSERVER:7630/
若要啟用批次模式,請從頂層列選取
。頂層列下方即會另外顯示一列,指出批次模式處於使用中狀態,並會包含指向您可在批次模式下執行的動作的連結。
圖 5.3︰ Hawk2 批次模式已啟用 #當批次模式處於使用中狀態時,對叢集執行任意變更,例如新增或編輯資源和條件約束,或編輯叢集組態。
系統將會模擬變更,並將其顯示在所有螢幕上。
若要檢視所做變更的詳細資料,請從批次模式列中選取
。 視窗即會開啟。對於任何組態變更,該模式會以 crmsh 語法顯示即時狀態與模擬變更之間的差異:以
-
字元開頭的行表示目前的狀態,而以+
開頭的行則顯示預期狀態。若要插入事件或檢視更多詳細資料,請參閱程序 5.6。否則請 視窗。
選擇是
還是 模擬的變更,然後確認您的選擇。此操作還會停用批次模式,使您回到正常模式。
在批次模式下執行時,Hawk2 還允許您插入
和 。可讓您變更節點的狀態。可用的狀態有
、 和 。可讓您變更資源的一些內容。例如,您可以設定操作 (如
monitor
、start
、stop
)、操作要套用到的節點,以及要模擬的預期結果。可讓您測試授予和撤銷票證 (用於 Geo 叢集) 的影響。
登入 Hawk2:
https://HAWKSERVER:7630/
如果批次模式尚未啟動,請按一下頂層列上的
以切換到批次模式。在批次模式列中,按一下
以開啟 視窗。若要模擬節點的狀態變更:
按一下
› 。選取您要操作的
,並選取其目標 。確認您的變更。您的事件便會新增至
對話方塊中所列的事件佇列中。
若要模擬某個資源作業:
按一下
› 。選取要操作的
和要模擬的 。如有必要,請定義一個
。選取要在其上執行該操作的
以及預期的 。您的事件便會新增至 對話方塊中所列的事件佇列中。確認您的變更。
若要模擬票證動作:
按一下
› 。依次選取要操作的
和要模擬的 。確認您的變更。您的事件便會新增至
對話方塊中所列的事件佇列中。
圖形 5.4) 會為每個插入的事件顯示新的一行。此處列出的所有事件都會立即被模擬並反映到 螢幕上。
對話方塊 (如果您還進行了任何組態變更,線上狀態和模擬變更之間的差異會顯示在所插入事件的下方。
圖 5.4︰ Hawk2 批次模式 - 插入的事件和組態變更 #若要移除插入的事件,請按一下該事件旁邊的
圖示。Hawk2 會相應地更新 螢幕。若要檢視模擬執行的更多詳細資料,請按一下
並選擇以下選項之一:顯示詳細的摘要。
- /
顯示轉換的圖形表示。
顯示轉換的 XML 表示。
如果您已複查模擬的變更,請關閉
視窗。若要結束批次模式,請
或 模擬的變更。
5.5 crmsh 簡介 #
若要設定和管理叢集資源,可以使用 crm 外圍程序 (crmsh) 指令列公用程式或 Hawk2 (Web 使用者介面)。
本節介紹指令列工具 crm
。crm
指令有多個子指令,用於管理資源、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
就不會要求提供密碼。
使用不含引數 (或只含一個 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
若要列印
group
的configure
子指令的語法、用法和範例:#
crm configure help group
以下指令的作用相同:
#
crm help configure group
基本上 help
子指令 (不要與 --help
選項混淆) 的所有輸出都會開啟一個文字編輯器。這個文字檢視器可讓您向上或向下捲動,更方便地閱讀說明文字。若要離開該文字檢視器,請按 Q 鍵。
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 外圍程序程序檔:: 外圍程序程序檔包含
crm
crm 的子指令。如需詳細資訊,請參閱 第 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
指令。如果需要回到上一個層級,可使用back
、up
、end
或cd
。輸入
crm
和相應的子指令 (不帶任何選項) 並按 Enter,即可直接進入該層級。內部外圍程序還支援 Tab 鍵對子指令和資源的補齊功能。輸入指令的開頭,然後按 →|,
crm
便會補齊相應的物件。
crmsh 還支援執行同步指令。使用 -w
選項可以啟用該功能。如果已啟動 crm
但未指定 -w
,之後可以將使用者首選的 wait
設為 yes
(options
wait yes
) 來啟用它。如果啟用了此選項,crm
會一直等到轉換完成。每當啟動轉換後,就會顯示一些點來指出進度。同步的指令執行僅適用於 resource
start
這樣的指令。
crm
工具有管理功能 (子指令 resource
和 node
),可用於進行組態設定 (configure
和 cib
)。
下面的小節概述了 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 外圍程序程序檔。例如,下面的檔案會列印叢集的狀態並提供所有節點的清單:
# A small example file with some crm subcommandsstatus
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
的輸出包含標題、簡短描述與程序。每個程序劃分為依指定順序執行的一系列步驟。
每個步驟包含必要參數與選擇性參數的清單,以及這些參數的簡短描述和預設值。
每個叢集程序檔都可識別一組通用參數。可將這些參數傳遞給任何程序檔:
參數 | 引數 | 描述 |
---|---|---|
action | INDEX | 如果設定此參數,則只會執行單一動作 (verify 傳回索引) |
dry_run | BOOL | 如果設定此參數,則只會模擬執行 (預設值:no) |
nodes | LIST | 列出要對其執行程序檔的節點 |
port | NUMBER | 要連接到的埠 |
statefile | FILE | 在以單一步進方式執行時,狀態將會儲存在指定的檔案中 |
sudo | BOOL | 如果設定此參數,crm 將在適當的情況下提示輸入 sudo 密碼並使用 sudo (預設值:no) |
timeout | NUMBER | 以秒為單位的執行逾時 (預設值:600) |
user | USER | 以指定使用者的身分執行程序檔 |
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 組態:
以
root
身分登入並啟動crm
互動式外圍程序:#
crm configure
藉由組態範本建立新的組態:
切換到
template
子指令:crm(live)configure#
template
列出可用的組態範本:
crm(live)configure template#
list templates
gfs2-base filesystem virtual-ip apache clvm ocfs2 gfs2指定所需的組態範本。由於現在需要 組態,因此請選取
apache
apache 範本並將其命名為g-intranet
:crm(live)configure template#
new g-intranet apache
INFO: pulling in template apache INFO: pulling in template virtual-ip
定義參數:
列出您建立的組態:
crm(live)configure template#
list
g-intranet顯示需要由您填寫的必要變更:
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.b 中顯示為錯誤的所有行:
crm(live)configure template#
edit
顯示組態並檢查其是否有效 (視步驟 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套用組態:
crm(live)configure template#
apply
crm(live)configure#
cd ..
crm(live)configure#
show
將變更提交至 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 使用陰影組態進行測試 #
陰影組態用於測試不同的組態案例。如果您已建立幾個非正式組態,則可以逐個進行測試以查看變更的效果。
一般程序如下:
以
root
身分登入並啟動crm
互動式外圍程序:#
crm configure
建立新的非正式組態:
crm(live)configure#
cib new myNewConfig
INFO: myNewConfig shadow CIB created如果省略陰影 CIB 的名稱,將會建立臨時名稱
@tmp@
。若要將目前的即時組態複製至您的陰影組態,請使用以下指令,否則請跳過此步驟:
crm(myNewConfig)#
cib reset myNewConfig
之前的指令可讓您以後修改任何現有資源時更為方便。
和平常一樣進行變更。建立非正式組態之後,所有變更即會套用至該組態。若要儲存所有變更,請使用以下指令:
crm(myNewConfig)#
commit
如果重新需要使用即時叢集組態,請使用以下指令切換回來:
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