-body=(body:报告内容)
该参数缺省为空,示例脚本为(MHA Manager package)/samples/send_report。
init_conf_load_script App/Global
若想在配置文件中使用纯文本(比如password和repl_password),可使用该参数,脚本返回“name=value”对,可以覆盖全局配置文件中的参数,比如:
#! /usr/bin/perl
Print "password=$ROOT_PASS\n";
Print "repl_password=$REPL_PASS\n"
该参数默认为空。
备注:
? Local Scope??作用于每个服务器本地,在应用配置文件(app1.conf)中的[server_xxx]下配置;
? App Scope??作用于每一套MySQL Replication,在应用配置文件(app1.conf)中的[server_default]下配置;
? Global Scope??全局配置参数,适用于用一个Manager节点管理多套MySQL Replication的情况,在全局配置文件中(masterha_default.cnf)配置。?
了解了原理,我们再来坐下以下实验,来真正试下MySQL高可用架构
二.MHA+Keepalived
在mastersql和backupsql中都安装keepalived软件(可参考http://blog.csdn.net/dbaxiaosa/article/details/22940483)
(1)安装依赖包
(2)编译安装
# tar zxvf keepalived-1.1.19.tar.gz
# cd keepalived-1.1.19
# ./configure --sysconf=/etc/ --with-kernel-dir=/usr/src/kernels/2.6.18-308.el5-x86_64/
(3)配置mastermysql上的keepalived
[root@node1 ~]# more /etc/keepalived/keepalived.conf
#writed by test 20140722
#global define
global_defs {
router_id mysqlmha
}
vrrp_script check_run {
script "/etc/keepalived/check_mysql.sh"
interval 1
}
############################################################
# internet
############################################################
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100 #master>slave slave90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
192.168.3.33
}
}
(4)配置backupmysql上的keepalived
[root@node2 keepalived]# more /etc/keepalived/keepalived.conf
#writed by test 20140722
#global define
global_defs {
router_id mysqlmha
}
vrrp_script check_run {
script "/etc/keepalived/check_mysql.sh"
interval 1
}
############################################################
#
############################################################
vrrp_instance VI_1 {
state BACKUP
interface eth0
virtual_router_id 51
priority 90 #master>slave slave90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
check_run
}
virtual_ipaddress {
192.168.3.33
}
}
(5)编辑脚本文件
大体意思是只要检测到mysql服务停止keepalived服务也停止 ,因为keepalived是通过组播方式告诉本网段自己还活着 当mysql服务停止后keepalived还依然运行 这时就需要停止keepalived让另一个主机获得虚拟IP,可以在后台运行这个脚本 也可以在keepalived配置文件加入这个脚本。
mastermysql上
[root@node1 ~]# more /etc/keepalived/check_mysql.sh
#20140722
#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=192.168.3.27
MYSQL_USER=root
MYSQL_PASSWORD=mysql
CHECK_TIME=3
#mysql is working MYSQL_OK is 1 , mysql down MYSQL_OK is 0
MYSQL_OK=1
function check_mysql_helth (){
$MYSQL -h $MYSQL_HOST -u $MYSQL_USER -p$MYSQL_PASSWORD -e "show status;" >/dev/null 2>&1
if [ $? = 0 ] ;then
MYSQL_OK=1
else
MYSQL_OK=0
fi
return $MYSQL_OK
}
while [ $CHECK_TIME -ne 0 ]
do
let "CHECK_TIME -= 1"
check_mysql_helth
if [ $MYSQL_OK = 1 ] ; then
CHECK_TIME=0
exit 0
fi
if [ $MYSQL_OK -eq 0 ] && [ $CHECK_TIME -eq 0 ]
then
pkill keepalived
exit 1
fi
sleep 1
done
该脚本需要有执行权限,通过以下命令加上执行权限
[root@node2 keepalived]# chmod +x check_mysql.sh
[root@node2 keepalived]# ll
total 8
-rwxr-xr-x 1 root root 654 Jul 24 17:15 check_mysql.sh
-rw-r--r-- 1 root root 634 Jul 29 16:16 keepalived.conf
backupmysql上(脚本需要执行权限)
[root@node2 keepalived]# more check_mysql.sh
#20140722
#!/bin/bash
MYSQL=/usr/bin/mysql
MYSQL_HOST=192.168.3.28
MYSQL_USER=root
MYSQL_PASSWORD=mysql
CHECK_TIME=3
#mysql is working