第二部分 自己编写脚本实现的高可用
一 监控实现原理
自己编写脚本,实现的功能和heartbeat差不多,都是监控,切换等。
对于监控,可以监控系统的状态如ping,也可以监控mysql服务状态(本文使用的方法)。
二 实现脚本
除了用此脚本替换heartbeat外,其它的实现和配置同上。
1 监控脚本 mysql_monitor.sh
#!/bin/bash
# author:wdlinux
# url:http://www.wdlinux.cn
# description:monitor shell of mysql
local_ip=192.168.1.92
rip=192.168.1.91
mysql_in=/usr/local/mysqlm
mysql_bin=${mysql_in}/bin/mysql
mysql_user=root
mysql_pass=12345
mysql_port=3306
st=0
while true;do
if (${mysql_bin} -h"${rip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "show master status" --connect_timeout=1 > /
dev/null 2>&1)
then
if (($st==0));then
/etc/rc.d/init.d/mysql_start1.sh stop
let st=$st+1
fi
else
for ((i=0;i<=3;i++));do
sleep 3
if (${mysql_bin} -h"${rip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "show master status" --conne
ct_timeout=1 > /dev/null 2>&1)
then
break
else
if (($i==3));then
echo "slave to master"
/etc/rc.d/init.d/mysql_start1.sh start
###modify dns prg
exit
fi
fi
done
fi
sleep 3
done
将local_ip,rip作相应的修改,local_ip代表本机IP,rip为另一台机的IP
# author:wdlinux
# url:http://www.wdlinux.cn
# description:monitor shell of mysql
local_ip=192.168.1.92
rip=192.168.1.91
mysql_in=/usr/local/mysqlm
mysql_bin=${mysql_in}/bin/mysql
mysql_user=root
mysql_pass=12345
mysql_port=3306
st=0
while true;do
if (${mysql_bin} -h"${rip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "show master status" --connect_timeout=1 > /
dev/null 2>&1)
then
if (($st==0));then
/etc/rc.d/init.d/mysql_start1.sh stop
let st=$st+1
fi
else
for ((i=0;i<=3;i++));do
sleep 3
if (${mysql_bin} -h"${rip}" -u"${mysql_user}" -p"${mysql_pass}" -P"${mysql_port}" -e "show master status" --conne
ct_timeout=1 > /dev/null 2>&1)
then
break
else
if (($i==3));then
echo "slave to master"
/etc/rc.d/init.d/mysql_start1.sh start
###modify dns prg
exit
fi
fi
done
fi
sleep 3
done
将local_ip,rip作相应的修改,local_ip代表本机IP,rip为另一台机的IP
2 将监控脚本加入自启动,随系统启动,如
Echo “/etc/rc.d/init.d/mysql_monitor.sh &” >> /etc/rc.d/rc.local
此方法也可以增加一个对外服务IP,如ha实现的一样,这样就省去了修改域名IP等问题。
但在脚本里,需要增加监控,添加,删除IP的实现和功能。