如何在MySQL和MongoDB無回應時自動重新啟動?

如何在MySQL和MongoDB無回應時自動重新啟動?

我正在運行一個簡單的開發伺服器(Ubuntu),MySQL 和 MongoDB 有時會崩潰。我總是用 重新啟動它們sudo service mysql restart

儘管我知道我需要調查它們崩潰的原因(我會的),但我目前正在尋找一種在它們崩潰後自動重新啟動它們的方法。我想我需要某種守護程序來對它們執行 ping 操作,並在它們不再響應時重新啟動它們,但我不確定如何執行此操作。

我讀了類似的工具納吉奧斯,但我想這對我的情況來說有點過分了。

有人知道我該如何開始嗎?

答案1

我讀了類似的工具納吉奧斯,但我想這對我的情況來說有點過分了。

有人知道我該如何開始嗎?

簡單的。考慮設定監控配置莫尼特。它是一個輕量級且易於設定的系統監控工具,在您描述的場景中設定非常有用;服務故障,重新啟動並提醒我。

我主要將它用於 Apache Web 伺服器,但也有許多可以為其他程式/軟體做什麼的範例例如MySQL之類的。

設定監視器。

我設定的方式就是這樣。首先,像這樣安裝 Monit 程式本身:

sudo apt-get install monit

安裝後,然後在此處編輯配置;我更喜歡使用,nano但請隨意使用您喜歡的任何文字編輯器:

sudo nano /etc/monit/monitrc

調整預設守護程序值以每 60 秒檢查一次服務,啟動延遲為 120:

set daemon 60
with start delay 60

然後找到mailserver的面積monitrc並添加以下行。 Postfix 或 SMTP 需要處於活動狀態才能運作。我通常在我的伺服器上安裝 Postfix,因此我使用以下設定:

set mailserver localhost

然後我確保 Monit 配置目錄的設定如下:

sudo mkdir -p /etc/monit/conf.d

設定 Monit Apache2 監控規則集。

現在,就像我說的,我主要使用 Monit 進行 Apache 監控,所以這是我喜歡使用的簡單配置,但基本概念與 MySQL、MongoDB 或其他東西類似。我會將其保存在這個文件中:

sudo nano /etc/monit/conf.d/apache2.conf

這將是該文件的內容:

check process apache with pidfile /var/run/apache2.pid
  start "/usr/sbin/service apache2 start"
  stop  "/usr/sbin/service apache2 stop"
  if failed host 127.0.0.1 port 80
    with timeout 15 seconds
  then restart
  alert [email protected] only on { timeout, nonexist }

文法是相當不言自明的,但基本上是:

  • 該過程取決於apache2.pid;請務必更改它以符合您的實際位置apache2.pidhttpd.pid您的環境中的實際位置。
  • start然後有連接到和進程的命令stop
  • 並且具有監視( )連接埠80上的 Web 伺服器的邏輯localhost127.0.0.1
  • 且只有伺服器的行為在15秒內不可達。
  • 如果必須採取行動,它會嘗試重新啟動。
  • 然後將有關伺服器逾時或不存在的事件的警報發送到指定的電子郵件地址。

設定 Monit MySQL 監控規則集。

基於我上面連結的例子,我假設這樣的設定適用於 MySQL。首先,建立一個像這樣的檔案:

sudo nano /etc/monit/conf.d/mysql.conf

我已經調整了該範例,因此我認為它的行為與我為 Apache 設定的類似:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
  start program = "/usr/sbin/service mysql start"
  stop program = "/usr/sbin/service mysql stop"
  if failed host 127.0.0.1 port 3306 protocol mysql
    with timeout 15 seconds
  then restart
  alert [email protected] only on { timeout, nonexist }

當然,應該進行調整以匹配您的實際工作環境,例如調整 的位置mysqld.pid、電子郵件地址等,但除此之外,它在想法/實現方面相當通用。

設定完成後,重新啟動monit,一切都應該很好:

sudo service monit restart

設定 Monit MongoDB 監控規則集。

若要建立 MongoDB 監控規則集,請建立下列檔案:

sudo nano /etc/monit/conf.d/mongod.conf

這裡是MongoDB監控規則;請注意,這與活動的 MongoDB 守護程序匹配,而不是 PID(又名mongod.lock:),因為它似乎不適用於:

check process mongod matching "/usr/bin/mongod"
  start program = "/usr/sbin/service mongod start"
  stop program = "/usr/sbin/service mongod stop"
  if failed host 127.0.0.1 port 27017 protocol http
    with timeout 15 seconds
  then restart
  alert [email protected] only on { timeout, nonexist }

當然,應該進行調整以匹配您的實際工作環境,例如調整二/usr/bin/mongod進位檔案的實際路徑、電子郵件地址等,但除此之外,它在想法/實現方面相當通用。

設定完成後,重新啟動monit,一切都應該很好:

sudo service monit restart

監控Monit。

您可以按照 Monit 日誌查看其運行情況:

sudo tail -f -n 200 /var/log/monit.log

作為測試,您可以簡單地停止 MySQL 或 MongoDB 伺服器,然後查看該日誌中顯示的內容。如果一切順利,您應該會看到整個監控過程並重新啟動,包括一封電子郵件發送到您在配置中設定的地址。

答案2

一個簡單的 bash 腳本(或您熟悉的任何其他腳本語言)即可完成這項工作(使用 sudo 運行):

while true
do
    # Ping the MySQL server (or run a real SELECT command using mysql client)
    mysqladmin ping
    # Check the return code: should be 0 if server is alive
    if [[ $? != 0 ]]
    then
        service mysql restart
    fi
    # Wait until next check
    sleep 60
done

相關內容