一、DRBD简介

    DRBD全称Distributed Replicated Block (分布式的复制块设备),开源项目。它是一款基于块设备的文件复制解决方案,速度比文件级别的软件如NFS,samba快很多,而且不会出现单点故障,是很多中小企业的共享存储首选解决方案。


    二、DRBD的工作模式

   从上图中我们可以清楚的看到DRBD是工作在内核中,将协议建立在buffer cache(内核缓存)与Disk scheduler(磁盘调度器)之间,将上下文传输的二进制数据复制一份,通过tcp/ip协议封装后由网卡发送至另一台DRBD节点上进行数据同步的。

   DRBD可以工作在主备(一个节点运行,另一个节点备份)模式,也可以工作在双主(上个节点同时运行)模式,在双主模式下要求必须建立在高可用集群的基础上工作。实现DRBD的必要条件是多个节点上必须准备相同大小相同名称的磁盘或分区。


    三、搭建DRBD主备模型

    1.准备环境

        1).系统centos6.6;内核2.6.32-504.el6.x86_64

        2).两个节点

            node1.wuhf.com:172.16.13.13

            node2.wuhf.com:172.16.13.14

        3).两个磁盘分区

            /dev/sda5 大小512M

        4).时间同步

            ntpdate -u 172.16.0.1

            crontab -e

            */3 * * * * /usr/sbin/ntpdate 172.16.0.1 &> /dev/null 

        5).基于密钥互访

            ssh-keygen -t rsa -f /root/.ssh/id_rsa -P ''

            ssh-copy-id -i /root/.ssh/id_rsa.pub root@IP

    2.安装程序包

      对应自己系统内核版本的软件包,下载至本地目录:

      drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm;

      kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm;

rpm -ivh drbd84-utils-8.9.1-1.el6.elrepo.x86_64.rpm kmod-drbd84-8.4.5-504.1.el6.x86_64.rpm

    3.配置文件

    drbd的主配置文件为/etc/drbd.conf;为了管理的便捷性,目前通常会将些配置文件分成多个部分,且都保存至/etc/drbd.d/目录中,主配置文件中仅使用"include"指令将这些配置文件片断整合起来。通常,/etc/drbd.d目录中的配置文件为global_common.conf和所有以.res结尾的文件。其中global_common.conf中主要定义global段和common段,而每一个.res的文件用于定义一个资源。

vim /etc/drbd.d/global-common.confglobal {        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 500M;                            //传输速率限制        }}#resource web {  on node1.magedu.com {    device    /dev/drbd0;    disk      /dev/sda5;    address   172.16.13.13:7789;    meta-disk internal;  }  on node2.magedu.com {    device    /dev/drbd0;    disk      /dev/sda5;    address   172.16.13.14:7789;    meta-disk internal;  }}

    4.启动服务

scp /etc/drbd.d/* node2:/etc/drbd.d       //配置文件复制给node2service drbd start; ssh node2 'service drbd start'   //两节点同时启动服务              drbd-overview                       //查看服务状态drbdadm primary --force web         //将当前节点强制设置为主节点drbd-overview

    5.挂载文件系统

mke2fs -t ext4 -L DRBD /dev/drbd0mkdir /mnt/drbdmount /dev/drbd0/mnt/drbd

    6.测试

    node1

touch  /mnt/drbd/{a,b,c}umount /mnt/drbddrbdadm secondary web      //将node1撤销为备用节点

    node2

mkdir /mnt/drbdmount /dev/drbd0/mnt/drbddrbdadm primary webdrbd-overviewls /mnt/drbd                   //查看目录下有没有a,b,c文件,有的话表示成功

    四、安装配置corosync+pacemaker+crmsh

    1.安装配置corosync

yum install corosync pacemaker -yrpm -ql corosynccd /etc/corosynccp corosync.conf.example corosync.confvim corosync.confcompatibility withetank  兼容性选项toten {    secauth:on            //安全认证功能开启    threads:0              //多线程    interface{             ringnumber:0         //心跳回传功能,一般不需要             bindnetaddr:172.16.0.0           //给网络地址             mcastaddr:239.165.17.13      //多播地址             mcastport: 5405             ttl:1             }}loggging {         fileline:off                               //         to_stderr:no                              //日志发往标准错误输出         to_logfile:yes         logfile:/var/log/cluster/corosync.log         to_syslog:no                                    debug:off         timestamp:on                //日志记录时间戳         logger_subsys {                    subsys:AME                    debug:off              }}
service {             //将pacemaker用作corosync的插件来运行  ver:  0  name: pacemaker  # use_mgmtd: yes}aisexec {  user: root  group:  root}
corosync-keygen                          //会生成密码文件authkeyscp -p authkey corosync.conf   node2:/etc/corosyncservice corosync start; ssh node2 'service corosync start'   ss -tunl             //查看5405是不是监听tail -f  /var/log/cluster/sorosync.loggrep pcmk_startup /var/log/cluster/corosync.log     //查看pacemaker是否正常启动

   2.安装crmsh

crmsh-2.1-1.6.x86_64.rpm               //准备安装包pssh-2.3.1-2.e16.x86_64.rpmyum --nogpgcheck install   crmsh-2.1-1.6.x86_64.rpm  pssh-2.3.1-2.e16.x86_64.rpmcrm status     //查看集群状态

    五、安装MariaDB

    1.node1

mariadb-5.5.43-linux-x86_64.tar.gz     //安装包tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/localcd /usr/local/ln -sv mariadb-5.5.43-linux-x86_64/ mysqlcd mysql/cp support-files/my-large.cnf /etc/my.cnfvim /etc/my.cnf                         //编辑mysql配置文件>thread_concurrency = 4>datadir = /mnt/drbd>innodb_file_per_table = ongroupadd -r -g 306 mysql                 //添加mysql用户useradd -r-u 306 -g 306 mysqlscp /etc/my.cnf node2:/etc/              //将配置文件复制到node2一份vim /etc/drbd.d/web.res service drbd start; ssh node1 'service drbd start'        //开启DRBDdrbdadm primary webdrbd-overviewmount /dev/drbd0 /mnt/drbd                                   //挂载drbd目录./scripts/mysql_install_db --datadir=/mnt/drbd/ --user=mysql      //初始化mysqlcd /usr/local/mysql/cp support-files/mysql.server /etc/rc.d/init.d/mysqldvim /etc/profile.d/mysql.shexport PATH=/usr/local/mysql/bin:$:PATH                 //补全路径 . /etc/profile.d/mysql.shservice mysqld startmysql                                              //测试mysqlchkconfig --add mysqldchkconfig --list mysqldchkconfig mysqld off                              //确保mysqld不能开机自启动service mysqld stopumount /mnt/drbd/drbdadm secondary web

    2.node2

mariadb-5.5.43-linux-x86_64.tar.gz     //安装包tar xf mariadb-5.5.43-linux-x86_64.tar.gz -C /usr/localcd /usr/local/ln -sv mariadb-5.5.43-linux-x86_64/ mysqlservice drbd start; ssh node1 'service drbd start'drbdadm primary webmount /dev/drbd0 /mnt/drbdcd /usr/local/mysql/cp support-files/mysql.server /etc/rc.d/init.d/mysqldvim /etc/profile.d/mysql.shexport PATH=/usr/local/mysql/bin:$:PATH . /etc/profile.d/mysql.shservice mysqld startmysql                                 //测试mysqlchkconfig --add mysqldchkconfig mysqld offservice mysqld stopumount /mnt/drbd/drbdadm secondary web                  //降级为次节点,停止drbd服务service drbd stop

    六、定义DRBD资源,实现高可用

crm configrue show                  //配置文件如下node node1.wuhf.com \        attributes standby=offnode node2.wuhf.com \        attributes standby=onprimitive mydata Filesystem \                    //定义文件系统资源        params device="/dev/drbd0" directory="/mnt/drbd" fstype=ext4 \        op monitor interval=20s timeout=40s \        op start timeout=60s interval=0 \        op stop timeout=60s interval=0primitive myip IPaddr \                          //定义VIP资源        params ip=172.16.13.209 \        op monitor interval=10s timeout=20sprimitive myserver lsb:mysqld \                  //定义mysql服务资源        op monitor interval=20s timeout=20sprimitive mystor ocf:linbit:drbd \               //定义drbd资源        params drbd_resource=web \        op monitor role=Master interval=10s timeout=20s \        op monitor role=Slave interval=20s timeout=20s \        op start timeout=240s interval=0 \        op stop timeout=100s interval=0ms ms_mystor mystor \                            //定义主备模式的两节点工作方式        meta clone-max=2 clone-node-max=1 master-max=1 master-node-max=1 notify=truetarget-role=Startedcolocation mydata_with_ms_mystor_master inf: mydata ms_mystor:Master   //定义三个排列colocation myip_with_ms_mystor_master inf: myip ms_mystor:Mastercolocation myserver_with_mydata inf: myserver mydataorder mydata_after_ms_mystor_master Mandatory: ms_mystor:promote mydata:start //定义顺序order myserver_after_mydata Mandatory: mydata:start myserver:startorder myserver_after_myip Mandatory: myip:start myserver:startproperty cib-bootstrap-options: \        dc-version=1.1.11-97629de \        cluster-infrastructure="classic openais (with plugin)" \        expected-quorum-votes=2 \                 stonith-enabled=false \           //爆头功能关闭         no-quorum-policy=ignore \         //集群分裂处理方式为忽略

    七、测试

   1.查看当前各节点状态

   当前node2是standby状态,所有资源运行在node1上

    2.将node2上线,将node1下线

    在node2上执行crm node online

    在node1上执行crm node standby

    查看可见,所有资源成功转移到node2上运行,一切正常,表示高可用mysql基于drbd成功了。