超簡単なMySQL死活監視

マスター・スレーブ間でMySQLのレプリケーションを取っている場合のとても簡単な死活監視。
keepalivedなどを使えない(VIPによる自動フェイルオーバーが使えない)環境のため、負荷分散および接続不可時の接続IP切り替えはアプリ側で制御した。(LBかまそうにも、LB自体が前述の理由で冗長化できないので。)
なので、以下はマスター・スレーブをお互いに監視して、落ちたときにアラート通知をするだけ。

以下、基本はマスター・スレーブ共通

シェル設置用のディレクトリ作成
# mkdir /root/bin
# cd /root/bin

監視用シェル作成(マスター側)
# vi mysql_alive_chk.sh

—————————————————————-
#!/bin/sh

##################################
# /root/bin/mysql_alive_chk.sh
##################################

#監視先
MYSQL_NAME=”mysql2.hoge.jp”
MYSQL_IP=”192.168.100.102″
MYSQL_USER=”user”
MYSQL_PASS=”pass”

ALERT_FLG=”/root/bin/${MYSQL_NAME}.alert”

RES_STRING=mysqladmin ping -h $MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASS
ALIVE_STRING=”mysqld is alive”
echo $RES_STRING

if [ “$RES_STRING” != “$ALIVE_STRING” ] ; then
if [ ! -e “$ALERT_FLG” ] ; then
touch $ALERT_FLG
echo “MySQL on $MYSQL_NAME might be down!! Please check and restore.” | mail -s “System Alert” alert@hoge.jp, alert@hoge.com
exit
fi
else
if [ -e “$ALERT_FLG” ] ; then
rm -f $ALERT_FLG
fi
fi

exit
—————————————————————-

監視用シェル作成(スレーブ側)
# vi mysql_alive_chk.sh

—————————————————————-
#!/bin/sh

##################################
# /root/bin/mysql_alive_chk.sh
##################################

#監視先
MYSQL_NAME=”mysql.hoge.jp”
MYSQL_IP=”192.168.100.101″
MYSQL_USER=”user”
MYSQL_PASS=”pass”

ALERT_FLG=”/root/bin/${MYSQL_NAME}.alert”

RES_STRING=mysqladmin ping -h $MYSQL_IP -u$MYSQL_USER -p$MYSQL_PASS
ALIVE_STRING=”mysqld is alive”
echo $RES_STRING

if [ “$RES_STRING” != “$ALIVE_STRING” ] ; then
if [ ! -e “$ALERT_FLG” ] ; then
touch $ALERT_FLG
echo “MySQL on $MYSQL_NAME might be down!! Please check and restore.” | mail -s “System Alert” alert@hoge.jp, alert@hoge.com
exit
fi
else
if [ -e “$ALERT_FLG” ] ; then
rm -f $ALERT_FLG
fi
fi

exit
—————————————————————-

実行権限付与
# chmod 755 mysql_alive_chk.sh

アラートメール配信のためにMTAを起動しておく
# service postfix start

自動起動ON
# chkconfig postfix on

今回はCRONに登録
# vi /etc/crontab
—————-
# 動作が確認できればメールがうっとうしいので止める
MAILTO=root
 ↓
MAILTO=””
 :
# monitering slave’s(master’s) mysql
*/5 * * * * root /root/bin/mysql_alive_chk.sh; >/dev/null 2>&1
—————-

以上。

試しにどちらかのmysqldを止めたりしてみて、ちゃんとアラートメールが来ればOK。

参考サイト)
http://d.hatena.ne.jp/bose999/20100925/1285408588
http://d.hatena.ne.jp/bose999/20100926/1285440284

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*