heartbeat mysql_heartbeat实现基于mysql服务自动切换

由于heartbeat自身可以通过dopd来判断心跳线宕机后,能实现自动切换,但是当一些服务宕机了,就无法实现自动切换了,常见的场景有mysqld服务,有的时候会出现连接不上mysqld服务,比如超过最大连接数的时候,当然还有其他的场景,所以就写了一个脚本来实现自动监控mysqld服务状态来实现heartbeat服务状态进行切换,heartbeat+mysqld+共享存储见前面博文,猛戳《实战Heartbeat+mysql+共享存储实现高可用》。

接下来先看一下脚本是思路:

e50aa05b177ff84bcabbfa59053bbc61.png

脚本内容如下:#!/bin/bash

#:Title:monitor heartbeat's mysql resource.

#:Synopsis:

#:Data:2013-08-20 13:36:32

#:Version:1.1

####################################

# 2013.08 by LuoWei

# Copyright (C) 2005 by Baison

####################################

trap 'echo PROGRAM INTERRUPTED; exit 1' INT

#The user/password for connection mysql.

username=root

password=

n=0

mysqlmon_log=/var/log/mysqlmon.log

mysql_conmand="/usr/local/mysql/bin/mysql -u$username -e "

#mysql_conmand="/usr/local/mysql/bin/mysql -u$username -p$password -e "

echo >$mysqlmon_log

#mail list

function_add_maillist(){

cat >/tmp/userlist<

282127408@qq.com

luoweiro@126.com

EOF

}

[ -f /tmp/userlist ] && echo "The file has." || touch /tmp/userlist ;function_add_maillist

function_mail(){

IFS=$'\n'

for LINE in `cat /tmp/userlist`;do

echo "Heartbeat has changed,please see see." | mail -s "Heartbeat standby" $LINE

done

}

function_retry(){

echo `date +"%Y-%m-%d %H:%M:%S"` mysqld cannot be connected! >> $mysqlmon_log

n=$[n + 1]

service mysqld restart >/dev/null 2>&1

}

function_ha_standby(){

service heartbeat standby >/dev/null 2>&1

echo `date +"%Y-%m-%d %H:%M:%S"` mysqld switched to backup! >> $mysqlmon_log

service heartbeat start >/dev/null 2>&1

}

while true;

do

ifconfig | grep eth0:0 >/dev/null 2>&1

if [[ $? -eq 0 ]];then

if $mysql_conmand "use openshop;" >&/dev/null;then

n=0

else

function_retry

if [ $n -eq 3 ] ; then

function_ha_standby

function_mail

break

fi

fi

fi

sleep 10

done

由于我使用的heartbeat是两个节点,索引在两个节点上均执行该脚本即可。

接下来开始测试:

1、停掉HA主节点上的mysqld服务:

由于现在主节点在HA2上,如下图所示:

4b7cebc8e7fe69afd88602535bcf7f91.png

现在我模拟手动停掉mysqld服务:

e19404d07f9c74d3c2a9a50ed6b00125.png

然后查看脚本中日志记录:

d353769d4d6aab8ce226176c1ce87639.png

然后稍等片刻,我们查看HA2上资源状态:

d6e6853f764e3dd2f7f21330baf48de2.png

可以看出,mysqld服务自动启动起来了。

2、毁坏性的破坏mysqld服务:

由于集群启动会自动带起mysqld服务,我就让heartbeat启动找不到mysqld资源,所以,我把mysqld服务启动脚本重命名一下,然后看效果。

d9ecfd85b0e2f24087c99325034f1cab.png

然后看备用节点上的状况:

063691598aec22f4edb1a023e3463a19.png

资源已经切换到了HA1上了。

接下来查看集群切换日志:

a.首先查看脚本日志:

84813fa22cf9c0119877bdefc4aa29c8.png

b.然后查看HA2日志:

a06d56bbe7a55e9a82012f07faa2958c.png

c.查看HA1上的日志:

84d89f235119cde4bf40a2ba8b8c7542.png

好了,整个脚本测试完成,同时还有集群节点切换的时候还有邮件可以及时通知。

祝:玩的愉快!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值