Corosync/Pacemaker+DRBD實現高可用集羣與DRBD共享

配置前提:
1.節點的名字必須跟uname -n的名字相同,而且兩個主機必須能通過主機名來訪問。儘量不通過DNS來訪問。
2.
雙方的通信要必須通過SSL的無障礙通信機制
3.
雙節點之間可以通過某個IP來提供連接,但是這只是通信Ip,我們需要VIP來對外提供服務。
4.
我採用虛擬機的方式實現配置,操作系統使用rhel5.4x86平臺
5.
兩個節點主機IP分別爲172.16.19.11node1.weiyan.org,以及172.16.19.12node2.weiyan.org
6.
集羣服務爲apachehttpd服務
7.
提供Web服務的地址(VIP)172.16.19.1
8.
在兩個節點上分別準備一塊大小爲2G的分區用於實現DRBD的共享。(本文使用新分區/dev/sda5)
9.本文中所提到的主要軟件包corosync所用和drbd的軟件包,都已經在文章最後給予提供


一:corosync的配置

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

  1. hwclock -s 

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)生成密鑰,確保通信正常

  1. ## node1上: 
  2. ssh-keygen -t rsa 
  3. ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] 
  4. ## node2上: 
  5. ssh-keygen -t rsa 
  6. ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected] 

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

下載地址:http://clusterlabs.org/rpm/。請根據硬件平臺及操作系統類型選擇對應的軟件包;這裏建議每個軟件包都使用目前最新的版本。(本文最後提供了這些軟件包,可以直接下載)

  1. ## 安裝使用: 
  2. cd /root/corosync 
  3. yum -y --nogpgcheck localinstall *.rpm 

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

  1. cd /etc/corosync/ 
  2. cp corosync.conf.example corosync.conf 

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

  1. corosync-keygen      ##自動生成認證密鑰(默認情況下將會從熵池裏拿隨機數)  

3)將配置文件和authkey傳遞到node2

  1. scp -p authkey corosync.conf node2:/etc/corosync 
  2. ssh node2 ‘mkdir -v /var/log/cluster’ 

3.啓動corosync並檢查配置

  1. service corosync start  

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啓動和驗證

  1. ssh node2 ‘/etc/init.d/corosync start’  

4).查看當前集羣狀態

  1. crm status 

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

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:

  1. crm configure property stonith-enabled=false  

2.添加IP資源

  1. crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=172.16.19.1  

3.定義httpd資源

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

  1. yum install -y httpd 

2)添加網頁以方便驗證

  1. ## node1上輸入: 
  2. echo “node1.weiyan.org” > /var/www/html/index.html 
  3. ## node2上輸入: 
  4. echo “node2.weiyan.org” > /var/www/html/index.html 

3)手動停止其開機自動啓動並確保當前沒有啓動中

  1. chkconfig httpd off 
  2. service httpd stop 

4)定義httpd集羣資源

  1. crm configure primitive WebServer lsb:httpd 

4.查看狀態並定義約束

1)查看當前資源狀態

  1. crm status 

============
Last updated: Web Sep 14 20:29:31 2011
Stack: openais
Current DC: node2.weiyan.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============

 

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

 WebIP    (ocf::heartbeat:IPaddr):  Started node1.weiyan.org
 WebServer     (lsb:httpd):       Started node2.weiyan.org


2)定義關聯以及約束

  1. crm configure colocation WebServer-with-WebIP INFINITY: WebServer WebIP 
  2. crm configure order WebServer-after-WebIP mandatory: WebIP WebServer 
  3. crm configure location prefer-node1 WebServer rule 200: node1  

3)定義quorum運行方式

  1. crm configure property no-quorum-policy=ignore  

4)查看配置狀態

  1. crm configure show 

node node1.weiyan.org \
         attributes standby="off"
node node2.weiyan.org \
         attributes standby="off"
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

  1. yum -y --nogpgcheck localinstall drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm 

2.配置drbd

1)複製樣例配置文件爲即將使用的配置文件:

  1. cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc 

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 {

    device    /dev/drbd0;

    disk      /dev/sda5;

    address   172.16.19.12:7789;

    meta-disk internal;

  }

}

4).將配置文件同步至node2

  1. scp -r /etc/drbd.conf /etc/drbd.d/ node2:/etc/ 


4.初始化已定義的資源並啓動服務:

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

  1. drbdadm create-md web 

2)啓動服務,在Node1和Node2上分別執行

  1. /etc/init.d/drbd start 

3)查看啓動狀態:

  1. cat /proc/drbd 

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爲主節點

  1. drbdsetup /dev/drbd0 primary –o 

5)而後再次查看狀態,可以發現數據同步過程已經開始:

# drbd-overview

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

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

6)等數據同步完成以後再次查看狀態,可以發現節點已經牌實時狀態,且節點已經有了主次:

  1. drbd-overview 
  2.  0:web  Connected Primary/Secondary UpToDate/UpToDate C r----

5、創建文件系統


文件系統的掛載只能在Primary節點進行,因此,也只有在設置了主節點後才能對drbd設備進行格式化:

  1. mke2fs -j -L DRBD /dev/drbd0 ## 格式化爲ext3 
  2. mkdir /mnt/drbd  ## 創建測試目錄 
  3. mount /dev/drbd0 /mnt/drb ## 掛載至測試目錄 

6、切換Primary和Secondary節點

對主Primary/Secondary模型的drbd服務來講,在某個時刻只能有一個節點爲Primary,因此,要切換兩個節點的角色,只能在先將原有的Primary節點設置爲Secondary後,才能原來的Secondary節點設置爲Primary:
  1. ## Node1上: 
  2. echo “drbd.weiyan.org” > /mnt/drbd/index.html  ##定義測試文件 
  3. umount /mnt/drbd  ## 卸載drbd 
  4. drbdadm secondary web ##設置node1爲Secondary狀態 
  5.  
  6. ##查看狀態:則兩節點都爲Secondary狀態 
  7. drbd-overview 
  8.   0:web  Connected Secondary/Secondary UpToDate/UpToDate C r---- 
  9.  
  10. ## Node2上: 
  11. drbdadm primary web ## 設置node2成爲Primary狀態 
  12. drbd-overview 
  13.   0:web  Connected Primary/Secondary UpToDate/UpToDate C r---- 
  14. mkdir /mnt/drbd 
  15. mount /dev/drbd0 /mnt/drbd ## 掛載至測試目錄 

 


四:配置corosync使集羣能爭用DRBD資源。

版權聲明:

第四步實現的過程文檔爲轉載,原作者花費不少心血來實現並寫成文檔,請大家尊重原作者,下文原作者:馬哥,博客地址:http://blog.chinaunix.net/space.php?uid=233544&do=blog&id=2427499

本人在實現這篇文檔的時候發現文檔內容有細微錯誤,在這裏已將其糾正。並增加了註釋。希望大家在實現的過程中發現問題請及時提出。

1.爲了將DRBD定義成集羣服務,我們首先要做以下工作

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

  1. drbd-overview 
  2.  0:web Unconfigured . . . .  
  3. chkconfig drbd off  

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
Stack: openais
Current DC: node2.weiyan.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
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節點:

  1. drbdadm role web 
  2.     Primary/Secondary  ## 發現已經是主節點

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

## 查看集羣中資源的運行狀態:

crm status

============
Last updated: Fri Jun 17 06:26:03 2011
Stack: openais
Current DC: node2.weiyan.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============

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

 Master/Slave Set: MS_Webdrbd
 Masters: [ node2.weiyan.org ]
 Slaves: [ node1.weiyan.org ]

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


由上面的信息可以發現,此時WebFS運行的節點和drbd服務的Primary節點均爲node2.a.org;我們在node2上覆制一些文件至/www目錄(掛載點),而後在故障故障轉移後查看node1的/www目錄下是否存在這些文件。

  1. cp /etc/rc./rc.sysinit /www 

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

以下命令在Node2上執行:

crm node standby   ##我們先讓node2節點待命
crm status         ##查看狀態

============
Last updated: Fri Jun 17 06:27:03 2011
Stack: openais
Current DC: node2.weiyan.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============

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

 Master/Slave Set: MS_Webdrbd
 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
Stack: openais
Current DC: node2.weiyan.org - partition with quorum
Version: 1.0.11-1554a83db0d3c3e546cfd3aaff6af1184f79ee87
2 Nodes configured, 2 expected votes
2 Resources configured.
============

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

 Master/Slave Set: MS_Webdrbd
 Masters: [ node1.weiyan.org ]
 Slaves: [ node2.weiyan.org ]
 WebFS (ocf::heartbeat:Filesystem): Started node1.weiyan.org

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章