因为heartbeat自身能够经过dopd来判断心跳线宕机后,能实现自动切换,可是当一些服务宕机了,就没法实现自动切换了,常见的场景有mysqld服务,有的时候会出现链接不上mysqld服务,好比超过最大链接数的时候,固然还有其余的场景,因此就写了一个脚原本实现自动监控mysqld服务状态来实现heartbeat服务状态进行切换,heartbeat+mysqld+共享存储见前面博文,猛戳《实战Heartbeat+mysql+共享存储实现高可用》。mysql
接下来先看一下脚本是思路:sql
脚本内容以下:bash
#!/bin/bash #:Title:monitor heartbeat's mysql resource. #:Synopsis: #:Data:2013-08-20 13:36:32 #:Version:1.1 #################################### # 2013.08 by LuoWei <luoweiro@126.com> # Copyright (C) 2005 by Baison #################################### trap 'echo PROGRAM INTERRUPTED; exit 1' INT #The user/password for connection mysql. username=root password= n=0 mysqlmon_log=/var/log/mysqlmon.log mysql_conmand="/usr/local/mysql/bin/mysql -u$username -e " #mysql_conmand="/usr/local/mysql/bin/mysql -u$username -p$password -e " echo >$mysqlmon_log #mail list function_add_maillist(){ cat >/tmp/userlist<<EOF 282127408@qq.com luoweiro@126.com EOF } [ -f /tmp/userlist ] && echo "The file has." || touch /tmp/userlist ;function_add_maillist function_mail(){ IFS=$'\n' for LINE in `cat /tmp/userlist`;do echo "Heartbeat has changed,please see see." | mail -s "Heartbeat standby" $LINE done } function_retry(){ echo `date +"%Y-%m-%d %H:%M:%S"` mysqld cannot be connected! >> $mysqlmon_log n=$[n + 1] service mysqld restart >/dev/null 2>&1 } function_ha_standby(){ service heartbeat standby >/dev/null 2>&1 echo `date +"%Y-%m-%d %H:%M:%S"` mysqld switched to backup! >> $mysqlmon_log service heartbeat start >/dev/null 2>&1 } while true; do ifconfig | grep eth0:0 >/dev/null 2>&1 if [[ $? -eq 0 ]];then if $mysql_conmand "use openshop;" >&/dev/null;then n=0 else function_retry if [ $n -eq 3 ] ; then function_ha_standby function_mail break fi fi fi sleep 10 done
因为我使用的heartbeat是两个节点,索引在两个节点上均执行该脚本便可。
ide
接下来开始测试:测试
一、停掉HA主节点上的mysqld服务:spa
因为如今主节点在HA2上,以下图所示:rest
如今我模拟手动停掉mysqld服务:日志
而后查看脚本中日志记录:blog
而后稍等片刻,咱们查看HA2上资源状态:索引
能够看出,mysqld服务自动启动起来了。
二、毁坏性的破坏mysqld服务:
因为集群启动会自动带起mysqld服务,我就让heartbeat启动找不到mysqld资源,因此,我把mysqld服务启动脚本重命名一下,而后看效果。
而后看备用节点上的情况:
资源已经切换到了HA1上了。
接下来查看集群切换日志:
a.首先查看脚本日志:
b.而后查看HA2日志:
c.查看HA1上的日志:
好了,整个脚本测试完成,同时还有集群节点切换的时候还有邮件能够及时通知。
祝:玩的愉快!