MySQL(或者其它服務)的keepalived高可用監控腳本
開發腳本需求 :咱們知道,keepalive是基於虛擬ip的存活來判斷是否搶佔master的機制的,可是若是咱們作了MySQL的keepalived的高可用的時候,就要考慮一種狀況的發生,那就是若是機器網卡並無斷,二十因爲MySQL服務的不穩定,或者人爲的誤操做,致使的服務關閉,會引發的結果就是,keepalive並不會切換,由於並非主master的虛擬ip不存在,而是服務已經中止了,這種狀況若是不及時切換到backup會致使的問題,你們可想而知,因此在此和你們分享一個監控keepalive主master服務的腳本mysql
實現的功能 :當主master機器(vip所在的機器)服務down了 會關閉自身的keepalive服務,讓vip切換到備機,這樣服務才能保持可用。你們能夠看到,無論用keepalive作什麼服務的高可用,只要你把監聽的端口號做爲監控判斷的對象,其實這是一個適用範圍特別普遍的腳本,但願你們能儘可能寫出通用腳本,這樣能夠提高思惟的能力!若是寫的有很差的地方請多指正。sql
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是咱們進行判斷服務是否存活的重要依據,能夠基於服務名,或者端口號,建議最好是端口號,由於端口號有惟一性)
15 check=`netstat -lnutp|grep $1|wc -l`
16
17 #check if there is already have a same monitoring exit(守護進程的腳本,必需要判斷是否已經存在一個相同的監控,否則致使資源浪費)
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 </var/log/$1.log
28 }
29
30 function umail(){
31 echo "$1-switch-success" >/var/log/$1.log
32 mail -s "$1-switch-success" 00000000@qq.com </var/log/$1.log
33 }
34
35 #check=`namp 192.168.1.21 $1|grep open|wc -l`(也能夠用nmap命令監控一個主機某個端口號是否開啓,功能相似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 </var/log/$1.log
55 break
56 fi
57 fi
58 done
59 fi
腳本簡單說明 :bash
1.運行的條件:當前監控的端口號必須是監聽狀態,若是沒啓用會提示先啓動服務app
2.實現原理:實現監控的原理是用while循環+if判斷運維
3.失敗的處理機制:若是有心思的同窗能夠嘗試,在服務down了以後,加上一些處理措施,好比說,讓服務嘗試重啓,若是重啓成功繼續監控,不成功則關閉keepalivetcp
4.事件的記錄:每個過程的成功與否,都要記錄到相應的文件,若是有必要,進行郵件通知(一個好的運維,要懂得進行必須的故障記錄,方便往後總結)post
ps.不是特別難的腳本,重在梳理過程,若是有不妥的地方但願你們指正。ui