实验平台:virtualbox 4.12

操作系统:RedHat5.4

实验拓扑:

Corosync+DRBD构建高可用web服务_第1张图片 

 本实验使用两台主机模拟实现高可用集群,使用DRBD实现分布式存储,在一台主机宕机是可以保证数据的完整及服务的正常。

 

. 首先进行一些基本的准备设置。

    # vim /etc/sysconfig/network-scripts/ifcfg-eth0 

    #vim /etc/sysconfig/network

    安装实验规划进行相应修改即可

    #vim /etc/hosts

    添加:          

   
   
   
   
  1. 192.168.56.10   node1.a.org node1  
  2. 192.168.56.30   node2.a.org node2  

    拷贝该文件至node2

    # scp /etc/hosts node2:/etc/

    接下来要设置ssh免密码连接  

   
   
   
   
  1. [root@node1 ~]#ssh-keygen -t rsa  
  2. [root@node1 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub root@node2  
  3. [root@node2 ~]#ssh-keygen -t rsa  
  4. [root@node2 ~]#ssh-copy-id -i ~/.ssh/id_rsa.pub root@node1   

.安装DRBD,用来构建分布式存储。

    1.这里要选用适合自己系统的版本进行安装,我用到的是

    

   
   
   
   
  1. drbd83-8.3.8-1.el5.centos.i386.rpm    
  2. kmod-drbd83-8.3.8-1.el5.centos.i686.rpm   

   下面开始安装,两台主机都要装上: 

   
   
   
   
  1. [root@node1 ~]# yum localinstall *.rpm -y –nogpgcheck  
  2. [root@node1 ~]# scp *.rpm node2:/root  
  3. [root@node2 ~]# yum localinstall *.rpm -y –nogpgcheck  

    还要为DRBD准备分区,同样是要在两台主机上分别进行,关于分区的操作就不细述来,很简单,我在两台主机上各分了一个5G的分区,盘符都是/dev/sda5

    2.配置DRBD

    

   
   
   
   
  1. [root@node1 ~]# cp /usr/share/doc/drbd83-8.3.8/drbd.conf /etc/  
  2.   cp: overwrite `/etc/drbd.conf'? Y   # 这里要选择覆盖  
  3. [root@node1 ~]# scp /etc/drbd.conf node2:/etc/  

  编辑配置文件:   

[root@node1 ~]# vim /etc/drbd.d/global_common.conf

    

   
   
   
   
  1.    global {  
  2.         usage-count no;  
  3. }  
  4. common {  
  5.         protocol C;  
  6.         handlers {  
  7.                 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";  
  8.                 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";  
  9.                 local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";   
  10.         }  
  11.         startup {  
  12.                 wfc-timeout 120;  
  13.                 degr-wfc-timeout 120;  
  14.         }  
  15.         disk {  
  16.             on-io-error detach;  
  17.              fencing resource-only;  
  18.         }  
  19.         net {  
  20.               cram-hmac-alg "sha1";  
  21.            shared-secret "mydrbdlab";  
  22.         }  
  23.         syncer {  
  24.          rate 100M;  
  25.         }   

    DRBD定义一个资源  

   
   
   
   
  1.  [root@node1 ~]# vim /etc/drbd.d/web.res       #这里名字可以随便起,但一定要是.res结尾的文件  
  2.  resource web {  
  3.   on node1.a.org {  
  4.     device    /dev/drbd0;  
  5.     disk      /dev/sda5;  
  6.     address   192.168.56.10:7789;  
  7.     meta-disk internal;  
  8.   }  
  9.   on node2.a.org {  
  10.     device    /dev/drbd0;  
  11.     disk      /dev/sda5;  
  12.     address   192.168.56.30:7789;  
  13.     meta-disk internal;  
  14.   }  
  15. }  
  16. [root@node1 ~]# scp /etc/drbd.d/web.res node2:/etc/drbd.d/  
 

    初始化资源,在Node1Node2上分别执行:

   
   
   
   
  1. [root@node1 ~]# drbdadm create-md web  
  2. [root@node2 ~]# drbdadm create-md web  
  3. #启动服务:  
  4. [root@node1 ~]# /etc/init.d/drbd start  
  5. [root@node2 ~]# /etc/init.d/drbd start  

    设置其中一个节点为主节点

    # drbdsetup /dev/drbd0 primary –o

    3.创建文件系统

   
   
   
   
  1. [root@node1 ~]# mke2fs -j -L DRBD /dev/drbd0  
  2. [root@node1 ~]# mkdir /mnt/drbd   
  3. [root@node1 ~]# mount /dev/drbd0 /mnt/drbd  
  

.安装corosync

    用到的软件包有

   
   
   
   
  1. cluster-glue-1.0.6-1.6.el5.i386.rpm  
  2. cluster-glue-libs-1.0.6-1.6.el5.i386.rpm  
  3. corosync-1.2.7-1.1.el5.i386.rpm  
  4. corosynclib-1.2.7-1.1.el5.i386.rpm  
  5. heartbeat-3.0.3-2.3.el5.i386.rpm  
  6. heartbeat-libs-3.0.3-2.3.el5.i386.rpm  
  7. libesmtp-1.0.4-5.el5.i386.rpm  
  8. openais-1.1.3-1.6.el5.i386.rpm  
  9. openaislib-1.1.3-1.6.el5.i386.rpm  
  10. pacemaker-1.0.11-1.2.el5.i386.rpm  
  11. pacemaker-libs-1.0.11-1.2.el5.i386.rpm  
  12. resource-agents-1.0.4-1.1.el5.i386.rpm

 [root@node1 ~]#  yum localinstall *.rpm -y --nogpgcheck

配置corosync

   

   
   
   
   
  1. [root@node1 ~]#cd /etc/corosync  
  2. [root@node1 ~]# cp corosync.conf.example corosync.conf  
  3. [root@node1 ~]#vim corosync.conf  
  4.     bindnetaddr: 192.168.56.0  
  5. #并添加如下内容:  
  6. service {  
  7.     ver:  0  
  8.     name: pacemaker  
  9. }  
  10. aisexec {  
  11.     user:  root  
  12.     group:  root  

生成节点间通信时用到的认证密钥文件:

   
   
   
   
  1. [root@node1 corosync]# corosync-keygen  
  2. [root@node1 corosync]# scp -p corosync.conf authkey  node2:/etc/corosync/  
  3. [root@node1 ~]#  mkdir /var/log/cluster  
  4. [root@node1 ~]#  ssh node2  'mkdir /var/log/cluster' 

启动服务

   
   
   
   
  1. [root@node1 ~]# /etc/init.d/corosync start  
  2. [root@node1 ~]# ssh node2 -- /etc/init.d/corosync start  
  3. [root@node1 ~]# crm configure property stonith-enabled=false       //禁用stonith  
  4. 为集群添加集群资源  
  5. [root@node1 ~]#crm configure primitive WebIP ocf:heartbeat:IPaddr params ip=192.168.56.20  
  6. [root@node1 ~]# crm configure property no-quorum-policy=ignore 
  7. 为资源指定默认黏性值  
  8. [root@node1 ~]# crm configure rsc_defaults resource-stickiness=100 
  9. [root@node1 ~]# crm  
  10. crm(live)# configure  
  11. 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 
  12. crm(live)configure# master MS_Webdrbd webdrbd meta master-max="1" master-node-max="1" clone-max="2" clone-node-max="1" notify="true" 
  13.  

 

Primary节点上的web资源创建自动挂载的集群服务

   
   
   
   
  1. # crm  
  2. crm(live)# configure  
  3. crm(live)configure# primitive WebFS ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/www" fstype="ext3" 
  4. crm(live)configure# colocation WebFS_on_MS_webdrbd inf: WebFS MS_Webdrbd:Master  
  5. crm(live)configure# order WebFS_after_MS_Webdrbd inf: MS_Webdrbd:promote WebFS:start  
  6. crm(live)configure# verify  
  7. crm(live)configure# commit  

 查看集群中资源的运行状态:

Corosync+DRBD构建高可用web服务_第2张图片 

下面我们在两个节点分别安装httpd服务用于测试

   
   
   
   
  1. [root@node1 ~]# yum install httpd -y  
  2. [root@node2 ~]# yum install httpd -y  
  3. root@node1 ~]# setenforce 0        //关闭SElinux  
  4. root@node2 ~]# setenforce 0  
  5. [root@node1 ~]# vim /etc/httpd/conf/httpd.conf  
  6.     DocumentRoot "//mnt/drbd/html"  
  7. [root@node1 ~]# echo "<h1>Node1.a.orgh1>> /mnt/debd/html/index.html  
  8. [root@node1 ~]# crm configure primitive WebSite lsb:httpd      //添加httpd为资源  
  9. [root@node1 ~]# crm configure colocation website-with-ip INFINITY: WebSite WebIP //是IP和web服务在同一主机上  
  10. [root@node1 ~]# crm configure order httpd-after-ip mandatory: WebIP WebSite      //定义资源启动顺序  

查看资源状态: 

Corosync+DRBD构建高可用web服务_第3张图片 

下面在浏览器内输入192.168.56.20,可以看到 

Corosync+DRBD构建高可用web服务_第4张图片 

此时停掉node1

查看资源状态:

Corosync+DRBD构建高可用web服务_第5张图片 

刷新页面可以看到

Corosync+DRBD构建高可用web服务_第6张图片

说明corosync和DRBD都工作正常。