kinght2008 发表于 2019-1-7 06:07:50

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