91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何更改/etc/init.d/mysql并讓HeartBeat只是監控MYSQL的狀態

發布時間:2021-11-02 15:05:42 來源:億速云 閱讀:165 作者:小新 欄目:MySQL數據庫

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

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

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

我們知道,HA管理lsb類型的資源時,是調用/etc/init.d/或者./resource.d/ 目錄下的該資源相關命令加參數start/stop/status.
比如,有mysql資源,
啟動mysql: service mysql start
停止mysql: service mysql stop
狀態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不能響應查詢, 我們把狀態也置為FAILED.
(如果10秒鐘內臨時文件mysql.`date +%Y%m%d%H%M%S`.$MYSQLPID 存在,并且里面的內容必須為"aliyun.mysql",那么MYSQL是正常的。)
如果上面的條件成立, MYSQL處于無響應狀態, 程序還會寫信息到文件:/home/mysql/aliyun.mysql

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

所以在/etc/init.d/mysql中我們還需要改幾個地方:
0) 把原來mysql的參數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
關閉mysql: service mysql stopdown
狀態mysql: service mysql status

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


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

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

感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何更改/etc/init.d/mysql并讓HeartBeat只是監控MYSQL的狀態”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

民丰县| 赤城县| 凤翔县| 汨罗市| 邵阳县| 新巴尔虎右旗| 惠州市| 万州区| 常宁市| 上虞市| 宜章县| 石林| 邹城市| 江门市| 大余县| 黄骅市| 蓝田县| 福安市| 墨竹工卡县| 南木林县| 安图县| 贞丰县| 木兰县| 嵩明县| 长岭县| 炉霍县| 南木林县| 临猗县| 东平县| 十堰市| 潼南县| 廉江市| 兖州市| 云和县| 肇源县| 星座| 兴仁县| 湖北省| 嘉义县| 水富县| 政和县|