マスター・スレーブ間で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