日期:2014-05-16  浏览次数:20491 次

Mysql, DRBD, Heartbeat 实现数据库复制和数据库系统HA

使用了两种技术来实现数据库之间的复制和高可用性(HA)
DRBD (http://www.drbd.org)和Heartbeat (http://www.linux-ha.org/),两个软件具体安装和配置网上有很多范例。我使用的debian系统,安装和配置起来非常方便。

1、由于一开始测试Mysql Cluster功能,我采用的Mysql是 Cluster集成版本 (http://www.mysql.com/products/database/cluster/),但是,我没有启用Cluster功能 (Cluster测试稍后推出)。你完全可以用apt-get install mysql-server来安装5.0标准版本。

2、DRBD的源码安装非常复杂,有兴趣的朋友可以自己测试。我采用debian的安装方法,英文比较好请看官方文档(http://www.drbd.org/users-guide/s-build-deb.html):
1. 安装module-assistant ,apt-get install module-assistant ;
2. 使用module-assistant 来配置DRBD,非常方便, module-assistant auto-install drbd8? (简写方式? m-a a-i drbd8);
3. 安装完成后,只要不出错就可以了,然后检查是否安装成功:
#lsmod |grep drbd
drbd????????????????? 178540? 3
cn????????????????????? 5344? 1 drbd


4. 配置/etc/drbd.conf 文件类似如下,并且复制此文件到另外一台服务器上同样的地方( scp /etc/drbd.conf 10.0.10.2:/etc/drbd.conf ):
global {
usage-count yes;
}
common {
protocol C;
}
resource r0 {
syncer {
rate 100M;
al-extents 25;
}
on db1 {
device??? /dev/drbd1;????
disk????? /dev/hdd1;????????????? #你要实现镜像的磁盘
address?? 10.0.10.1:7789;?? #你的数据库1
meta-disk internal;
}
on db2 {
device??? /dev/drbd1;
disk????? /dev/hdd1;
address?? 10.0.10.2:7789;? #你的数据库2
meta-disk internal;
}
}


5. 两个服务器上分别执行 drbdadm create-md r0 ,创建,并格式化 系统 mkfs.ext3 /dev/hdd1 ,如果出错,执行 dd if=/dev/zero of=/dev/hdd1 bs=1M count=1? 。

6. 两个服务器分别启动DRBD? #/etc/init.d/drbd restart
#cat /proc/drbd
1: cs:Connected st:Secondary/Primary ds:UpToDate/UpToDate C r---
这样就是启动成功了。自己mount文件系统,并且验证数据写入。(这里其实不需要太多的步骤,后面由 heartbeat来实现自动主备切换和数据库文件系统切换)

3、Heartbeat安装和配置,请参考其他文档: apt-get install heartbeat 。保持两个服务器 /etc/ha.d下 authkeys, ha.cf, haresource三个文件一致性。
more authkeys |grep -v ^#
auth 1
1 crc

more ha.cf |grep -v ^#
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility???? local0
keepalive 2
deadtime 5
warntime 10
initdead 10
udpport 694
mcast eth1 225.0.10.1 694 1 0
auto_failback on
node??? db1
node??? db2


more haresources |grep -v ^#
db1? drbddisk Filesystem::/dev/drbd1::/usr/local/mysql/data::ext3 mysql 192.168.10.158
以上内容如果不理解,请看官方文档(http://downloads.mysql.com/docs/mysql-ha-scalability-en.pdf),注意你的mysql 数据文件的目录,我的是
/usr/local/mysql/data ? 。 ext3 后面有个mysql,其实是一个脚本文件,需要放在 /etc/ha.d/resource.d/ 下面,注意红色部分是你mysql的启动脚本:
?more resource.d/mysql

#!/bin/bash
##This script is inteded to be used as resource script by heartbeat
## 2010.09.20 by jiekechoo
#
###
. /etc/ha.d/shellfuncs
case "$1" in
start)
? res=`/etc/init.d/mysql.server start`
ret=$?
ha_log $res
exit $ret
;;
stop)
?? res=`/etc/init.d/mysql.server stop`
ret=$?
ha_log $res
exit $ret
;;
status)
if [[ `ps -ef | grep '[m]ysqld'` > 1 ]] ; then
echo "running"
else
echo "stopped"
fi
;;
*)
echo "Usage: mysql.server {start|stop|status}"
exit 1
;;
esac
exit 0



启动Heartbeat? ,/etc/init.d/heartbeat restart

确认heartbeat 启动成功,远程访问 虚拟ip? 192.168.10.158 的3306,看看是否成功。接着,在heartbeat主机上(ifconfig 看看虚拟IP在哪个机器上)执行? /usr/lib/heartbeat/hb_standby ,再去试试远程访问虚拟IP mysql服务。我的环境下,切换时间在5秒左右,对于前台web服务器,就是感觉卡了一下。