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

來源:互聯網
上載者:User

  由於heartbeat自身可以通過dopd來判斷心跳線宕機後,能實現自動切換,但是當一些服務宕機了,就無法實現自動切換了,常見的情境有mysqld服務,有的時候會出現串連不上mysqld服務,比如超過最大串連數的時候,當然還有其他的情境,所以就寫了一個指令碼來實現自動監控mysqld服務狀態來實現heartbeat服務狀態進行切換,heartbeat+mysqld+共用儲存見前面博文,猛戳《實戰Heartbeat+mysql+共用儲存實現高可用》。

  接下來先看一下指令碼是思路:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU55531-0.jpg" title="lw.jpg" />

指令碼內容如下:

#!/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=rootpassword=n=0mysqlmon_log=/var/log/mysqlmon.logmysql_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 listfunction_add_maillist(){cat >/tmp/userlist<<EOF282127408@qq.comluoweiro@126.comEOF}[ -f /tmp/userlist ] && echo "The file has." || touch /tmp/userlist ;function_add_maillistfunction_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 10done

由於我使用的heartbeat是兩個節點,索引在兩個節點上均執行該指令碼即可。

接下來開始測試:

1、停掉HA主節點上的mysqld服務:

由於現在主節點在HA2上,如所示:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU5D93-1.png" title="ha2.1.png" />

現在我類比手動停掉mysqld服務:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU54127-2.png" title="ha2.2.png" />

然後查看指令碼中日誌記錄:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU533D-3.png" title="ha2.4.png" />

然後稍等片刻,我們查看HA2上資源狀態:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU55048-4.png" title="ha2.3.png" />

可以看出,mysqld服務自動啟動起來了。


2、毀壞性的破壞mysqld服務:

由於叢集啟動會自動帶起mysqld服務,我就讓heartbeat啟動找不到mysqld資源,所以,我把mysqld服務啟動指令碼重新命名一下,然後看效果。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU55B2-5.png" title="ha2.5.png" />

然後看備用節點上的狀況:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU51Y8-6.png" title="ha1.1.png" />

資源已經切換到了HA1上了。

接下來查看叢集切換日誌:

a.首先查看指令碼日誌:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU52209-7.png" title="ha12.png" />

b.然後查看HA2日誌:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU535S-8.png" title="ha222.png" />

c.查看HA1上的日誌:

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/131227/1AU55959-9.png" title="ha1111.png" />

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

祝:玩的愉快!



本文出自 “Ro の部落格” 部落格,謝絕轉載!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.