久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

如何更改/etc/init.d/mysql并讓HeartBeat只是監(jiān)控MYSQL的狀態(tài)

162次閱讀
沒有評論

共計 4300 個字符,預(yù)計需要花費 11 分鐘才能閱讀完成。

這篇文章主要介紹了如何更改 /etc/init.d/mysql 并讓 HeartBeat 只是監(jiān)控 MYSQL 的狀態(tài),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。

基于 HA 在發(fā)生切換時,都會做 STOP 本機資源,然后再 START 對方的資源。
我們的實際環(huán)境中有兩個資源:
一個是 IPaddr, 用來管理 VIP;
一個是 mysql, 用來管理 MYSQL 資源;
在實際的應(yīng)用過程中,我們發(fā)現(xiàn) MYSQL 一下子關(guān)不掉(flush dirty pages), 或啟動需要很長時間(recovery). 這樣也就大大延長了 HA 切換的時間。

所以我們在想,是不是可以讓 HA 只管理 MYSQL 的狀態(tài),而不管理 MYSQL 的啟動與 STOP 呢?

我們知道,HA 管理 lsb 類型的資源時,是調(diào)用 /etc/init.d/ 或者./resource.d/ 目錄下的該資源相關(guān)命令加參數(shù) start/stop/status.
比如,有 mysql 資源,
啟動 mysql: service mysql start
停止 mysql: service mysql stop
狀態(tài) mysql: service mysql status

為了達到目的,我們可以修改 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
;;
============================================================
以上的改動, 意思是運行 service msyql status 的時候,
如果主機 HANG 住了,MYSQL 進程還在, 但 MYSQL 不能響應(yīng)查詢, 我們把狀態(tài)也置為 FAILED.
(如果 10 秒鐘內(nèi)臨時文件 mysql.`date +%Y%m%d%H%M%S`.$MYSQLPID 存在,并且里面的內(nèi)容必須為 aliyun.mysql , 那么 MYSQL 是正常的。)
如果上面的條件成立, MYSQL 處于無響應(yīng)狀態(tài), 程序還會寫信息到文件:/home/mysql/aliyun.mysql

HEARTBEAT 如果檢查到 MYSQL 失敗了. 會 Stop/Start mysql 資源 N 次(N 是根據(jù) cib.xml 的配置來定的),
在重啟過程中, 我們讓 stop/start 狀態(tài)直接返回 0。不去真正的關(guān)閉或啟動 mysql。
這樣做是為了讓下次 MYSQL 檢測狀態(tài)時直接返回錯誤。可以快速切換。

所以在 /etc/init.d/mysql 中我們還需要改幾個地方:
0) 把原來 mysql 的參數(shù) start/stop 改成 startup/stopdown
start ) — gt startup )
stop ) — gt 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
;;
===========================================

測試:
啟動 mysql: service mysql startup
關(guān)閉 mysql: service mysql stopdown
狀態(tài) mysql: service mysql status

service mysql start/stop
這兩個語句則啥事都不干了,就發(fā)個信息給你!

小結(jié):
這樣做了以后,不管 HEARTBEAT 怎么重啟 / 關(guān)閉,只會對 VIP 有影響。不會對 MYSQL 來直接操作。
一方面,不會因為 HEARTBEAT 工作不正常而影響 MYSQL;
另一方面,可以讓 HEARTBEAT 切換更快(因為節(jié)省啟動和關(guān)閉 MYSQL 的時間)

但這樣做有一個小缺點就是:
在 HEARTBEAT 啟動時,不會自動啟動 MYSQL。
HEARTBEAT 在啟動后會發(fā)現(xiàn) MYSQL 是失效的。然后會發(fā)生切換。
所以你必須保證在 HEARTBEAT 啟動前,至少有一個 NODE 的 MYSQL STATUS 是正常的!

感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“如何更改 /etc/init.d/mysql 并讓 HeartBeat 只是監(jiān)控 MYSQL 的狀態(tài)”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關(guān)注丸趣 TV 行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-27發(fā)表,共計4300字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 万荣县| 仁布县| 福清市| 翁牛特旗| 秦皇岛市| 荥经县| 阜康市| 金华市| 崇明县| 神农架林区| 玉树县| 大同县| 青龙| 师宗县| 克拉玛依市| 巴中市| 镇赉县| 久治县| 南安市| 龙陵县| 开原市| 丰都县| 松江区| 洪湖市| 林周县| 宁安市| 内乡县| 洱源县| 措勤县| 米泉市| 叶城县| 吕梁市| 饶河县| 上饶县| 海丰县| 胶南市| 太仆寺旗| 昌图县| 时尚| 巴南区| 舞钢市|