Tag Archives: Corosync

Corosync+openais的实现

2011.09.24 , 系统监控 , No Comments , 88 views

http://evolution.blog.51cto.com/3343305/665775

原文出自

Corosync提供一种HA集群的解决方案,它使用Pacemaker可扩展的高可用集群资源管理器,配合heartbeat或OpenAIS监控节点之间健康状态,通过服务资源的流转,来保证集群向外提供服务的高可用性。

225115955 Corosync+openais的实现

DRBD是一种块设备,可以被用于高可用(HA)之中,它类似于一个网络RAID-1功能。将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上。以相同的形式记录在一个文件系统中本地(主节点)与远程主机(备节点)的数据可以保证实时同步,以提供数据的异地容灾。在高可用(HA)中使用DRBD功能,以代替昂贵的共享存储设备

下面借用DRBD官网的一幅图简述其工作流程

171321313 Corosync+openais的实现

本方案拓扑如下:

235453799 Corosync+openais的实现

以下内容包括corosync、drbd的详尽安装及配置过程:

一、Corosync的安装及配置

1.要保证两台节点服务器基于ssl加密且能无障碍的监听heartbeat信号


  1. ssh-keygen -t rsa 
  2. ssh-copy-id -i ~/.ssh/id_rsa.pub node2 
  3. #node1节点上生成rsa密钥对,并将公钥复制到node2节点 
  4. ssh-keygen -t rsa 
  5. ssh-copy-id -i ~/.ssh/id_rsa.pub node1 
  6. #node2节点上生成rsa密钥对,并将公钥复制到node1节点 

2.安装相关软件包

172439910 Corosync+openais的实现


  1. yum localinstall -y --nogpgcheck ./* 
  2. #进入rpm目录下,全部安装 

 Ps:node2进行相同操作

3.配置corosync


  1. cd /etc/corosync 
  2. cp corosync.conf.example corosync.conf 
  3. #进入配置文件目录,从配置文件蓝本复制并修改内容 
  4. vim corosync.conf 
  5. bindnetaddr: 192.168.0.0 
  6. #修改成集群节点所在网段 
  7. service { 
  8.     ver:  0 
  9.     name: pacemaker 
  10. aisexec { 
  11.     user:   root 
  12.     group:  root 
  13. #添加这些字段,保存退出 
  14. corosync-keygen 
  15. #使用软件自带脚本生成通信加密认证文件 
  16. scp -p corosync.conf authkey  node2:/etc/corosync/ 
  17. #将corosync和authkey复制至node2 
  18. mkdir /var/log/cluster 
  19. ssh node2  mkdir /var/log/cluster 
  20. #分别为两个节点创建corosync生成的日志所在的目录 

 4.在node1节点尝试启动corosync服务,并分析日志来获知其启动状态


  1. service corosync start 
  2. #启动服务 

  1. grep -e "Corosync Cluster Engine" -e "configuration file" /var/log/messages 
  2. #查看服务是否正常启动 

173539608 Corosync+openais的实现


  1. grep  TOTEM  /var/log/messages 
  2. #查看初始化成员节点通知是否正常发出 

173703879 Corosync+openais的实现


  1. grep pcmk_startup /var/log/messages 
  2. #查看pacemaker是否正常启动 

173827125 Corosync+openais的实现

node1正常启动,启动node2


  1. ssh node2 service corosync start 
  2. #启动node服务 
  3. crm status
  4. #查看集群节点启动情况

174144499 Corosync+openais的实现

 5.配置集群的工作属性


  1. crm configure property stonith-enabled=false 
  2. #关闭stonith设备检测 
  3. crm configure property no-quorum-policy=ignore 
  4. #关闭法定投票人数策略 
  5. crm configure rsc_defaults resource-stickiness=100 
  6. #定义全局资源粘性值 

对于上述配置的几点说明:

1.由于没有stonith设备,故关闭检测;

2.由于是双节点HA集群,如果在启动法定投票人策略quorum后,将导致其中一台节点服务器宕机另一台由于获得不够半数的法定人投票而导致整个集群无法工作 ;

3.设置资源粘性值,目的在于防止定义的服务资源在两台性能相同的节点服务器上,因其中一台服务器当机状态恢复而回流,导致无谓的消耗集群系统资源 。


  1. crm configure show 
  2. #查看配置信息 

180239712 Corosync+openais的实现

 6.添加服务资源


  1. crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.0.73 
  2. #添加VIP资源 
  3. crm configure primitive WebServer lsb:httpd 
  4. #添加web服务资源 
  5. crm configure show 
  6. #查看配置 

180657854 Corosync+openais的实现


  1. crm status 
  2. #查看此时集群状态,资源已被均分在两节点上 

180901275 Corosync+openais的实现

corosync的配置基本完成,下面是安装、配置DRBD并将其定义为corosync资源,实现高可用。

二、DRBD的安装及配置

1.安装相关软件包

Ps:drbd共有两部分组成:内核模块和用户空间的管理工具。其中drbd内核模块代码已经整合进Linux内核2.6.33以后的版本中,因此,如果您的内核版本高于此版本的话,你只需要安装管理工具即可;否则,您需要同时安装内核模块和管理工具两个软件包,并且此两者的版本号一定要保持对应。(由于作者的内核版本较低,这里选用rpm包来安装drbd模块)


  1. yum localinstall -y --nogpgcheck drbd83-8.3.8-1.el5.centos.i386.rpm kmod-drbd83-8.3.8-1.el5.centos.i686.rpm 
  2. #系在这两个rpm包,并安装 

2.DRBD的配置

注意:在修改配置文件之前先给drbd创建一个供其使用的磁盘设备,可以是磁盘分区raid或者逻辑卷(这里作者就直接给其分配一块磁盘分区:使用fdisk命令)


  1. cp /usr/share/doc/drbd83-8.3.8/drbd.conf  /etc 
  2. #复制蓝本配置文件到指定目录下 
  3. /etc/drbd.d/global-common.conf 
  4. global { 
  5.         usage-count no; 
  6. #修改此项到no 
  7. handler {
  8. fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
  9. #由于没有stonith设备需要开启此项,使用drbd的fence脚本来防止脑裂
  10. }
  11. startup { 
  12.                 wfc-timeout 120; 
  13.                 degr-wfc-timeout 120; 
  14. disk    { 
  15.                 on-io-error detach; 
  16.         fencing resource-only; 
  17. net     { 
  18.             cram-hmac-alg "sha1"
  19.             shared-secret "mydrbdlab"
  20. syncer { 
  21.                 rate 100M; 
  22.         } 
  23. #在对应位置添加以上内容 
  24. vim /etc/drbd.d/web.res 
  25. #创建资源文件 
  26. resource web { 
  27.   on node1.a.org { 
  28.     device    /dev/drbd0; 
  29.     disk      /dev/sda5; 
  30.     address   192.168.0.71:7789; 
  31.     meta-disk internal;   
  32.   } 
  33.   on node2.a.org { 
  34.     device    /dev/drbd0; 
  35.     disk      /dev/sda5; 
  36.     address   192.168.0.72:7789; 
  37.     meta-disk internal; 
  38.   } 
  39. #添加这些内容 
  40. scp /etc/drbd.conf node2:/etc/ 
  41. scp /etc/drbd.d/* node2:/etc/drbd.d/ 
  42. #将修改好的配置文件同步到node2 

3.启动并测试DRBD


  1. drbdadm create-md web 
  2. ssh node2 drbdadm create-md web 
  3. #在两节点上初始化资源 
  4. service drbd start 
  5. ssh node2 service drbd start 
  6. #在两节点上启动资源 
  7. drbd-overview  
  8. #查看运行状态状态 

183732933 Corosync+openais的实现


  1. drbdadm -- --overwrite-data-of-peer primary web 
  2. #设置主节点 
  3. drbd-overview
  4. #观察运行状态 

 Ps:您可以使用:watch -n1 'drbd-overview'以每秒一次的刷新频率动态观察运行状态

184026399 Corosync+openais的实现

 同步完成

184351554 Corosync+openais的实现

4.创建文件系统,手动测试主从DRBD


  1. mke2fs -j -L DRBD /dev/drbd0 
  2. mkdir /mnt/drbd  
  3. mount /dev/drbd0 /mnt/drbd 
  4. #node1挂载中出现lost+found目录 
  5. echo ’test drbd by peacmaker’ > /mnt/drbd/index.html

手动将node2设成master 


  1. drbdadm secondary web 
  2. #在node1上将node1设置成从 
  3. ssh node2 drbdadm primary web 
  4. #在node1上将node2设置成主 
  5. ssh node2 mount /dev/drbd0 /mnt/drbd 
  6. #在node2上挂载 
  7. ssh node2 ll /mnt/drbd 
  8. #查看出现lost+found以及index.html文件 

三、将DRBD整合成corosync资源,接受集群调度

先关闭两节点drbd服务,将其定义集群资源后由corosync控制其启动


  1. chkconfig drbd off 
  2. service drbd stop 
  3. ssh node2 chkconfig drbd off 
  4. ssh node2 service drbd stop 
  5. #在两节点上关闭服务 

定义webdrbd资源 


  1. crm 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 
  2. crm configure ms MS_Webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" 

查看状态

190926213 Corosync+openais的实现

定义磁盘共享资源,并设置资源约束,规定启动顺序


  1. crm configure primitive WebFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/var/www/html" fstype="ext3" 
  2. #定义文件系统资源,挂载信息 
  3. crm configure colocation webserver-ip-FS-MS INFINITY: WebServer WebIP WebFS MS_Webdrbd 
  4. #定义资源约束,将所有资源捆绑在一起,使其只能处于一个节点上 
  5. crm configure order ip-fs- mandatory: WebIP MS_Webdrbd WebFS WebServer 
  6. #定义启动顺序:IP资源,DRBD提升为主节点,挂载文件系统,web服务 

 查看资源状态

215128470 Corosync+openais的实现

添加资源约束后,所有约束都在一个节点上,此时从浏览器输入地址

http://192.168.0.73出现drbd中index.html页面内容

214221463 Corosync+openais的实现

现模拟node2宕机,查看资源状态

注意:由于drbd的crm-fence-peer.sh脚本存在,会自动在xml文件中生成如下语句,来保证一旦drbd的master宕机slaver不会顶上master,当master恢复之后出现脑裂或数据不同步等情况的发生。

所以在测试资源流转之前需要删除相关语句,从而实现通过corosync控制drbd资源的流转。


  1. crm configure edit  
  2. #删除下图中标记字段,以实现pacemaker对drbd进行出从切换  

185838709 Corosync+openais的实现


  1. ssh node2 crm node standby  
  2. #在node1上让node2处于standby待命状态 
  3. crm status
  4. #查看资源状态

214611981 Corosync+openais的实现

资源已经全部成功转移到node1上!

刷新浏览器页面,由于drbd主从受corosync控制发生切换,故web服务将正常访问且是相同内容:

214845375 Corosync+openais的实现

至此Corosync/Pacemaker+heartbeat+drbd高可用集群具体实现流程已叙述完毕,以上内容在您实现过程中出现的任何问题,欢迎在此交流;并请各位高手前辈大神达人予以批评指正,谢谢!

Corosync+Pacemaker+DRBD高可用集群|rhel6高可用

2011.09.15 , 企业架构 , No Comments , 128 views

原文出自http://foreveryan.blog.51cto.com/3508502/665534

 

 

配置前提:

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)

 


一: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 root@node2.weiyan.org 
  4. ## node2上: 
  5. ssh-keygen -t rsa 
  6. ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1.weiyan.org 

 

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;         } 

        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 mockbuild@builder10.centos.org, 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