応答がないときに MySQL と MongoDB を自動的に再起動するにはどうすればよいですか?

応答がないときに MySQL と MongoDB を自動的に再起動するにはどうすればよいですか?

私はシンプルな開発サーバー (Ubuntu) を実行していますが、MySQL と MongoDB が時々クラッシュします。私は常に で再起動しますsudo service mysql restart

クラッシュの原因を調査する必要があることはわかっていますが (調査するつもりです)、現在はクラッシュ後に自動的に再起動する方法を探しています。応答しなくなった場合に ping を送信して再起動する何らかのデーモンが必要だと思いますが、その方法がわかりません。

私は次のようなツールについて読んだナギオス、しかしそれは私の状況にはちょっとやりすぎだと思います。

どうやって始めればいいか知っている人はいませんか?

答え1

私は次のようなツールについて読んだナギオス、しかしそれは私の状況にはちょっとやりすぎだと思います。

どうやって始めればいいか知っている人はいませんか?

簡単です。監視設定の設定方法を調べてください。モニタこれは軽量でセットアップが簡単なシステム監視ツールであり、まさにあなたが説明したシナリオでセットアップすると非常に便利です。サービスがダウンしたら、再起動して私に警告します。

私は主にApacheウェブサーバーに使用していますが、他のプログラムやソフトウェアで何ができるかの例がたくさんあるMySQLなど。

Monit の設定。

設定方法は次のとおりです。まず、Monit プログラム自体を次のようにインストールします。

sudo apt-get install monit

インストールしたら、ここで設定を編集します。私は以下のテキスト エディターを使用することを好みますnanoが、お好みのテキスト エディターを自由に使用してください。

sudo nano /etc/monit/monitrc

デフォルトのデーモン値を調整して、開始遅延を 120 に設定し、60 秒ごとにサービスをチェックします。

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 監視ルールセットを設定します。

さて、前述したように、私は主に Apache の監視に Monit を使用しているので、これは私が好んで使用するシンプルな構成ですが、基本的な概念は 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) とは一致していないことに注意してください。PID では動作しないようです。

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

関連情報