歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> keepalive的不足,如何處理,keepalive不足處理

keepalive的不足,如何處理,keepalive不足處理

日期:2017/3/3 17:59:15   编辑:學習Linux

keepalive的不足,如何處理,keepalive不足處理

keepalive的不足,如何處理,keepalive不足處理


MySQL(或者其它服務)的keepalived高可用監控腳本

開發腳本需求:我們知道,keepalive是基於虛擬ip的存活來判斷是否搶占master的機制的,但是如果我們做了MySQL的keepalived的高可用的時候,就要考慮一種情況的發生,那就是如果機器網卡並沒有斷,二十由於MySQL服務的不穩定,或者人為的誤操作,導致的服務關閉,會引起的結果就是,keepalive並不會切換,因為並不是主master的虛擬ip不存在,而是服務已經停止了,這種情況如果不及時切換到backup會導致的問題,大家可想而知,所以在此和大家分享一個監控keepalive主master服務的腳本

實現的功能:當主master機器(vip所在的機器)服務down了 會關閉自身的keepalive服務,讓vip切換到備機,這樣服務才能保持可用。大家可以看到,不管用keepalive做什麼服務的高可用,只要你把監聽的端口號作為監控判斷的對象,其實這是一個適用范圍特別廣泛的腳本,希望大家能盡量寫出通用腳本,這樣可以提升思維的能力!如果寫的有不好的地方請多指正。

 1 #!/bin/sh
 2 #author feifei
 3 #date 20161212
 4 #email [email protected]
 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" [email protected] </var/log/$1.log
28 }
29 
30 function umail(){
31  echo "$1-switch-success" >/var/log/$1.log
32  mail -s "$1-switch-success" [email protected] </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" [email protected] </var/log/$1.log
55          break
56      fi
57  fi
58 done
59 fi

腳本簡單說明:

1.運行的條件:當前監控的端口號必須是監聽狀態,如果沒啟用會提示先啟動服務

2.實現原理:實現監控的原理是用while循環+if判斷

3.失敗的處理機制:如果有心思的同學可以嘗試,在服務down了之後,加上一些處理措施,比如說,讓服務嘗試重啟,如果重啟成功繼續監控,不成功則關閉keepalive

4.事件的記錄:每一個過程的成功與否,都要記錄到相應的文件,如果有必要,進行郵件通知(一個好的運維,要懂得進行必須的故障記錄,方便日後總結)

ps.不是特別難的腳本,重在梳理過程,如果有不妥的地方希望大家指正。

http://xxxxxx/Linuxjc/1182535.html TechArticle

Copyright © Linux教程網 All Rights Reserved