keepalive的不足,如何處理

来源:http://www.cnblogs.com/dragonflyer/archive/2016/12/25/6219201.html
-Advertisement-
Play Games

MySQL(或者其它服務)的keepalived高可用監控腳本 開發腳本需求:我們知道,keepalive是基於虛擬ip的存活來判斷是否搶占master的機制的,但是如果我們做了MySQL的keepalived的高可用的時候,就要考慮一種情況的發生,那就是如果機器網卡並沒有斷,二十由於MySQL服務 ...


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" 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和ss36 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

腳本簡單說明

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

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

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

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

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 遠程管理控制方式: RDP(remote desktop protocol)協議; telnet; SSH(Secure Shell); RFB(Remote FrameBuffer)協議(圖形化遠程管理協議) VNC伺服器:Linux下實現RFB協議的遠程管理軟體。 安裝:yum install ... ...
  • nonblock函數的原型如下: nonblock函數主要完成以下工作: a.從標準輸入獲取狀態,存放在ttystate中 b.關閉the canonical mode,通過置0的方式實現。 c.通過ttystate設置標準輸入的狀態。 kbhit函數的原型如下: 該函數主要通過timeval和se ...
  • 第四節:Linux命令基礎 標簽(空格分隔):Linux實戰教學筆記 第1章 認識操作環境 ![QQ20161225 [email protected] 38.5kB][1] root:當前登陸的用戶名 @分隔符 chensiqi:主機名 ~:當前路徑位置 用戶的提示符 1.1 Linux系統命令操作語法的 ...
  • 首先要有一個樹莓派3B , 在某寶買就行, 這東西基本上找到假貨都難,另外國產和英國也沒什麼差別,差不多哪個便宜買哪個就行。 不要買店家的套餐,一個是配的東西有些不需要,有的質量也不好。 提示:除了GPIO以外都不要熱插拔,所有東西都在安裝好後最後啟動電源。 1.下載系統 截止目前 最新的是2016 ...
  • 今天突然練習linux命令行的時候,想在window中聯繫linux命令行。經過一番dudu找到了一個不錯的的工具(SecureCRT--意思安全)就是用SSH鏈接linux主機。推薦大家使用。畢竟window下放個小曲,下點小電影同時練習linux命令行哈!~感謝強大的VMware11 找了不少博 ...
  • Linux硬體IO的優化簡介 首先簡單介紹下有哪些硬體設備如下(由於硬體種類廠家等各種因素我就不在此多做介紹有興趣的可以自行學習): 1.CPU:中央處理器,是電腦運算控制的核心部件之一,相當於人的大腦。如下圖 2.RAM:記憶體條與CPU溝通的橋梁,很多數據和運算在記憶體中做臨時處理,相當於你在做快 ...
  • 分享一個MySQL分庫備份腳本(原) 開發思路: 1.路徑:規定備份到什麼位置,把路徑(先判斷是否存在,不存在創建一個目錄)先定義好,我的路徑:/mysql/backup,每個備份用壓縮提升效率,帶上時間方便整理 2.取資料庫:抓取資料庫名稱,我用的awk和grep配合取資料庫的名稱(如果想按照表備 ...
  • 自己簡單寫的一個php服務的啟動腳本和大家分享 思路(實現的原理): 1:function模塊+case語句多分支判斷 2:通過添加# chkconfig: 2345 43 89註釋實現開機自啟動(前提是把腳本放入/etc/init.d/目錄下 然後chmod給可執行許可權,然後chkconfig - ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...