Mysql双机互备热备自动切换Word格式文档下载.docx
《Mysql双机互备热备自动切换Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《Mysql双机互备热备自动切换Word格式文档下载.docx(9页珍藏版)》请在冰豆网上搜索。
方法2中,可以不用增加一个对外IP,同时在监控上,可以直接监控mysql的服务,至于稳定性,有待测试。
此方法中还有一个问题,就是提供给客户端的数据库连接IP,因为切换后,IP也就变了。
如果说更改程序,那不现实。
所以,这里可以用域名,不过仍然需要修改域名的IP指向或是修改客户机的hosts文件。
本文使用的是修改DNS的方法,因为DNS是自己配置的,可以灵活操作。
本方分两部分进行说明
第一部分用heartbeat实现的高可用
1环境条件
两个虚拟机(IP:
192.168.1.91/92/93),
CentOS5.4,mysql-5.1.37,heartbeat-2.1.3-3
2安装前的准备
Heartbeat的工作原理:
heartbeat最核心的包括两个部分,心跳监测部分和资源接管部分,心跳监测可以通过网络链路和串口进行,而且支持冗余链路,它们之间相互发送报文来告诉对方自己当前的状态,如果在指定的时间内未受到对方发送的报文,那么就认为对方失效,这时需启动资源接管模块来接管运行在对方主机上的资源或者服务。
更多请看官网http:
//linux-ha.org/HomePage
基础系统的安装,mysql的安装(略)
软件下载
http:
//linux-ha.org/DownloadSoftware
Http:
//
3安装过程(heartbeat)
一般的软件源码安装是./configure–prefix=path;
make;
makeinstall,本文使用yum安装
yuminstallheartbeat
yuminstallheartbeat-ldirectord
有一点要注意:
heartbeat的监测,可以是网络或串口,本文使用网络也就是网卡
4配置文档及脚本
1)Heartbeat的三个配置文件ha.cf,authkeys,haresources
CatHa.cf
debugfile/var/log/ha-debug
logfile/var/log/ha-log
logfacilitylocal0
keepalive2
deadtime5
warntime10
initdead10
udpport694
bcasteth0
auto_failbackoff
nodemysqlm
nodemysqls
respawnhacluster/usr/lib/heartbeat/ipfail
apiauthipfailgid=haclientuid=hacluster
Catauthkeys
auth1
1crc
Catharesources
mysqlmmysql_start1.shIPaddr:
:
192.168.1.93/32/eth0
2)mysql_start1.sh脚本
#!
/bin/sh
#author:
wdlinux
#url:
#description:
mysqlstart
local_ip=192.168.1.91
mip=192.168.1.92
vip=192.168.1.93
mysql_in=/usr/local/mysqlm
mysql_bin=${mysql_in}/bin/mysql
mysql_user=root
mysql_port=3306
mysql_pass=12345
mysqld_start=/etc/rc.d/init.d/mysqldm
./etc/rc.d/init.d/functions
functionslave_to_master(){
echo"
mysqltomasterfromslave..."
$mysql_bin-u"
${mysql_user}"
-p"
${mysql_pass}"
-e"
slavestop;
"
log_file=$(${mysql_bin}-u"
-P"
${mysql_port}"
-e"
showmasterstatus\G"
|grep"
File:
|a
wk-F'
'
{printf$2}'
)
log_id=$(${mysql_bin}-u"
Position:
|
awk-F'
usems_state;
updatems_logsetmlf='
${log_file}'
mlp
='
${log_id}'
mysqlserverismaster"
}
functionmaster_to_slave{
mysqltoslavefrommaster..."
if(${mysql_bin}-h"
${vip}"
-u"
showslavestatus"
>
/dev/null2>
&
1)
then
log_file=$(${mysql_bin}-h"
selectm
lffromms_log\G"
mlf:
|awk-F'
log_id=$(${mysql_bin}-h"
selectmlp
fromms_log\G"
mlp:
CHANGEMASTERTOMASTER_LOG_FILE
='
MASTER_LOG_POS=${log_id};
slavestart"
;
mysqlserverisslave"
fi
case"
$1"
in
start)
slave_to_master
stop)
master_to_slave
*)
Usage:
mysql_start.sh{start|stop}"
startisslavetomaster"
stopismastertoslave"
exit1
esac
3)同保证和记录当主机由slave到master转变时记录当前master的文件和位置,需要建一个数据库和表来记录
createdatabasems_state;
createtablems_log(
idtinyint
(1)unsignednotnullauto_increment,
mlfvarchar(20)notnulldefault'
'
mlpvarchar(20)notnulldefault'
primarykey(id)
);
insertintoms_logvalues(NULL,"
test"
"
123"
4)mysql的配置
在原本的配置里加上,文件f,主从一样,ID要不同
log-bin=mysql-bin
binlog_format=mixed
server-id=1
master-host=192.168.1.92
master-user=msdata
master-password=pass
slave-skip-errors=all
replicate-do-db=test
replicate-ignore-db=mysql
replicate-ignore-db=ms_state
其它配置略
经测试,91,92重起关机都能自动切换,接管93的IP,且故障机恢复后都能自动进入备份状态,且数据同步及时和一致
第二部分自己编写脚本实现的高可用
一监控实现原理
自己编写脚本,实现的功能和heartbeat差不多,都是监控,切换等
对于监控,可以监控系统的状态如ping,也可以监控mysql服务状态(本文使用的方法)
二实现脚本
除了用此脚本替换heartbeat外,其它的实现和配置同上
1监控脚本mysql_monitor.sh
/bin/bash
monitorshellofmysql
local_ip=192.168.1.92
rip=192.168.1.91
st=0
whiletrue;
do
${rip}"
showmasterstatus"
--connect_timeout=1>
/
dev/null2>
if(($st==0));
/etc/rc.d/init.d/mysql_start1.shstop
letst=$st+1
else
for((i=0;
i&
break
if(($i==3));
slavetomaster"
/etc/rc.d/init.d/mysql_start1.shstart
###modifydnsprg
exit
done
sleep3
将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的实现和功能