heartbeat實現基於mysql服務自動切換

  由於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 <[email protected]>
# 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
[email protected]
[email protected]
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上的日誌:

好了,整個腳本測試完成,同時還有集羣節點切換的時候還有郵件可以及時通知。

祝:玩的愉快!



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章