因爲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上的日誌:
好了,整個腳本測試完成,同時還有集羣節點切換的時候還有郵件能夠及時通知。
祝:玩的愉快!