What is Pacemaker?
Pacemaker是一個集群資源管理器。它利用集群基礎構件(OpenAIS 、heartbeat或corosync)提供的消息和成員管理能力來探測并從節點或資源級別的故障中恢復,以實現群集服務(亦稱資源)的最大可用性。
前提:
1)本配置共有兩個測試節點,分別node1.a.org和node2.a.org,相的IP地址分別為192.168.0.5和192.168.0.6;
2)node1和node2兩個節點已經配置好了基于openais/corosync的集群;且node1和node2也已經配置好了Primary/Secondary模型的drbd設備/dev/drbd0,且對應的資源名稱為web;如果您此處的配置有所不同,請確保后面的命令中使用到時與您的配置修改此些信息與您所需要的配置保持一致;
3)系統為rhel5.4,x86平臺;
1、查看當前集群的配置信息,確保已經配置全局屬性參數為兩節點集群所適用:
1 | #?crm?configure?show |
1 2 3 4 5 6 7 8 9 | node?node1.a.org node?node2.a.org property?$ id = "cib-bootstrap-options" ?\ ? dc -version= "1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87" ?\ ? cluster-infrastructure= "openais" ?\ ? expected-quorum-votes= "2" ?\ ? stonith-enabled= "false" ?\ ? last-lrm-refresh= "1308059765" ?\ ? no-quorum-policy= "ignore" |
在如上輸出的信息中,請確保有stonith-enabled和no-quorum-policy出現且其值與如上輸出信息中相同。否則,可以分別使用如下命令進行配置:
1 2 | #?crm?configure?property?stonith-enabled=false #?crm?configure?property?no-quorum-policy=ignore |
2、將已經配置好的drbd設備/dev/drbd0定義為集群服務;
1)按照集群服務的要求,首先確保兩個節點上的drbd服務已經停止,且不會隨系統啟動而自動啟動:
1 | #?drbd-overview |
1 | ? 0:web?Unconfigured?.?.?.?. |
1 | #?chkconfig?drbd?off |
2)配置drbd為集群資源:
提供drbd的RA目前由OCF歸類為linbit,其路徑為/usr/lib/ocf/resource.d/linbit/drbd。我們可以使用如下命令來查看此RA及RA的meta信息:
1 | #?crm?ra?classes |
1 2 3 4 | heartbeat lsb ocf?/?heartbeat?linbit?pacemaker stonith |
1 | #?crm?ra?list?ocf?linbit |
1 | drbd |
1 | #?crm?ra?info?ocf:linbit:drbd |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | 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?interval=20?timeout=20?start-delay=1m ? monitor_Master?interval=10?timeout=20?start-delay=1m |
drbd需要同時運行在兩個節點上,但只能有一個節點(primary/secondary模型)是Master,而另一個節點為Slave;因此,它是一種比較特殊的集群資源,其資源類型為多態(Multi-state)clone類型,即主機節點有Master和Slave之分,且要求服務剛啟動時兩個節點都處于slave狀態。
1 | [root@node1?~] #?crm |
1 2 3 | crm(live) #?configure crm(live)configure #?primitive?webdrbd?ocf:linbit:drbd?params?drbd_resource=web?op?monitor?role=Master?interval=50s?timeout=30s?op?monitor?role=Slave?interval=60s?timeout=30s crm(live)configure #?master?MS_Webdrbd?webdrbd?meta?master-max="1"?master-node-max="1"?clone-max="2"?clone-node-max="1"?notify="true" |
1 2 3 4 | crm(live)configure #?show?webdrbd primitive?webdrbd?ocf:linbit:drbd?\ ? params?drbd_resource= "web" ?\ ? op ?monitor?interval= "15s" |
1 2 3 4 5 | crm(live)configure #?show?MS_Webdrbd ms?MS_Webdrbd?webdrbd?\ ? meta?master-max= "1" ?master-node-max= "1" ?clone-max= "2" ?clone-node-max= "1" ?notify= "true" crm(live)configure #?verify crm(live)configure #?commit |
查看當前集群運行狀態:
1 | #?crm?status |
1 2 3 4 5 6 7 8 | ============ Last?updated:?Fri?Jun?17?06:24:03?2011 Stack:?openais Current?DC:?node2.a.org?-?partition?with?quorum Version:?1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87 2?Nodes?configured,?2?expected?votes 1?Resources?configured. ============ |
1 2 3 4 5 | Online:?[?node2.a.org?node1.a.org?] ? Master /Slave ?Set:?MS_Webdrbd ? Masters:?[?node2.a.org?] ? Slaves:?[?node1.a.org?] |
由上面的信息可以看出此時的drbd服務的Primary節點為node2.a.org,Secondary節點為node1.a.org。當然,也可以在node2上使用如下命令驗正當前主機是否已經成為web資源的Primary節點:
1 | #?drbdadm?role?web |
1 | Primary /Secondary |
3)為Primary節點上的web資源創建自動掛載的集群服務
MS_Webdrbd的Master節點即為drbd服務web資源的Primary節點,此節點的設備/dev/drbd0可以掛載使用,且在某集群服務的應用當中也需要能夠實現自動掛載。假設我們這里的web資源是為Web服務器集群提供網頁文件的共享文件系統,其需要掛載至/www(此目錄需要在兩個節點都已經建立完成)目錄。
此外,此自動掛載的集群資源需要運行于drbd服務的Master節點上,并且只能在drbd服務將某節點設置為Primary以后方可啟動。因此,還需要為這兩個資源建立排列約束和順序約束。
1 | #?crm |
1 2 3 4 5 6 | crm(live) #?configure crm(live)configure #?primitive?WebFS?ocf:heartbeat:Filesystem?params?device="/dev/drbd0"?directory="/www"?fstype="ext3" crm(live)configure #?colocation?WebFS_on_MS_webdrbd?inf:?WebFS?MS_Webdrbd:Master crm(live)configure #?order?WebFS_after_MS_Webdrbd?inf:?MS_Webdrbd:promote?WebFS:start crm(live)configure #?verify crm(live)configure #?commit |
查看集群中資源的運行狀態:
1 | ? crm?status |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ============ Last?updated:?Fri?Jun?17?06:26:03?2011 Stack:?openais Current?DC:?node2.a.org?-?partition?with?quorum Version:?1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87 2?Nodes?configured,?2?expected?votes 2?Resources?configured. ============ Online:?[?node2.a.org?node1.a.org?] ? Master /Slave ?Set:?MS_Webdrbd ? Masters:?[?node2.a.org?] ? Slaves:?[?node1.a.org?] ? WebFS?(ocf::heartbeat:Filesystem):?Started?node2.a.org |
由上面的信息可以發現,此時WebFS運行的節點和drbd服務的Primary節點均為node2.a.org;我們在node2上復制一些文件至/www目錄(掛載點),而后在故障故障轉移后查看node1的/www目錄下是否存在這些文件。
1 | #?cp?/etc/rc./rc.sysinit?/www |
下面我們模擬node2節點故障,看此些資源可否正確轉移至node1。
以下命令在Node2上執行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #?crm?node?standby #?crm?status ============ Last?updated:?Fri?Jun?17?06:27:03?2011 Stack:?openais Current?DC:?node2.a.org?-?partition?with?quorum Version:?1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87 2?Nodes?configured,?2?expected?votes 2?Resources?configured. ============ Node?node2.a.org:?standby Online:?[?node1.a.org?] ? Master /Slave ?Set:?MS_Webdrbd ? Masters:?[?node1.a.org?] ? Stopped:?[?webdrbd:0?] ? WebFS?(ocf::heartbeat:Filesystem):?Started?node1.a.org |
由上面的信息可以推斷出,node2已經轉入standby模式,其drbd服務已經停止,但故障轉移已經完成,所有資源已經正常轉移至node1。
在node1可以看到在node2作為primary節點時產生的保存至/www目錄中的數據,在node1上均存在一份拷貝。
讓node2重新上線:
1 | #?crm?node?online |
1 | [root@node2?~]#?crm?status |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | ============ Last?updated:?Fri?Jun?17?06:30:05?2011 Stack:?openais Current?DC:?node2.a.org?-?partition?with?quorum Version:?1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87 2?Nodes?configured,?2?expected?votes 2?Resources?configured. ============ Online:?[?node2.a.org?node1.a.org?] ? Master /Slave ?Set:?MS_Webdrbd ? Masters:?[?node1.a.org?] ? Slaves:?[?node2.a.org?] ? WebFS?(ocf::heartbeat:Filesystem):?Started?node1.a.org
|