| 由于heartbeat自身可以通过dopd来判断心跳线宕机后,能实现自动切换,但是当一些服务宕机了,就无法实现自动切换了,常见的场景有mysqld服务,有的时候会出现连接不上mysqld服务,比如超过最大连接数的时候,当然还有其他的场景,所以就写了一个脚本来实现自动监控mysqld服务状态来实现heartbeat服务状态进行切换,heartbeat+mysqld+共享存储见前面博文,猛戳《 实战Heartbeat+mysql+共享存储实现高可用》。 接下来先看一下脚本是思路:
 
 
 脚本内容如下: #!/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是两个节点,索引在两个节点上均执行该脚本即可。
 
 接下来开始测试: 
 1、停掉HA主节点上的mysqld服务: 
 由于现在主节点在HA2上,如下图所示: 
 
 现在我模拟手动停掉mysqld服务: 
 
 然后查看脚本中日志记录: 
 
 然后稍等片刻,我们查看HA2上资源状态: 
 
 可以看出,mysqld服务自动启动起来了。 
 
 
 2、毁坏性的破坏mysqld服务: 
 由于集群启动会自动带起mysqld服务,我就让heartbeat启动找不到mysqld资源,所以,我把mysqld服务启动脚本重命名一下,然后看效果。 
 
 然后看备用节点上的状况: 
 
 资源已经切换到了HA1上了。 
 接下来查看集群切换日志: 
 a.首先查看脚本日志: 
 
 b.然后查看HA2日志: 
 
 c.查看HA1上的日志: 
 
 好了,整个脚本测试完成,同时还有集群节点切换的时候还有邮件可以及时通知。 
 祝:玩的愉快! 
 
 
 
 
 
 
 |