天天看點

Corosync/Pacemaker+DRBD實作高可用叢集與DRBD共享

配置前提:

           1.節點的名字必須跟uname -n的名字相同,而且兩個主機必須能通過主機名來通路。盡量不通過DNS來通路。

           2.雙方的通信要必須通過SSL的無障礙通信機制

           3.雙節點之間可以通過某個IP來提供連接配接,但是這隻是通信Ip,我們需要VIP來對外提供服務。

           4.我采用虛拟機的方式實作配置,作業系統使用rhel5.4,x86平台

           5.兩個節點主機IP分别為172.16.19.11(node1.weiyan.org),以及172.16.19.12(node2.weiyan.org)

           6.叢集服務為apache的httpd服務

           7.提供Web服務的位址(VIP)為172.16.19.1

           8.在兩個節點上分别準備一塊大小為2G的分區用于實作DRBD的共享。(本文使用新分區/dev/sda5)

           9.本文中所提到的主要軟體包corosync所用和drbd的軟體包,都已經在文章最後給予提供

一:corosync的配置

1.準備工作

1)我們首先要保證兩節點之間時間相差不應該超過1秒

2)兩台主機的主機名:node1.weiyan.org && node2.weiyan.org 

3)分别在兩個node節點上編輯/etc/hosts檔案并加入

172.16.19.11   node1.weiyan.org   node1

           172.16.19.12   node2.weiyan.org   node2

4)生成密鑰,確定通信正常

5)安裝所依賴的軟體包,以及要用到的主程式包

這裡我們建立環境所需要依賴到的軟體包有:

           libibverbs,librdmacm,lm_sensors,libtool-ltdl,openhpi-libs,openhpi,perl-TimeDate

安裝corosync和pacemaker,下載下傳主程式包,并将其放至單獨目錄友善安裝:(這裡為/root/corosync)

cluster-glue、cluster-glue-libs、heartbeat、openaislib、resource-agents、corosync、heartbeat-libs、pacemaker、corosynclib、libesmtp、pacemaker-libs

2.配置corosync(這階段内容都在node1上進行)

1)編輯corosync.conf使其含有如下内容

# Please read the corosync.conf.5 manual page

           compatibility: whitetank

           totem {               ##定義多個node節點之間實作心跳資訊傳遞的相關協定詳細資訊        

           version: 2

                   secauth: off  ##是否打開安全認證

                   threads: 0

                   interface {

                           ringnumber: 0

                           bindnetaddr: 172.16.19.0      ##通過哪個網段進行通信

                           mcastaddr: 226.94.1.1         ##多點傳播位址

                           mcastport: 5405               ##多點傳播端口

                   }

           }

           logging {

                   fileline: off       

                   to_stderr: no                ##是否将錯誤資訊發送到标準錯誤輸出

                   to_logfile: yes              ##是否寫入日志檔案

                   to_syslog: yes               ##是否寫到系統日志程序上去

                   logfile: /var/log/cluster/corosync.log      ##需要手動去建立這個路徑

                   debug: off

                   timestamp: on

                   logger_subsys {

                           subsys: AMF

                           debug: off

           } 

           amf {

                   mode: disabled

           service {

                   ver:0

                   name:pacemaker      ##表明我們要啟動pacemaker

           aisexec {

                   user:root           ##定義啟動的身份群組

                   group:root

    建立目錄:mkdir /var/log/cluster

2)生成authkey

3)将配置檔案和authkey傳遞到node2

3.啟動corosync并檢查配置

1)驗證錯誤

##檢視corosync引擎是否正常啟動

           grep -e “Corosync Cluster Engine” -e “configuration file” /var/log/messages

 應出現含有:[MAIN  ] Corosync Cluster Engine ('1.2.7'): started and ready to provide service.

##檢視初始化成員節點通知是否發出   

           grep TOTEM /var/log/messages 

應出現含有:[TOTEM ] The network interface [172.16.19.11] is now up.

##檢查啟動過程中是否有錯誤産生:

           grep ERROR: /var/log/messages 

應沒有任何内容出現

##檢視pacemaker是否正常啟動:

           grep pcmk_startup /var/log/messages 

應出現含有:[pcmk  ] info: pcmk_startup: Local hostname: node1.weiyan.org

3)當node1的檢測正常之後,進行node2啟動和驗證

4).檢視目前叢集狀态:

============

           Last updated: Wed Sep 14 20:16:17 2011

           Stack: openais

           Current DC: node1.weiyan.org - partition WITHOUT quorum

           Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87

           2 Nodes configured, 2 expected votes

           0 Resources configured.

           ============ 

Online: [ node1.weiyan.org node2.weiyan.org ]

二.定義高可用資源

1.我們裡可以通過如下指令先禁用stonith:

2.添加IP資源

3.定義httpd資源

1)分别在兩個節點上安裝httpd

2)添加網頁以友善驗證

3)手動停止其開機自動啟動并確定目前沒有啟動中

4)定義httpd叢集資源

4.檢視狀态并定義限制

1)檢視目前資源狀态

           Last updated: Web Sep 14 20:29:31 2011

           Current DC: node2.weiyan.org - partition with quorum

           2 Resources configured.

 WebIP    (ocf::heartbeat:IPaddr):  Started node1.weiyan.org

            WebServer     (lsb:httpd):       Started node2.weiyan.org

2)定義關聯以及限制

3)定義quorum運作方式

4)檢視配置狀态

node node1.weiyan.org \

                    attributes standby="off"

           node node2.weiyan.org \

           primitive WebIP ocf:heartbeat:IPaddr \

                    params ip="172.16.19.1"

           primitive WebServer lsb:httpd

           colocation WebServer-with-WebIP inf: WebServer WebIP

           order WebServer-after-WebIP inf: WebIP WebServer

           property $id="cib-bootstrap-options" \

                    dc-version="1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87" \

                    cluster-infrastructure="openais" \

                    expected-quorum-votes="2" \

                    stonith-enabled="false" \

                    no-quorum-policy="ignore"

           rsc_defaults $id="rsc-options" \

                    resource-stickiness="200"

三,配置DRBD

1.安裝drbd

2.配置drbd

1)複制樣例配置檔案為即将使用的配置檔案:

2)配置/etc/drbd.d/global-common.conf

global {

                   usage-count no;

                   # minor-count dialog-refresh disable-ip-verification

common {

                   protocol C; 

        handlers {

                           pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                           pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";

                           local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";

                           fence-peer "/usr/lib/drbd/crm-fence-peer.sh";

                           split-brain "/usr/lib/drbd/notify-split-brain.sh root";

                           out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";

                           before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";

                           after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;

                   } 

               ## handlers裡的内容非常重要,防止DRBD腦裂,我們需要将所有的防止機制都開啟

        startup {

                           wfc-timeout 120;

                           degr-wfc-timeout 120;

        disk {

                           on-io-error detach;

                           fencing resource-only;

        net {

                           cram-hmac-alg "sha1";

                           shared-secret "mydrbdlab";

        syncer {

                           rate 100M;

}

3).定義一個新資源/etc/drbd.d/web.res,内容如下:

resource web {

             on node1.weiyan.org {

               device    /dev/drbd0;

               disk      /dev/sda5;

               address   172.16.19.11:7789;

               meta-disk internal;

             }

             on node2.weiyan.org {

               address   172.16.19.12:7789;

4).将配置檔案同步至node2

4.初始化已定義的資源并啟動服務:

1)初始化資源,在Node1和Node2上分别執行:

2)啟動服務,在Node1和Node2上分别執行:

3)檢視啟動狀态:

version: 8.3.8 (api:88/proto:86-94)

           GIT-hash: d78846e52224fd00562f7c225bcc25b2d422321d build by [email protected], 2010-06-04 08:04:16

            0: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----

               ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:1959800

4)設定node1為主節點

5)而後再次檢視狀态,可以發現資料同步過程已經開始:

# drbd-overview

             0:web  SyncSource Primary/Secondary UpToDate/Inconsistent C r----

                    [====>...............] sync'ed: 28.0% (1413848/1959800)K delay_probe: 52

6)等資料同步完成以後再次檢視狀态,可以發現節點已經牌實時狀态,且節點已經有了主次:

5、建立檔案系統

檔案系統的挂載隻能在Primary節點進行,是以,也隻有在設定了主節點後才能對drbd裝置進行格式化:

6、切換Primary和Secondary節點

對主Primary/Secondary模型的drbd服務來講,在某個時刻隻能有一個節點為Primary,是以,要切換兩個節點的角色,隻能在先将原有的Primary節點設定為Secondary後,才能原來的Secondary節點設定為Primary:

四:配置corosync使叢集能争用DRBD資源。

版權聲明:

本人在實作這篇文檔的時候發現文檔内容有細微錯誤,在這裡已将其糾正。并增加了注釋。希望大家在實作的過程中發現問題請及時提出。

1.為了将DRBD定義成叢集服務,我們首先要做以下工作

停止drbd服務,以及不能使其開機啟動

2.配置drbd為叢集資源:

小貼士:

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

 crm ra info ocf:linbit:drbd

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

[root@node1 ~]# crm

crm(live)# configure

crm(live)configure# primitive webdrbd ocf:heartbeat: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"

crm(live)configure# show webdrbd    ## 檢視我們定義的Webdrbd資源

primitive WebDRBD ocf:heartbeat:drbd \

params drbd_resource="web" \

op monitor interval="50s" role="Master" timeout="30s" \

op monitor interval="60s" role="Slave" timeout="30s"

crm(live)configure# show MS_Webdrbd  ## 檢視定義的clone資源

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

## 檢視目前叢集運作狀态:

crm status

           Last updated: Fri Jun 17 06:24:03 2011

           1 Resources configured.

           ============

Online: [ node2.weiyan.org node1.weiyan.org ]

 Master/Slave Set: MS_Webdrbd

 Masters: [ node2.weiyan.org ]

            Slaves: [ node1.weiyan.org ]

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

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

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

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

## 定義挂載資源

crm

           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

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

           Last updated: Fri Jun 17 06:26:03 2011

            Masters: [ node2.weiyan.org ]

 WebFS (ocf::heartbeat:Filesystem): Started node2.weiyan.org

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

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

以下指令在Node2上執行:

crm node standby   ##我們先讓node2節點待命

           crm status         ##檢視狀态

           Last updated: Fri Jun 17 06:27:03 2011

Node node2.weiyan.org: standby

           Online: [ node1.weiyan.org ]

            Masters: [ node1.weiyan.org ]

            Stopped: [ webdrbd:0 ]

 WebFS (ocf::heartbeat:Filesystem): Started node1.weiyan.org

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

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

讓node2重新上線:

crm node online    ## 讓node2上線

           crm status    ## 檢視狀态,發現node2重新上線并成為主drbd

           Last updated: Fri Jun 17 06:30:05 2011

            Slaves: [ node2.weiyan.org ]

            WebFS (ocf::heartbeat:Filesystem): Started node1.weiyan.org

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

繼續閱讀