配置pacemaker有2種途徑,一是命令行工具包括crm和pcs,二是圖形工具包括:pygui(mgmt),Hawk,LCMC,pcsd. mgmt出道時間較早,很多文章有介紹;LCMC是Java編寫的圖形管理工具;Hawk則是官方推薦的代替mgmt的web界面配置工具;pcsd則是pcs的圖形界面。具體可參考http://clusterlabs.org/#addons
本文主要介紹命令行工具crm, 而pcs和crm相似,語法稍有不同,掌握crm後使用pcs不成問題。
注:從Pacemaker 1.1.8開始,crmsh發展成一個獨立項目,Pacemaker中不再提供。我們安裝好Pacemaker後,是沒有crm這個命令行管理器的,需另行下載安裝。(https://savannah.nongnu.org/projects/crmsh/)
1.1.8之前版本已含crm,無需另行下載。
crm有兩種工作方式,
a.批處理模式就是在命令行中直接輸入命令(如執行crm status)
b.交互式模式:運行crm,進入crm(live)# , 按2次Tab鍵可顯示該層級所有指令
1.CRM交互模式基本指令介紹:
help,? #查看當前區域可用命令
end,cd,up,back #返回上一級
quit,bye,exit #退出crm(live)交互模式
例:crm(live)# ?configure #查看configure指令的幫助信息
crm採用分層設計,擁有多層命令,輸入某命令表示進入該命令層,命令可輸頭幾個字母按Tab補全
例:crm(live)# configure #進入configure命令層
crm中常用一級命令:
configure 用於設置具體參數
resource 對已定義資源進行各種操作
ra resource agents center, 可查看哪些resource agent可供使用
cib 類似於configure,只是操作的是cib shadow
node 對節點進行各類操作
status 顯示集羣狀態信息
2.configure 具體使用
2.1常用指令列表:
crm(live)configure# show #查看當前配置
crm(live)configure# verify #檢查當前配置是否正確, 相當於crm_verify -L
crm(live)configure# commit #提交配置使配置生效,修改後沒提交系統不會保存更改的信息
crm(live)configure# delete <id> #刪除某項配置, id爲該項的名稱
crm(live)configure# edit <id> #編輯某項配置,id爲該項的名稱
crm(live)configure# primitive #定義資源
crm(live)configure# monitor #資源檢視
crm(live)configure# group #創建組資源,將幾項資源編成一組
crm(live)configure# clone #克隆已建的資源
crm(live)configure# ms/master #定義master/slave資源
2.2 定義資源
在configure中定義默認資源屬性
priority 如果不允許所有的資源都處於活動狀態,羣集會停止優先級較低的資源以便保持較高優先級資源處於活動狀態。
target-role 羣集應試圖將此資源保持在何種狀態,允許的值:Stopped 和 Started。
is-managed 是否允許羣集啓動和停止資源,允許的值:true和 false。
resource-stickiness 資源留在所處位置的自願程度如何,即黏性,默認爲default- resource-stickiness 的值。
migration-threshold 節點上的此資源應發生多少故障後才能確定該節點沒有資格主管此資源,默認值:none。
multiple-active 如果發現資源在多個節點上活動,羣集該如何操作,包括:block(將資源標記爲未受管)、stop_only 和 stop_start。
failure-timeout 在恢復爲如同未發生故障一樣正常工作(並允許資源返回它發生故障的節點)之前,需要等待幾秒鐘,默認值:never。
例:crm(live)configure
# rsc_defaults resource-stickiness=100
#指定資源指定默認黏性值
2.2.1 primitive中參數說明
primitive 唯一ID 資源代理類型:資源代理的提供程序:資源代理名稱
params attr_list
meta attr_list
op op_type [<attribute>=<value>...] ...]
資源代理類型: lsb, ocf, stonith, service
資源代理的提供程序: heartbeat , pacemaker
資源代理名稱:即resource agent, 如:IPaddr2,httpd, mysql
meta--元屬性, 是可以爲資源添加的選項。它們告訴 CRM 如何處理特定資源。
params--實例屬性,是特定資源類的參數,用於確定資源類的行爲方式及其控制的服務實例。
op--操作,默認情況下,羣集不會確保您的資源一直正常。要指示羣集確保資源狀況依然正常,需要向資源的定義中添加一個監視操作monitor。可爲所有類或資源代理添加monitor。
op_type :包括 start,stop,monitor
interval :執行操作的頻率。單位:秒。
timeout : 需要等待多久才聲明操作失敗。
requires :需要滿足什麼條件才能發生此操作。允許的值:nothing、quorum 和 fencing。默認值取決於是否啓用屏障和資源的類是否爲 stonith。對於 STONITH 資源,默認值爲 nothing。
on-fail :此操作失敗時執行的操作。允許的值:
ignore:假裝資源沒有失敗。
block:不對資源執行任何進一步操作。
stop:停止資源並且不在其他位置啓動該資源。
restart:停止資源並(可能在不同的節點上)重啓動。
fence:關閉資源失敗的節點 (STONITH)。
standby:將所有資源從資源失敗的節點上移走。
enabled 如果值爲 false,將操作視爲不存在。允許的值:true、false。
例:
primitive r0 ocf:linbit:drbd \
params drbd_resource=r0 \
op monitor role=Master interval=60s \
op monitor role=Slave interval=300s
meta元屬性參數說明
priority:如果不允許所有的資源都處於活動狀態,羣集會停止優先級較低的資源以便保持較高優先級資源處於活動狀態。
target-role: 此資源試圖保持的狀態,包括started和stopped
is-managed:是否允許羣集啓動和停止資源,包括true和 false。
migration-threshold:用來定義資源的故障次數,假設已經爲資源配製了一個首選在節點上運行的位置約束。如果那裏失敗了,系統會檢查 migration-threshold 並與故障計數進行比較。如果故障計數 >= migration-threshold,會將資源遷移到下一個自選節點。
默認情況下,一旦達到閾值,就只有在管理員手動重置資源的故障計數後(在修復故障原因後),才允許在該節點上運行有故障的資源。
但是,可以通過設置資源的 failure-timeout 選項使故障計數失效。如果設置migration-threshold=2 和 failure-timeout=60s ,將會導致資源在兩次故障後遷移到新的節點,並且可能允許在一分鐘後移回(取決於黏性和約束分數)。
遷移閾值概念有兩個例外,在資源啓動失敗或停止失敗時出現:啓動故障會使故障計數設置爲 INFINITY,因此總是導致立即遷移。停止故障會導致屏障(stonith-enabled 設置爲 true 時,這是默認設置)。如果不定義 STONITH資源(或 stonith-enabled 設置爲 false),則該資源根本不會遷移。
failure-timeout:在恢復爲如同未發生故障一樣正常工作(並允許資源返回它發生故障的節點)之前,需要等待幾秒鐘,,默認值0 (disabled)
resource-stickiness:資源留在所處位置的自願程度如何,即黏性,默認爲0。
multiple-active:如果發現資源在多個節點上活動,羣集該如何操作,包括:
block(將資源標記爲未受管),stop_only(停止所有活動實例),stop_start(默認值,停止所有活動實例,並在某個節點啓動資源)
requires:定義某種條件下資源會被啓動。默認資源會被fencing,爲以下這幾種值時除外
* nothing - 集羣總能啓動資源;
* quorum - 集羣只有在大多數節點在線時能啓動資源,當stonith-enabled爲false 或資源爲stonith時,其爲默認值;
* fencing - 集羣只有在大多數節點在線,或在任何失敗或未知節點被關閉電源時,才能啓動資源;
* unfencing - 集羣只有在大多數節點在線,或在任何失敗或未知節點被關閉電源時並且只有當節點沒被fencing時,才能啓動資源。當爲某一fencing設備,而將stonith的meta參數設置爲provides=unfencing時,其爲默認值;
例:
primitive Virtual-IP-Tomcat ocf:heartbeat:IPaddr2
params lvs_support="true" ip="192.168.1.100" cidr_netmask="24" broadcast="192.168.1.255" \
op monitor interval="1m" timeout="10s" \
meta migration-threshold="10"
primitive ldirectord ocf:heartbeat:ldirectord \
params configfile="/etc/ha.d/ldirectord.cf" \
op monitor interval="2m" timeout="20s" \
meta migration-threshold="10" target-role="Started"
primitive tomcat lsb:tomcat \
op monitor interval="30s" timeout="10s" \
meta migration-threshold="10" target-role="Started"
primitive mysql ocf:heartbeat:mysql \
params binary="/usr/bin/mysqld_safe" config="/etc/my.cnf" datadir="/var/lib/mysql" user="mysql" pid="/var/lib/mysql/mysql.pid" socket="/var/lib/mysql/mysql.sock" test_passwd="password" test_table="ldirectord.connectioncheck" test_user="slave_user" \
op monitor interval="20s" timeout="10s" \
meta migration-threshold="10" target-role="Started"
重置資源的故障計數:對指定節點上的指定資源執行 crm_resource -C 和 crm_failcount -D 命令。
如果在創建時將資源的初始狀態設置爲 stopped(target-role 元屬性的值爲 stopped),則資源在創建後不會自動啓動。要想啓動資源使用命令:crm resource start 資源ID
2.3 資源3種約束:
crm(live)configure# colocation #排列約束,指定哪些資源捆綁一起,在同一節點上運行
crm(live)configure# order #指定排列約束中的資源啓動順序,該順序和colocation順序相反
crm(live)configure# location #位置約束,指定資源首選在哪些節點上運行
定義約束的順序也是由上到下
排列約束-------》順序約束-----》位置約束
只有在一起了,纔有先後,然後將兩者一起放到一個節點上。
colocation資源排列約束:
colocation 命令用於定義哪些資源應在相同主機上運行,哪些資源應在不同主機上運行。
通常情況下colocation和order成對出現,而colocation中資源的順序和order中的相反。Active/Passive模式和Active/Active模式均可使用colocation和order
crm(live)configure# order rsc1 rsc2
crm(live)configure# colocation rsc2 rsc1
colocation語法:
colocation <id> <score>: <rsc>[:<role>] <with-rsc>[:<role>]
[node-attribute=<node_attr>]
colocation <id> <score>: <rsc>[:<role>] <rsc>[:<role>] ...
[node-attribute=<node_attr>]
<score>中,只能設置 +INFINITY 或 -INFINITY 的分數來定義必須始終或決不能在同一節點上運行的資源。
例:始終在同一節點上運行ID爲filesystem_resource 和 nfs_group 的兩個資源
crm(live)configure# colocation nfs_on_filesystem inf: nfs_group filesystem_resource
例:ID爲apache和dummy兩個資源始終不在同一節點上運行
colocation never_put_apache_with_dummy -inf: apache dummy
對於主從屬配置,除在本地運行資源以外,還有必要了解當前節點是否爲主節點。這可以通過附加 to_role 或 from_role 屬性來檢查。
定義約束時,可指定分數。各種分數是羣集工作方式的重要組成部分。其實,從遷移資源到決定在已降級羣集中停止哪些資源的整個過程是通過以某種方式操縱分數來實現的。分數按每個資源來計算,資源分數爲負的任何節點都無法運行該資源。在計算出資源分數後,羣集選擇分數最高的節點。、
查看節點的分值/黏性:# crm_simulate -sL
INFINITY(無窮大)目前定義爲 1,000,000。
SCORE加減無窮大遵循以下規則:
number > INFINITY = INFINITY
number < -INFINITY = - INFINITY
number + INFINITY = INFINITY
number - INFINITY = - INFINITY
INFINITY - INFINITY = - INFINITY
定義資源約束時,也可以指定每個約束的分數。分數表示您指派給此資源約束的值。分數較高的約束先應用,分數較低的約束後應用。通過使用不同的分數爲既定資源創建更多位置約束,可以指定資源要故障轉移至的目標節點的順序。
order排序約束:
使用排序約束可在另一個資源滿足某個特殊條件之前或之後啓動或停止某項服務,如已啓動、已停止或已升級到主資源。
order <id> {kind|<score>}: <rsc>[:<action>] <rsc>[:<action>] ...
[symmetrical=<bool>]
kind包括: Mandatory | Optional | Serialize
Mandatory 默認值,表示強制約束,所有Mandatory資源的狀態必定相同,其他資源狀態跟隨第1個資源的狀態變化而變化。有Mandatory關係的兩個資源,當第1個資源stop後,第2個資源也必須stop。啓動/停止順序按從左到右。
Optional表示選擇性約束,當第1個資源狀態發生變化時,第2個資源不會受影響,不會跟隨變化。只有當多個資源同時啓動或停止時才發生order作用。
Serialize表示順序約束,資源按順序啓動/停止,不可同時啓動/停止。
可使用 crm 中的以下命令來配置排序約束:
crm(live)configure# order nfs_after_filesystem mandatory: filesystem_resource nfs_group
location位置約束:定義資源可在哪個節點上運行
location 唯一ID 資源ID 規則
location <id> <rsc> {node_pref|rules}
node_pref格式爲: <score>: <node> [role=<role>]
rules格式爲: rule [id_spec] [$role=<role>] <score>: <expression>
例:在名爲 earth 的節點上運行 ID爲fs1的資源的可能性增加到 100
location fs1-loc fs1 100: earth
例:
location Prefer-Node1 ldirectord
rule $id="prefer-node1-rule" 100: #uname eq NODE1
示例配置約束:
如果沒有附加約束,示例將不能按預期工作。其中最基本的就是讓所有資源在同一臺計算機上作爲 drbd 資源的主資源運行。另一個關鍵點就是在任何其他資源啓動之前,drbd 資源必須是主資源。在 drbd 不是主資源時嘗試裝入 drbd 設備只能失敗。必須滿足的約束如下所示:
文件系統必須始終與 drbd 資源的主資源位於相同的節點上。
crm(live)configure# colocation filesystem_on_master inf: \
filesystem_resource drbd_resource:Master
NFS 服務器及 IP 地址必須與文件系統位於相同的節點上。
crm(live)configure# colocation nfs_with_fs inf: \
nfs_group filesystem_resource
NFS 服務器及 IP 地址在裝入文件系統後啓動:
crm(live)configure# order nfs_second mandatory: \
filesystem_resource nfs_group
必須在 drbd 資源升級爲節點上的主資源之後將文件系統裝入此節點上。
crm(live)configure# order drbd_first inf: \
drbd_resource:promote filesystem_resource
2.4 配置羣集資源組:
某些羣集資源與其他組件或資源相關,要求每個組件或資源以特定的順序啓動並在相同的服務器上運行。爲了簡化配置,引入資源組的概念。
資源組具有以下屬性:
啓動和停止資源:資源以顯示順序啓動,以相反順序停止。
相關性:如果組中某個資源在某處無法運行,則該組中位於其之後的任何資源都不允許運行。
組內容:組可能僅包含一些原始羣集資源。要引用組資源的子代,請使用子代的 ID代替組的 ID。
限制:儘管在約束中可以引用組的子代,但通常傾向於使用組的名稱。
黏性:黏性在組中可以累加。每個活動的組成員可以將其黏性值累加到組的總分中。因此,如果默認的 resource-stickiness 值爲 100,而組中有七個成員,其中五個成員是活動的,則組總分爲 500,更喜歡其當前位置。
定義資源組:group 唯一ID 資源列表
例:group Load-Balancing Virtual-IP-Tomcat ldirectord
group在Active/Passive模式中使用,資源啓動順序從左至右,其作用相當於colocation+order
但在Active/Active模式中,通常有clone語句,而group語句對clone定義的資源無效,這時應使用colocation和order.
2.5 配置克隆資源:
在一個Active/Active模式中,某些資源在羣集的多個節點上同時運行。爲此,必須將資源配置爲克隆資源。可以配置爲克隆資源的資源包括 STONITH 和羣集文件系統(如OCFS2)。如有resource agent支持,則可以克隆任何資源。克隆資源的配置甚至也有不同,具體取決於資源駐留的節點。
資源克隆有三種類型:
匿名克隆:參數globally-unique=false。這是最簡單的克隆類型。這種克隆類型在所有位置上的運行方式都相同。因此,每臺計算機上只能有一個匿名克隆實例是活動的。
全局唯一克隆:參數globally-unique=true。這些資源各不相同。一個節點上運行的克隆實例與另一個節點上運行的實例不同,同一個節點上運行的任何兩個實例也不同。
狀態克隆:作爲參數出現在ms/master中。這些資源的活動實例分爲兩種狀態:主動和被動,也稱主和從。狀態克隆可以是匿名克隆也可以是全局唯一克隆。
定義克隆資源:clone 唯一ID 資源ID
參數:
clone-max:克隆副本的最大值,默認是集羣節點數
clone-node-max:單個節點可啓動克隆副本的最大個數,默認爲1
notify:某個克隆停止或啓動時通知其他克隆,可選true 或 false
globally-unique:
定義每個克隆副本是否全局唯一,爲false時副本在每一處的作用相同,但每個節點只能有1個副本是active的;爲true時每個副本和其他副本都不相同,無論是在同一個節點或是在不同的節點,當clone-node-max>1時,默認值爲true。
ordered:副本按順序啓動/停止,代替併發啓動。包括true和false,默認爲false。
interleave:副本交錯啓動/停止,改變master/clone間的order約束,每個實例像其他克隆實例一樣可快速啓動/停止,無需等待其他克隆實例。
priority, target-role, is-managed的定義參考meta說明。
例如:
clone cl-mysql mysql
clone cl_fence apc_1 \
meta clone-node-max=1 globally-unique=false
狀態克隆:
primitive drbd_mysql ocf:linbit:drbd \
params drbd_resource="mysql" \
op monitor interval="15s"
ms ms_drbd_mysql drbd_mysql \
meta master-max="1" master-node-max="1" \
clone-max="2" clone-node-max="1" \
notify="true"
注:每個節點克隆數大於1時(clone-node-max>1),需指定globally-unique=true,clone-node-max默認值爲1
2.6 定義主從資源
ms或master指令定義主從資源(master/slave),如drbd
ms <name> <rsc>
[description=<description>]
[meta attr_list]
[params attr_list]
attr_list :: [$id=<id>] <attr>=<val> [<attr>=<val>...] | $id-ref=<id>
例:
ms disk1 drbd1 \
meta notify=true globally-unique=false
2.7 配置資源監視monitor
如果希望確保資源運行,則必須爲該資源配置資源監視。
有兩種方法可以監視資源:使用 op 關鍵字定義監視操作或使用 monitor 命令。資源監視包括指定超時,啓動延遲值以及間隔。間隔告訴 CRM 檢查資源狀態的頻率。
以下示例配置了一個 Apache 資源並使用 op 關鍵字每 30 分鐘對它進行監視一次:
crm(live)configure# primitive apache apache \
params ... \
op monitor interval=60s timeout=30s
同樣也可以使用以下方式來實現:
crm(live)configure# primitive apache apache \
params ...
crm(live)configure# monitor apache 60s:30s
2.8. 設置CRM其他屬性
如果是兩個節點的集羣,應該設置no-quorum-policy爲ignore,如果一個節點down掉,另一個節點仍能正常運行。設置start- failure-is-fatal 爲false 允許你爲每一個資源設置migration-threshold屬性。如果沒有定義stonith資源則必須設置stonith-enabled爲 false。
property no-quorum-policy="ignore" \
start-failure-is-fatal="false" \
stonith-enabled="false"
3.RA(resource agents)使用
3.1查看RA類型:
crm(live)configure ra# classes
lsb:linux標準庫,一般位於/etc/rc.d/init.d/目錄下的支持start|stop|status等參數的服務腳本都是lsb
ocf / heartbeat pacemaker #ocf(Open cluster Framework)開放集羣架構,包括heartbeat和pacemaker
service:
stonith:專爲配置stonith設備而用
lsb和ocf使用得較多,其中ocf格式腳本調用較複雜,可使用meta指令查看其參數具體使用。
例:查看Filesystem的資源選項參數
crm(live)configure ra# classes
crm(live)configure ra# list ocf #列出所有ocf腳本,其中有Filesystem
crm(live)configure ra# providers Filesystem #查看Filesystem屬於哪個類別
heartbeat #結果顯示Filesystem屬於heartbeat
crm(live)configure ra# meta ocf:heartbeat:Filesystem #查看Filesystem資源選項參數
Manages filesystem mounts (ocf:heartbeat:Filesystem)
......................................................
Parameters (* denotes required, [] the default):
device* (string): block device
The name of block device for the filesystem, or -U, -L options for mount, or NFS mount specification.
directory* (string): mount point
The mount point for the filesystem.
fstype* (string): filesystem type
The type of filesystem to be mounted.
......................................................
其中帶有*表示必填參數,羣集使用這些參數選項來決定資源的行爲方式,它們會告知 CRM 如何對待特定的資源。除了在crm交互模式中定義資源選項參數外,還可使用 crm_resource –meta 命令或 GUI 來設置資源選項。
例:
crm(live)configure# primitive webnfs ocf:heartbeat:Filesystem \
params device="192.168.1.110:/share" directory="/var/www/html" fstype="nfs" \
op monitor interval=60s timeout=60s op start timeout=60s op stop timeout=60s
4.resource的使用
未完,待續....................