99热99这里只有精品6国产,亚洲中文字幕在线天天更新,在线观看亚洲精品国产福利片 ,久久久久综合网

歡迎加入QQ討論群258996829
麥子學院 頭像
蘋果6袋
6
麥子學院

Mysql學習之keepalived高可用監(jiān)控腳本詳解

發(fā)布時間:2016-12-28 13:16  回復:0  查看:2017   最后回復:2016-12-28 13:16  
開發(fā)腳本需求 :我們知道,keepalive是基于虛擬ip的存活來判斷是否搶占master的機制的,但是如果我們做了MySQL數(shù)據(jù)庫的keepalived的高可用的時候,就要考慮一種情況的發(fā)生,那就是如果機器網(wǎng)卡并沒有斷,二是由于MySQL服務(wù)的不穩(wěn)定,或者人為的誤操作,導致的服務(wù)關(guān)閉,會引起的結(jié)果就是,keepalive并不會切換,因為并不是主master的虛擬ip不存在,而是服務(wù)已經(jīng)停止了,這種情況如果不及時切換到backup會導致的問題,大家可想而知,所以在此和大家分享一個監(jiān)控keepalive主master服務(wù)的腳本。
  實現(xiàn)的功能 :當主master機器(vip所在的機器)服務(wù)down了 會關(guān)閉自身的keepalive服務(wù),讓vip切換到備機,這樣服務(wù)才能保持可用。大家可以看到,不管用keepalive做什么服務(wù)的高可用,只要你把監(jiān)聽的端口號作為監(jiān)控判斷的對象,其實這是一個適用范圍特別廣泛的腳本,希望大家能盡量寫出通用腳本,這樣可以提升思維的能力!如果寫的有不好的地方請多指正。
  1 #!/bin/sh
  2 #author feifei
  3 #date 20161212
  4 #email  eeeee@qq.com
  5 #version 1.0
  6 #function guard mysql service
  7 . /etc/init.d/functions
  8 #define var
  9 #usage(使用方法)
  10 if [ $# -ne 1 ];then
  11 echo "usage:sh $0 {tcp_port}"
  12 exit 1
  13 fi
  14 #define var(用netstat是我們進行判斷服務(wù)是否存活的重要依據(jù),可以基于服務(wù)名,或者端口號,建議最好是端口號,因為端口號有唯一性)
  15 check=`netstat -lnutp|grep $1|wc -l`
  16
  17 #check if there is already have a same monitoring exit(守護進程的腳本,必須要判斷是否已經(jīng)存在一個相同的監(jiān)控,不然導致資源浪費)
  18 count=`ps -ef|grep "$0 $1"|grep -v "grep"|wc -l`
  19
  20 if [ $count -gt 2 ];then
  21 echo -e "\nERROR:There is already have a same monitoring!"
  22 exit 1
  23 fi
  24
  25 function dmail(){
  26 echo "$1-$(hostname):down" >/var/log/$1.log
  27 mail -s "$1-$(hostname):down"  00000000@qq.com
  28 }
  29
  30 function umail(){
  31 echo "$1-switch-success" >/var/log/$1.log
  32 mail -s "$1-switch-success"  00000000@qq.com
  33 }
  34
  35 #check=`namp 192.168.1.21 $1|grep open|wc -l`(也可以用nmap命令監(jiān)控一個主機某個端口號是否開啟,功能類似nestat和ss)
  36 if [ $check -eq 0 ];then
  37 echo "$1 is not listening!pls input again!"
  38 exit 1
  39 else
  40 while true
  41 do
  42 if [ `netstat -lnutp|grep $1|wc -l` -eq 0 ];then
  43 echo 0
  44 dmail $1
  45 /etc/init.d/keepalived stop
  46 sleep 5
  47 ping -c 2 -W 2 192.168.1.22 &>/dev/null
  48 if [ $? -eq 0 ];then
  49 echo 1
  50 umail $1
  51 break
  52 else
  53 echo "$1-swith-failed" >/var/log/$1.log
  54 mail -s "$1-switch-failed"  00000000@qq.com
  55 break
  56 fi
  57 fi
  58 done
  59 fi
  腳本簡單說明 :
  1.運行的條件:當前監(jiān)控的端口號必須是監(jiān)聽狀態(tài),如果沒啟用會提示先啟動服務(wù)
  2.實現(xiàn)原理:實現(xiàn)監(jiān)控的原理是用while循環(huán)+if判斷
  3.失敗的處理機制:如果有心思的同學可以嘗試,在服務(wù)down了之后,加上一些處理措施,比如說,讓服務(wù)嘗試重啟,如果重啟成功繼續(xù)監(jiān)控,不成功則關(guān)閉keepalive
  4.事件的記錄:每一個過程的成功與否,都要記錄到相應的文件,如果有必要,進行郵件通知(一個好的運維,要懂得進行必須的故障記錄,方便日后總結(jié))
ps.不是特別難的腳本,重在梳理過程,如果有不妥的地方希望大家指正。

來源:博客園
您還未登錄,請先登錄

熱門帖子

最新帖子

?