在上一篇文章-Mysql检查脚本控制keepalived 中,笔者改进了脚本,判断命令执行成功与否和完善了日志功能。如下:
#!/bin/bash
mysql -uphpmyadmin -proot -e "select version();" >/dev/null 2>&1
#mysql -uphpmyadmin -proot -e "show status;"#
if [ $? -ne 0 ] ;then
#echo $(date)". mysql error!" >>/etc/keepalived/action.log
sudo service keepalived stop
if [ $? -ne 0 ] ;then
echo $(date +'%Y-%m-%d %H:%M:%S')". mysql error.but ACTION keepalived-stop failed." >>/etc/keepalived/action.log
else
echo $(date +'%Y-%m-%d %H:%M:%S')". mysql error.ACTION keepalived-stop success." >>/etc/keepalived/action.log
fi
else
keepalivedcheck=`ps -C keepalived --no-header | wc -l`
if [ $keepalivedcheck -eq 0 ] ;then
sudo service keepalived start
if [ $? -ne 0 ] ;then
echo $(date +'%Y-%m-%d %H:%M:%S')". mysql normal,keepalived already stopped.but ACTION keepalived-start failed" >>/etc/keepalived/action.log
else
echo $(date +'%Y-%m-%d %H:%M:%S')". mysql normal,keepalived already stopped.ACTION keepalived-start success" >>/etc/keepalived/action.log
fi
###test code
#else
#echo $(date)". keepalived is running!" >>/etc/keepalived/action.log
##test code
fi
#echo $(date)". mysql running!" >>/etc/keepalived/action.log
fi
这个脚本checkmysql.sh可以单独执行,在上一篇文章中一是提出使用循环(循环时间可控)包装这个脚本,并做成服务放置于启动文件中。而是置于crontab定时任务中,每个一秒检查一下,间隔时间固定为1秒。
这次笔记通过查看keepalived的配置说明,可以将脚本放置于配置文件keepalived.conf中,让keepalived来判断执行。修改后的配置文件如下,和上一篇文章主要的区别就是vrrp_script 、 track_script。
vrrp_script check_mysql_76 {
script "/etc/keepalived/checkmysql.sh" #脚本位置
interval 10 #脚本执行间隔10秒
}

可以通过tail -f /var/log/messages来查看keepalived日志,上篇文章已经阐述过。但是笔者发现在mysql数据库故障时,keepalived.conf的脚本可以正常执行并停止keepalived服务,vip也正常切换;当mysql数据库正常时,此时keepalived服务已经停止了,keepalived中的脚本就无法执行了,即mysql数据库恢复时需要手动拉起keepalived程序!
在生产中,数据库故障是需要DBA来处理的,只有在处理完毕恢复正常时keepalived才可用,也合情合理。还有一个问题,keepalived中的检查脚本执行时,action.log中居然没有记录到日志,但是单独拉起脚本时日志正常,脚本路径、日志路径都是写的全路径,权限777,毫无头绪,不知道什么原因!
网友评论