高可用集群实验四:DRBD+corosync+pacemaker

wKiom1Ygs9rzW_J7AABuN7PWZnQ024.jpg

在上一篇文章基础上,在两台服务器上添加DRBD,并通过corosync+pacemaker来启动:

先说明一下:实验中用的操作系统为CentOS 6.4 (内核版本为2.6.32-358.e16.x86_64),并没有自带drbd内核模块(2.6.33开始才有自带),需要自己添加。而网上找到的rpm包对CentOS 6.4的识别有问题,一直提示需要2.6.32-358.e16.x86_64的内核(实际上本身就是这个版本),网上也有其它人说在CentOS6.4上装有问题。所以下面的例子就不通过rpm包安装了,而是直接从官网下载源码编译安装。

 

 

在两台服务器上

1.各新加一块磁盘/dev/sdb.

2.创建新分区sdb1:

    fdisk /dev/sdb

    partprobe /dev/sdb1

3.安装内核开发相关工具包:

    yum  -y  install  kernel-devel    kernel-headers  flex  gcc

4.解压缩源码、编译并添加为服务:

    tar zxf drbd-8.4.3.tar.gz

    cd drbd-8.4.3

    ./configure --with-km

    make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64

    make install

    mkdir -p /usr/local/var/run/drbd  # 必须加这个目录

    cp /usr/local/etc/rc.d/init.d/drbd  /etc/rc.d/init.d/  

#与rpm安装不同的是,源码安装后相应的配置文件路径为/usr/local/etc/……

    chkconfig --add drbd

    chkconfig drbd on

    cd drbd

    make clean

    make KDIR=/usr/src/kernels/2.6.32-358.el6.x86_64

    cp drbd.ko /lib/modules/`uname -r`/kernel/lib/

    modprobe drbd

6.查看模块是否已添加:

    lsmod | grep drbd

 

在其中一台上
1.添加修改文件:
vim/usr/local /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 "thisissecret";
        }
       syncer {
  rate 500M;
        }
}


2.添加资源文件:
vim /usr/local/etc/drbd.d/drbdweb.res
resource drbdweb {
    device    /dev/drbd0;
    disk      /dev/sdb1;
    meta-disk internal;
    on node1.test.net {
        address   192.168.1.2:7789;
    }
    on  node2.test.net {
        address   192.168.1.3:7789;
    }
}
3.将配置文件拷到另一台上:
    scp -r /usr/local/etc/drbd.*  192.169.1.3:/usr/local/etc/


两服务器上初始化资源并启动服务,并查看状态:
    drbdadm create-md drbdweb
    service drbd start
    cat /proc/drbd
    drbd-overview


在其中一台上:
1.设置成primary:
    drbdadm -- --overwrite-data-of-peer primary drbdweb
2.进行格式化并挂载
    mkfs.ext4 /dev/drbd0
    mkdir /drbd
    mount /dev/drbd0 /drbd
3.随便创建一个文件、卸载、设置成secondary
    touch /drbd/something
    umount/drbd
    drbdadm secondary drbdweb


在另一台上升级为primary,挂载并查看是否有刚才创建的文件:
    drbdadm primary drbdweb
    drbd-overview
    mkdir /drbd
    mount /dev/drbd0 /drbd
    ls /drbd


至此,DRBD实验就已经完成了。


这里顺便插入说一下:在下面的实验过程中如果某些操作有问题导致DRBD脑裂(split-brain)时,需要手工解决才能继续使用,方法如下:
1.选择其中一个节点丢弃:
    drbdadm secondary <resource>
    drbdadm connect --discard-my-data <resource>
2.另一个节点:
    drbdadm connect <resource>
更详细内容可参考官方文档:http://drbd.linbit.com/users-guide/s-resolve-split-brain.html



下面是进行corosync+pacemaker来接管DRBD:


在两台服务器
1.卸载和服务停止:
    umount /mnt/drbd
    service drbd stop
    chkconfig drbd off
2.更改配置文件:
vim /etc/corosync/corosync.conf

wKioL1Ygs5TQtTttAADV2mS62gI134.jpg

wKioL1YgsveiPNRUAABtzA4pSlM874.jpg

实际上就是在上个实验的配置文件上添加以下内容:
 # 定义corosnyc的工作用户,需要使用root用户
aisexec {                        
     user: root  
     group: root  
}
3.启动服务
    service corosync start


在其中一台上:
1.查看资源代理
    crm ra list ocf linbit
    crm ra info ocf:linbit:drbd
2.添加资源和约束:
    crm
    configure primitive resdrbdweb ocf:linbit:drbd params drbd_resource=drbdweb op start timeout=240s op stop timeout=100s
    configure ms ms_bdrbdweb resdrbdweb meta master-max=1 master-node-max=1 clone-max=2 clone-node-max=1
    configure primitive drbdfs ocf:heartbeat:Filesystem params device="/dev/drbd0" directory="/drbd" fstype="ext4" op start timeout=60s op stop timeout=60s
    configure colocation drbdfs_and_ms_drbdweb inf: drbdfs ms_drbdweb:Master
    configure order ms_drbdweb_before_drbdfs Mandatory: ms_drbdweb:promote drbdfs:start
3.最终结果如下:
    configure show

wKiom1YgszLgjlAAAALXJ2TLImY467.jpg

上图中的 reshttpd resip是上个实验的配置,这里可忽略

 

自切换测试:

1.查看状态:

    crm status

2.在主节点上创建文件,并切换成standby:

    touch /drbd/another

    crm node standby

3.在另一台上查看状态切换及文件同步:

    crm status

    ls /drbd/

4.将刚才设置成standby的服务器再次上线:

    crm node online

        

你可能感兴趣的:(高可用,集群,drbd,corosync)