123213 发表于 2015-11-23 10:07:47

HeartBeat+MySQL+DRBD

先卸载两边节点原来磁盘设备所对应的挂载目录,并在fstab里注释掉相关行,防止系统启动时自动挂载

yum install heartbeat.x86_64 heartbeat-libs.x86_64 -y
1.两边节点的mysql的uid和gid要一致
2.附件内heartbeat的配置文件都放在/etc/ha.d/下
3.DRBD和Heartbeat的通信采用网线直连方式,以防干扰,避免交换机单点故障.
4.Service需要如下设置,两边节点需一致
mysqld开机不启动,
drbd开机启动
heartbeart开机启动



加上静态路由直走该网卡通信,em2为DRBD直连网卡,放入
HB1(10.0.1.11)
route add -host 10.0.1.12 dev em2
HB2(10.0.1.12)
route add -host 10.0.1.11 dev em2

加上静态路由直走该网卡通信,eth2为Heartbeat直连网卡
DRBD1(10.0.0.11)
route add -host 10.0.0.12 dev eth2
DRBD2(10.0.0.11)
route add -host 10.0.0.11 dev eth2

ha.cf

该文件2边配置文件都保持一致,但是如果心跳采用单播模式,记得两边配置文件对应行需要修改成对方节点IP
===============================================================================
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local1
#options configure
keepalive 2
deadtime 30
warntime 10
initdead 120
#心跳网卡上的组播
#mcast eth2 225.0.0.7 694 1 0    //多节点采用组播方式,不过双节点也可以
ucast eth2 192.168.0.82       //双节点可以考虑采用单播方式,IP填写对方节点即可
#node configure
#不要自动failback
auto_failback off          //主节点宕机恢复后,不会自动接管资源,数据库没事别切来切去.
node    cluster1          //主机名,使用uname -n查看
node    cluster2
crm no
===============================================================================

haresources

该文件2边配置文件都保持一致
1.IPaddr,drbddisk,Filesystem,mysqld都是存在于/etc/ha.d/resource.d或者/etc/init.d下的文件,heartbeat会自动去这2个目录下寻找对应的命令
2.IPaddr::192.168.1.151/24/eth1,表示VIP的地址/掩码/以及VIP绑定在哪块网卡上.
3.drbddisk::r0,这里的r0是drbd的resource name,在drbd.conf可以查看
===============================================================================
cluster1 IPaddr::192.168.1.151/24/eth1 drbddisk::r0 Filesystem::/dev/drbd0::/var/lib/mysql::ext4 mysqld
===============================================================================

authkeys

该文件2边配置文件都保持一致
该文件权限属性必须是600
===============================================================================
auth 1
1 sha1 47e9336850f1db6fa58bc470bc9b7810eb397f04
===============================================================================

drbd.conf
===============================================================================
#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd83/drbd.conf
#
global {
   # minor-count 64;
   # dialog-refresh 5; # 5 seconds
   # disable-ip-verification;
   usage-count no;
}

common {
   syncer { rate 100M; }
}

resource r0 {
   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";
          after-resync-target "/usr/lib/drbd/crm-unfence-peer.sh";
}

net {
   # timeout               60;
   # connect-int          10;
   # ping-int               10;
   # max-buffers          2048;
   # max-epoch-size   2048;
    after-sb-0pri disconnect;
    after-sb-1pri disconnect;
    after-sb-2pri disconnect;
    rr-conflict disconnect;
   cram-hmac-alg   "sha1";
   shared-secret   "FDD123456";
    # 使用dopd (drbd outdate-peer daemon) 功能保证在数据不同步时不进行切换(Heartbeat)

}

disk {
   on-io-error   detach;
#   fencing          resource-only;
   # 使用dopd (drbd outdate-peer daemon) 功能保证在数据不同步时不进行切换
}

startup {
   wfc-timeout 120;
   degr-wfc-timeout 120;
}

#on之后必须是主机名,使用uname -n得到
on cluster1 {
   device   /dev/drbd0;
   disk   /dev/sdb1;
   address   192.168.0.81:7788;
   meta-disk   internal;
}

on cluster2 {
   device   /dev/drbd0;
   disk   /dev/sdb1;
   address   192.168.0.82:7788;
   meta-disk   internal;
}

}
===============================================================================

chk_mysql.sh

这个文件的作用是检查MySQL的进程是否存在,如果不存在则杀死heartbeat,触发备节点接管业务.
该文件加上可执行权限后放在/usr/bin下,然后放在/etc/init.d/mysql的start段的末尾:
case "$1" in
start)
    start
    bash /usr/bin/chk_mysql.sh&
    ;;
这样就能随mysql启动而启动了
==============================================================================
#!/bin/bash
#filename:chk_mysql.sh
CHK_MYSQL=$(ps -C chk_mysql.sh --no-header|wc -l)
if [[ "$CHK_MYSQL" -gt 0 ]]
      then
         echo "chk_mysql.sh is started"
                exit 0
else
while test 1 = 1
do
DRBD=$(drbd-overview |awk '{print $3}'|awk -F\/ '{print $1}')
if [[ "$DRBD" = "Primary" ]]
      then
                echo "DRBD is Primary,it's going to check MySQL status"
                MYSQL=$(ps -C mysqld --no-header|wc -l)
                if [[ "$MYSQL" -eq 0 ]]
                        then
                              echo "MySQL is not running,pkill heartheart"
               $(killall heartbeat) && sleep 60 && break
             else
                              echo "MySQL is runing,do nothing"
                              sleep 60
                fi
      else
                echo "DRBD is not Primary,do nothing"
                sleep 60
fi
done
fi
===========================================================


页: [1]
查看完整版本: HeartBeat+MySQL+DRBD