天天看點

Drbd+Pacemaker實作高可用

What is Pacemaker?

前提:

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、檢視目前叢集的配置資訊,確定已經配置全局屬性參數為兩節點叢集所适用:

<code># crm configure show</code>

<code>node node1.a.org</code>

<code>node node2.a.org</code>

<code>property $</code><code>id</code><code>=</code><code>"cib-bootstrap-options"</code> <code>\</code>

<code> </code><code>dc</code><code>-version=</code><code>"1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87"</code> <code>\</code>

<code> </code><code>cluster-infrastructure=</code><code>"openais"</code> <code>\</code>

<code> </code><code>expected-quorum-votes=</code><code>"2"</code> <code>\</code>

<code> </code><code>stonith-enabled=</code><code>"false"</code> <code>\</code>

<code> </code><code>last-lrm-refresh=</code><code>"1308059765"</code> <code>\</code>

<code> </code><code>no-quorum-policy=</code><code>"ignore"</code>

在如上輸出的資訊中,請確定有stonith-enabled和no-quorum-policy出現且其值與如上輸出資訊中相同。否則,可以分别使用如下指令進行配置:

<code># crm configure property stonith-enabled=false</code>

<code># crm configure property no-quorum-policy=ignore</code>

2、将已經配置好的drbd裝置/dev/drbd0定義為叢集服務;

1)按照叢集服務的要求,首先確定兩個節點上的drbd服務已經停止,且不會随系統啟動而自動啟動:

<code># drbd-overview</code>

<code> </code><code>0:web Unconfigured . . . .</code>

<code># chkconfig drbd off</code>

2)配置drbd為叢集資源:

提供drbd的RA目前由OCF歸類為linbit,其路徑為/usr/lib/ocf/resource.d/linbit/drbd。我們可以使用如下指令來檢視此RA及RA的meta資訊:

<code># crm ra classes</code>

<code>heartbeat</code>

<code>lsb</code>

<code>ocf / heartbeat linbit pacemaker</code>

<code>stonith</code>

<code># crm ra list ocf linbit</code>

<code>drbd</code>

<code># crm ra info ocf:linbit:drbd</code>

<code>This resource agent manages a DRBD resource</code>

<code>as a master</code><code>/slave</code> <code>resource. DRBD is a shared-nothing replicated storage</code>

<code>device. (ocf:linbit:drbd)</code>

<code>Master</code><code>/Slave</code> <code>OCF Resource Agent </code><code>for</code> <code>DRBD</code>

<code>Parameters (* denotes required, [] the default):</code>

<code>drbd_resource* (string): drbd resource name</code>

<code> </code><code>The name of the drbd resource from the drbd.conf </code><code>file</code><code>.</code>

<code>drbdconf (string, [</code><code>/etc/drbd</code><code>.conf]): Path to drbd.conf</code>

<code> </code><code>Full path to the drbd.conf </code><code>file</code><code>.</code>

<code>Operations' defaults (advisory minimum):</code>

<code> </code><code>start timeout=240</code>

<code> </code><code>promote timeout=90</code>

<code> </code><code>demote timeout=90</code>

<code> </code><code>notify timeout=90</code>

<code> </code><code>stop timeout=100</code>

<code> </code><code>monitor_Slave interval=20 timeout=20 start-delay=1m</code>

<code> </code><code>monitor_Master interval=10 timeout=20 start-delay=1m</code>

drbd需要同時運作在兩個節點上,但隻能有一個節點(primary/secondary模型)是Master,而另一個節點為Slave;是以,它是一種比較特殊的叢集資源,其資源類型為多态(Multi-state)clone類型,即主機節點有Master和Slave之分,且要求服務剛啟動時兩個節點都處于slave狀态。

<code>[root@node1 ~]</code><code># crm</code>

<code>crm(live)</code><code># configure</code>

<code>crm(live)configure</code><code># 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</code>

<code>crm(live)configure</code><code># master MS_Webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true"</code>

<code>crm(live)configure</code><code># show webdrbd</code>

<code>primitive webdrbd ocf:linbit:drbd \</code>

<code> </code><code>params drbd_resource=</code><code>"web"</code> <code>\</code>

<code> </code><code>op</code> <code>monitor interval=</code><code>"15s"</code>

<code>crm(live)configure</code><code># show MS_Webdrbd</code>

<code>ms MS_Webdrbd webdrbd \</code>

<code> </code><code>meta master-max=</code><code>"1"</code> <code>master-node-max=</code><code>"1"</code> <code>clone-max=</code><code>"2"</code> <code>clone-node-max=</code><code>"1"</code> <code>notify=</code><code>"true"</code>

<code>crm(live)configure</code><code># verify</code>

<code>crm(live)configure</code><code># commit</code>

檢視目前叢集運作狀态:

<code># crm status</code>

<code>============</code>

<code>Last updated: Fri Jun 17 06:24:03 2011</code>

<code>Stack: openais</code>

<code>Current DC: node2.a.org - partition with quorum</code>

<code>Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87</code>

<code>2 Nodes configured, 2 expected votes</code>

<code>1 Resources configured.</code>

<code>Online: [ node2.a.org node1.a.org ]</code>

<code> </code><code>Master</code><code>/Slave</code> <code>Set: MS_Webdrbd</code>

<code> </code><code>Masters: [ node2.a.org ]</code>

<code> </code><code>Slaves: [ node1.a.org ]</code>

由上面的資訊可以看出此時的drbd服務的Primary節點為node2.a.org,Secondary節點為node1.a.org。當然,也可以在node2上使用如下指令驗正目前主機是否已經成為web資源的Primary節點:

<code># drbdadm role web</code>

<code>Primary</code><code>/Secondary</code>

3)為Primary節點上的web資源建立自動挂載的叢集服務

MS_Webdrbd的Master節點即為drbd服務web資源的Primary節點,此節點的裝置/dev/drbd0可以挂載使用,且在某叢集服務的應用當中也需要能夠實作自動挂載。假設我們這裡的web資源是為Web伺服器叢集提供網頁檔案的共享檔案系統,其需要挂載至/www(此目錄需要在兩個節點都已經建立完成)目錄。

此外,此自動挂載的叢集資源需要運作于drbd服務的Master節點上,并且隻能在drbd服務将某節點設定為Primary以後方可啟動。是以,還需要為這兩個資源建立排列限制和順序限制。

<code># crm</code>

<code>crm(live)configure</code><code># primitive WebFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/www" fstype="ext3"</code>

<code>crm(live)configure</code><code># colocation WebFS_on_MS_webdrbd inf: WebFS MS_Webdrbd:Master</code>

<code>crm(live)configure</code><code># order WebFS_after_MS_Webdrbd inf: MS_Webdrbd:promote WebFS:start</code>

檢視叢集中資源的運作狀态:

<code> </code><code>crm status</code>

<code>Last updated: Fri Jun 17 06:26:03 2011</code>

<code>2 Resources configured.</code>

<code> </code><code>WebFS (ocf::heartbeat:Filesystem): Started node2.a.org</code>

由上面的資訊可以發現,此時WebFS運作的節點和drbd服務的Primary節點均為node2.a.org;我們在node2上複制一些檔案至/www目錄(挂載點),而後在故障故障轉移後檢視node1的/www目錄下是否存在這些檔案。

<code># cp /etc/rc./rc.sysinit /www</code>

下面我們模拟node2節點故障,看此些資源可否正确轉移至node1。

以下指令在Node2上執行:

<code># crm node standby</code>

<code>Last updated: Fri Jun 17 06:27:03 2011</code>

<code>Node node2.a.org: standby</code>

<code>Online: [ node1.a.org ]</code>

<code> </code><code>Masters: [ node1.a.org ]</code>

<code> </code><code>Stopped: [ webdrbd:0 ]</code>

<code> </code><code>WebFS (ocf::heartbeat:Filesystem): Started node1.a.org</code>

由上面的資訊可以推斷出,node2已經轉入standby模式,其drbd服務已經停止,但故障轉移已經完成,所有資源已經正常轉移至node1。

在node1可以看到在node2作為primary節點時産生的儲存至/www目錄中的資料,在node1上均存在一份拷貝。

讓node2重新上線:

<code># crm node online</code>

<code>[root@node2 ~]# crm status</code>

<code>Last updated: Fri Jun 17 06:30:05 2011</code>

<code> </code><code>Slaves: [ node2.a.org ]</code>

<code></code>

本文轉自 SoulMio 51CTO部落格,原文連結:http://blog.51cto.com/bovin/1861153,如需轉載請自行聯系原作者

繼續閱讀