はじめに
本Webサイトのページビューがそこそこに増えてきているせいもあってか、MariaDBのdaemonがOOMKiller先生に狙われることが以前と比べると増えてきたように感じます。
なぜかOOMKiller先生は日本時間の未明の時間帯に狙ってくることが多いようですが、その時間帯は本Webサイトの管理人たるpandaは普通に寝ていますので、MariaDBの再起動は日本時間の朝になります。
一方で、以前構築したLet’s encryptの証明書の自動更新用シェルスクリプトは(まだ更新の時期にはなっていないものの、)1週間に1回起動してくれているようです。また、以前「panda大学習帳外伝」の更新情報のTwitterへの投稿用に作成したPython3のプログラムもいまいち出番が少ないので、もう少し出番を増やしたいところではあります。
そこで、上記2個のプログラム等をもとにして、MariaDBのプロセスが終了させられていないかどうか定期的に確認し、終了させられていたら再起動の上、その旨をTwitterに投稿する簡易システムの構築をしてみましたので、この記事ではその方法について書きます。
システム構成
システム構成は以下のような感じになります↓
cronでpsコマンドを起動してプロセスが生きているかどうかを確認し、psコマンドの出力結果に見当たらなければ、systemctlコマンドを使用してMariaDBのプロセスを再起動し、その旨をPython3のプログラムを起動してTwitterに投稿するという超簡単なシステムです。😎
プログラム等
システム全体のコントロール及びプロセス監視部
システム全体のコントロール及びプロセス監視部をつかさどるシェルスクリプトは以下のような感じになります。
Twitterへの投稿部はsystemctlコマンドが正常終了した場合に限り起動させる設計とし、無駄な投稿が行われるのを防いでいます。
Twitterへの投稿部
Twitterへの投稿部は、以下のコードをちょいと改造して使います。この記事に掲載したコードの再掲です。
具体的なコードまたはコード例については公開できませんが、以下の変更を加えています。
- consumer_key_file及びcredentialsのファイルパスの変更。フルパスで設定します。
- Twitterに投稿するメッセージの変更。
cronの設定
cronへの設定は以下のように行います。この記事を最初に書いた時点(2019年3月)では毎日22時32分から翌日7時32分までの1時間おきにシェルスクリプトを起動する設定としています。
# $Id: sqlcheck.cron 665 2019-03-15 16:18:29Z panda $
#
32 0-7,22,23 * * * root /var/adm/bin/sqlcheck.sh 2>&1 1>/dev/null
簡易試運転
上記のファイルを本Webサイトが稼働しているサーバの/var/admの下にインストールして、Google Analyticsのリアルタイムレポートを横目で見ながら、シェルスクリプトからsystemctl及びPython3のスクリプトが確実に起動することを確認することを目的として、以下の手順で試運転をしてみました。
- 試運転時にはpsコマンドの実行結果としてMariaDBが稼働していないことを確認したという想定になるように上記シェルスクリプトを書き換える。
- root権限で以下のコマンドを実行してみます。
# /var/adm/bin/sqlcheck.sh
- 10秒程度(※当Webサイト比)経過すると音もなく実行が終了しますので、(root権限でなくてもよいですが、)MariaDBが再起動できているかどうか確認します。出力結果のうち、9番目のフィールド(起動時刻)の表示が直近の時刻になっていれば再起動できています。
# ps aux | grep mysql
mysql 17178 6.5 37.1 1125328 182600 ? Ssl 12:52 0:00 /usr/libexec/mysqld –basedir=/usr
root 17262 0.0 0.1 215736 880 pts/0 S+ 12:52 0:00 grep –color=auto mysql - Twitterのタイムラインに、以下のような訓練用のツイートが流れていることを確認します。
- シェルスクリプトの変数の設定を本番用のものに書き換える。
- Twitterのツイートを本番用のものに書き換える。
スポンサーリンク
ここまでの手順で、簡易試運転は完了です。
後はMariaDBがOOMKiller先生に狙われるのを待つだけとなりました。(`・ω・´)
まとめ
サービスという観点から考えると、本Webサイトが日本時間の夜中に多少停止していたところでページビューにはそれほど影響は出ない…
そんなふうに考えていた時期が私にもありました。🤔
実はこのせいかどうかわかりませんが、直近でMariaDBがお亡くなりになった際にその日のページビューが日々想定される変動幅を超えて落ち込んだ(※個人の感想です。)ことと、サーバのリソースの増強は一応予定はしていますが、そのタイミングは「今じゃないでしょう。」という判断の下、「監視&再起動」という方法で当面運用することとした次第です。
ということで、後は本番用のメッセージがTwitterに流れるのを待つのみとなりましたので、じっと待つことにしたいと思います。
この記事は以上です。