這篇文章主要介紹了如何更改/etc/init.d/MySQL并讓HeartBeat只是監(jiān)控MYSQL的狀態(tài),具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
10年積累的成都網(wǎng)站制作、網(wǎng)站建設(shè)經(jīng)驗(yàn),可以快速應(yīng)對(duì)客戶對(duì)網(wǎng)站的新想法和需求。提供各種問(wèn)題對(duì)應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識(shí)你,你也不認(rèn)識(shí)我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有興文免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
基于HA在發(fā)生切換時(shí),都會(huì)做STOP本機(jī)資源,然后再START對(duì)方的資源。
我們的實(shí)際環(huán)境中有兩個(gè)資源:
一個(gè)是IPaddr,用來(lái)管理VIP;
一個(gè)是mysql, 用來(lái)管理MYSQL資源;
在實(shí)際的應(yīng)用過(guò)程中,我們發(fā)現(xiàn)MYSQL一下子關(guān)不掉(flush dirty pages),或啟動(dòng)需要很長(zhǎng)時(shí)間(recovery).這樣也就大大延長(zhǎng)了HA切換的時(shí)間。
所以我們?cè)谙?,是不是可以讓HA只管理MYSQL的狀態(tài),而不管理MYSQL的啟動(dòng)與STOP呢?
我們知道,HA管理lsb類型的資源時(shí),是調(diào)用/etc/init.d/或者./resource.d/ 目錄下的該資源相關(guān)命令加參數(shù)start/stop/status.
比如,有mysql資源,
啟動(dòng)mysql: service mysql start
停止mysql: service mysql stop
狀態(tài)mysql: service mysql status
為了達(dá)到目的,我們可以修改SHELL腳本:/etc/init.d/mysql
====================================
'status')
# First, check to see if pid file exists
if test -s "$server_pid_file" ; then
read mysqld_pid < $server_pid_file
if kill -0 $mysqld_pid 2>/dev/null ; then
log_success_msg "MySQL running ($mysqld_pid)"
exit 0
else
log_failure_msg "MySQL is not running, but PID file exists"
exit 1
fi
else
# Try to find appropriate mysqld process
mysqld_pid=`pidof $sbindir/mysqld`
if test -z $mysqld_pid ; then
if test "$use_mysqld_safe" = "0" ; then
lockfile=/var/lock/subsys/mysqlmanager
else
lockfile=/var/lock/subsys/mysql
fi
if test -f $lockfile ; then
log_failure_msg "MySQL is not running, but lock exists"
exit 2
fi
log_failure_msg "MySQL is not running"
exit 3
else
log_failure_msg "MySQL is running but PID file could not be found"
exit 4
fi
fi
;;
====================================>>>>
這一段改為:
================================================================
'status')
# First, check to see if pid file exists
if test -s "$server_pid_file" ; then
read mysqld_pid < $server_pid_file
if kill -0 $mysqld_pid 2>/dev/null ; then
# --------------------------------------------------- Modi-1
. /root/.bash_profile
MYSQLPID=$$
STAT_FILE=/home/mysql/mysql.`date +%Y%m%d%H%M%S`.$MYSQLPID
mysql -uroot -h227.0.0.1 -s -e "select "aliyun.mysql" ;" > $STAT_FILE 2>&1 &
CNT=1
MYSQLSTATUS=UNKNOWN
while [ "$MYSQLSTATUS" = "UNKNOWN" ]
do
if test -f $STAT_FILE
then
read CONTENT < $STAT_FILE
if [ "$CONTENT" = "aliyun.mysql" ]
then
MYSQLSTATUS=OK
log_success_msg "MySQL running ($mysqld_pid)"
rm -f $STAT_FILE
exit 0
elif [ "$CONTENT" != "" ]; then
ERROR_CNT=`grep -i "error" $STAT_FILE | grep -v "using password" | wc -l`
if [ "$ERROR_CNT" -ge "1" ];then
log_failure_msg "MySQL status Warning in logfile $STAT_FILE "
fi
exit 0
fi
fi
sleep $CNT
CNT=`expr $CNT + 2`
if [ $CNT -gt 5 ]; then
MYSQLSTATUS=ERROR
log_failure_msg "MySQL running ($mysqld_pid),But no respond"
echo "ERROR: MySQL running ($mysqld_pid),But no respond" >> /var/log/messages
exit 1
fi
done
#--------------------------------------------------- /Modi-1
else
log_failure_msg "MySQL is not running, but PID file exists"
exit 1
fi
else
# Try to find appropriate mysqld process
mysqld_pid=`pidof $sbindir/mysqld`
if test -z $mysqld_pid ; then
if test "$use_mysqld_safe" = "0" ; then
lockfile=/var/lock/subsys/mysqlmanager
else
lockfile=/var/lock/subsys/mysql
fi
if test -f $lockfile ; then
log_failure_msg "MySQL is not running, but lock exists"
exit 2
fi
log_failure_msg "MySQL is not running"
exit 3
else
log_failure_msg "MySQL is running but PID file could not be found"
exit 4
fi
fi
;;
============================================================
以上的改動(dòng), 意思是運(yùn)行service msyql status 的時(shí)候,
如果主機(jī)HANG住了,MYSQL進(jìn)程還在,但MYSQL不能響應(yīng)查詢, 我們把狀態(tài)也置為FAILED.
(如果10秒鐘內(nèi)臨時(shí)文件mysql.`date +%Y%m%d%H%M%S`.$MYSQLPID 存在,并且里面的內(nèi)容必須為"aliyun.mysql",那么MYSQL是正常的。)
如果上面的條件成立, MYSQL處于無(wú)響應(yīng)狀態(tài), 程序還會(huì)寫信息到文件:/home/mysql/aliyun.mysql
HEARTBEAT 如果檢查到MYSQL失敗了.會(huì)Stop/Start mysql 資源N次(N是根據(jù)cib.xml的配置來(lái)定的),
在重啟過(guò)程中,我們讓stop/start狀態(tài)直接返回0。不去真正的關(guān)閉或啟動(dòng)mysql。
這樣做是為了讓下次MYSQL檢測(cè)狀態(tài)時(shí)直接返回錯(cuò)誤??梢钥焖偾袚Q。
所以在/etc/init.d/mysql中我們還需要改幾個(gè)地方:
0) 把原來(lái)mysql的參數(shù)start/stop 改成 startup/stopdown
'start') --> 'startup')
'stop') --> 'stopdown')
1)新加 start 段
===========================================
'start')
# Start daemon
log_success_msg "Mysql Start failed with /etc/init.d/mysql in HA Mode !"
exit 0
;;
===========================================
2) 新加 stop 段
===========================================
'stop')
# Stop daemon.
log_success_msg "Mysql Stop failed with /etc/init.d/mysql in HA Mode !"
exit 0
;;
===========================================
測(cè)試:
啟動(dòng)mysql: service mysql startup
關(guān)閉mysql: service mysql stopdown
狀態(tài)mysql: service mysql status
service mysql start/stop
這兩個(gè)語(yǔ)句則啥事都不干了,就發(fā)個(gè)信息給你!
小結(jié):
這樣做了以后,不管HEARTBEAT怎么重啟/關(guān)閉,只會(huì)對(duì)VIP有影響。不會(huì)對(duì)MYSQL來(lái)直接操作。
一方面,不會(huì)因?yàn)镠EARTBEAT工作不正常而影響MYSQL;
另一方面,可以讓HEARTBEAT切換更快(因?yàn)楣?jié)省啟動(dòng)和關(guān)閉MYSQL的時(shí)間)
但這樣做有一個(gè)小缺點(diǎn)就是:
在HEARTBEAT啟動(dòng)時(shí),不會(huì)自動(dòng)啟動(dòng)MYSQL。
HEARTBEAT在啟動(dòng)后會(huì)發(fā)現(xiàn)MYSQL是失效的。然后會(huì)發(fā)生切換。
所以你必須保證在HEARTBEAT啟動(dòng)前,至少有一個(gè)NODE的MYSQL STATUS是正常的!
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“如何更改/etc/init.d/mysql并讓HeartBeat只是監(jiān)控MYSQL的狀態(tài)”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!
分享題目:如何更改/etc/init.d/mysql并讓HeartBeat只是監(jiān)控MYSQL的狀態(tài)
標(biāo)題鏈接:http://jinyejixie.com/article2/ghhiic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、服務(wù)器托管、做網(wǎng)站、商城網(wǎng)站、移動(dòng)網(wǎng)站建設(shè)、域名注冊(cè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)