基於DRBD實現高可用MariaDB

    一、DRBD簡介

    DRBD全稱Distributed Replicated Block (分佈式的複製塊設備),開源項目。它是一款基於塊設備的文件複製解決方案,速度比文件級別的軟件如NFS,samba快很多,而且不會出現單點故障,是很多中小企業的共享存儲首選解決方案。


    二、DRBD的工作模式

wKioL1VuerHxcyvbAAM2Zg3VjoM129.jpg


   從上圖中我們可以清楚的看到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.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 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       //配置文件複製給node2
service drbd start; ssh node2 'service drbd start'   //兩節點同時啓動服務              
drbd-overview                       //查看服務狀態
drbdadm primary --force web         //將當前節點強制設置爲主節點
drbd-overview

    5.掛載文件系統

mke2fs -t ext4 -L DRBD /dev/drbd0
mkdir /mnt/drbd
mount /dev/drbd0/mnt/drbd

    6.測試

    node1

touch  /mnt/drbd/{a,b,c}
umount /mnt/drbd
drbdadm secondary web      //將node1撤銷爲備用節點

    node2

mkdir /mnt/drbd
mount /dev/drbd0/mnt/drbd
drbdadm primary web
drbd-overview
ls /mnt/drbd                   //查看目錄下有沒有a,b,c文件,有的話表示成功

    四、安裝配置corosync+pacemaker+crmsh

    1.安裝配置corosync

yum install corosync pacemaker -y
rpm -ql corosync
cd /etc/corosync
cp corosync.conf.example corosync.conf
vim corosync.conf
compatibility 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                          //會生成密碼文件authkey
scp -p authkey corosync.conf   node2:/etc/corosync
service corosync start; ssh node2 'service corosync start'   
ss -tunl             //查看5405是不是監聽
tail -f  /var/log/cluster/sorosync.log
grep 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.rpm
yum --nogpgcheck install   crmsh-2.1-1.6.x86_64.rpm  pssh-2.3.1-2.e16.x86_64.rpm
crm 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/local
cd /usr/local/
ln -sv mariadb-5.5.43-linux-x86_64/ mysql
cd mysql/
cp support-files/my-large.cnf /etc/my.cnf
vim /etc/my.cnf                         //編輯mysql配置文件
>thread_concurrency = 4
>datadir = /mnt/drbd
>innodb_file_per_table = on
groupadd -r -g 306 mysql                 //添加mysql用戶
useradd -r-u 306 -g 306 mysql
scp /etc/my.cnf node2:/etc/              //將配置文件複製到node2一份
vim /etc/drbd.d/web.res 
service drbd start; ssh node1 'service drbd start'        //開啓DRBD
drbdadm primary web
drbd-overview
mount /dev/drbd0 /mnt/drbd                                   //掛載drbd目錄
./scripts/mysql_install_db --datadir=/mnt/drbd/ --user=mysql      //初始化mysql
cd /usr/local/mysql/
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$:PATH                 //補全路徑
 . /etc/profile.d/mysql.sh
service mysqld start
mysql                                              //測試mysql
chkconfig --add mysqld
chkconfig --list mysqld
chkconfig mysqld off                              //確保mysqld不能開機自啓動
service mysqld stop
umount /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/local
cd /usr/local/
ln -sv mariadb-5.5.43-linux-x86_64/ mysql
service drbd start; ssh node1 'service drbd start'
drbdadm primary web
mount /dev/drbd0 /mnt/drbd
cd /usr/local/mysql/
cp support-files/mysql.server /etc/rc.d/init.d/mysqld
vim /etc/profile.d/mysql.sh
export PATH=/usr/local/mysql/bin:$:PATH
 . /etc/profile.d/mysql.sh
service mysqld start
mysql                                 //測試mysql
chkconfig --add mysqld
chkconfig mysqld off
service mysqld stop
umount /mnt/drbd/
drbdadm secondary web                  //降級爲次節點,停止drbd服務
service drbd stop

    六、定義DRBD資源,實現高可用

crm configrue show                  //配置文件如下
node node1.wuhf.com \
        attributes standby=off
node node2.wuhf.com \
        attributes standby=on
primitive 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=0
primitive myip IPaddr \                          //定義VIP資源
        params ip=172.16.13.209 \
        op monitor interval=10s timeout=20s
primitive myserver lsb:mysqld \                  //定義mysql服務資源
        op monitor interval=20s timeout=20s
primitive 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=0
ms ms_mystor mystor \                            //定義主備模式的兩節點工作方式
        meta clone-max=2 clone-node-max=1 master-max=1 master-node-max=1 notify=truetarget-role=Started
colocation mydata_with_ms_mystor_master inf: mydata ms_mystor:Master   //定義三個排列
colocation myip_with_ms_mystor_master inf: myip ms_mystor:Master
colocation myserver_with_mydata inf: myserver mydata
order mydata_after_ms_mystor_master Mandatory: ms_mystor:promote mydata:start //定義順序
order myserver_after_mydata Mandatory: mydata:start myserver:start
order myserver_after_myip Mandatory: myip:start myserver:start
property 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上

wKioL1VuqrvDnDx1AANH_tdlF9E317.jpg

    2.將node2上線,將node1下線

    在node2上執行crm node online

    在node1上執行crm node standby

    查看可見,所有資源成功轉移到node2上運行,一切正常,表示高可用mysql基於drbd成功了。

wKioL1Vuq9qx25TVAAM-T3XfdsU686.jpg


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