迷彩 潜伏 隐蔽 伪装
分类:
2012-11-05 10:58:09
原文地址:DRBD在逻辑卷上构建MySQL高可用数据库 作者:fengzhanhai
DRBD工作原理:
DRBD是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地 文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.
笔者建议如果你们公司资源真的很匮乏的话可以采用该方案实现业务的高可用性,但是如果你所在的公司有存储的话笔者不建议数据库的高可用性及数据的同步交给drbd去做,毕竟数据是你业务系统存在价值的立足点。因为在测试过程中发现drbd的稳定性和可维护性并未像笔者想象的那样如意和健壮。
一、实施环境前提
1、数据库介质MySQL安装
如何设置mysql数据库数据存放的路径:
1.在my.ini文件里可以设定数据文件的存放路径将其从原来的目录移动到指定的位置;修改配置文件my.ini,也就是把socket和data的目录改到你移到的位置。
2. 找到my.cnf或是my.ini修改相应的datadir(数据目录)和basedir(基本目录)。比如 数据目录在/usr/local/mysql/data中 datadir=/usr/local/mysql/data
3、下载drbd软体
wget
安装drbd软体
tar zxvf drbd-8.3.4.tar.gz
cd drbd-8.3.4
make all
make install
make install-tools
为了快速解决安装介质问题此处
yum install --downloadonly --downloaddir=/drsoft drbd83 kmod-drbd83
sudo yum --enablerepo=extras install drbd kmod-drbd #其他安装方法4、同步块设备的确定
a)所在分区或硬盘可以扩容,比如使用lvm
b)所在分区或硬盘上的文件系统支持shrinking
c)如果以上两条都不能满足,请使用外部metadata
在两台主机上执行:
第一种方案:
device /dev/drbd1; # 今后生成使用的设备名;不用和实际分区号一样.不过最好规范
disk /dev/sdb1; # 该节点上用于存放数据的分区号
第二种方案
配置完成后,分别在每台机器上建立drbd 的metadata 和drbd 节点
# drbdadm create-md mysqldata
# drbdadm create-md r1
# mknod /dev/drbd0 b 147 0
# mknod /dev/drbd1 b 147 1
在plserver5.physerver.com 上面启动drbd
# service drbd start
在系统询问wait timeout 时,yes,因为plserver6.physerver.com 还没有启动drbd,所以不需
要让drbd 去连接对方。
在plserver6.physerver.com 上面启动drbd
系统正常启动
在plserver5.physerver.com 上面,进行同步初始化
# drbdadm -- --overwrite-data-of-peer primary mysqldata
这个需要一段时间,根据磁盘容量的大小,可以cat /proc/drbd 看到同步的进度,完成后同步
drbd1
# drbdadm -- --overwrite-data-of-peer primary r1
同步完成后我们在plserver5.physerver.com 再对共享磁盘进行格式化:
# mkfs.ext3 /dev/drbd0
# mkfs.ext3 /dev/drbd1
第三种方案
# mkfs.ext3 /dev/sda5
# dd if=/dev/zero of=/dev/sda5 bs=1M count=1;sync
在两台主机上同时执行:
# /etc/init.d/drbd restart
查看是状态:
# watch -n 1 cat /proc/drbd
在主节点主机上执行:
设置当前节点为主节点并进行格式化:
# drbdadm -- --overwrite-data-of-peer primary all
# mkfs.ext3 /dev/drbd0
# mount /dev/drbd0 /data
继续查看状态:
# watch -n 1 cat /proc/drbd
配置drbd服务
1.cd /etc
2.编辑配置文件drbd.conf添加如下信息
#
# please have a a look at the example configuration file in
# /usr/share/doc/drbd83/drbd.conf
#
global{
usage-count yes;
}
common{
syncer{rate 100M;}
}
resource r1{
protocol C;
startup{}
disk{
on-io-error detach;
}
net{
cram-hmac-alg sha1;
shared-secret "SharkShow";
}
on mysql1{
device /dev/drbd1;
disk /dev/vg0/lv0;
address 192.168.202.77:7898;
meta-disk internal;
}
on mysql2{
device /dev/drbd1;
disk /dev/vg1/lv1;
address 192.168.202.73:7898;
meta-disk internal;
}
}
3.配置drbd.conf后在两台服务器上均执行drbdadm create-md r1 报如下错误
'r1' ignored, since this host (localhost.localdomain) is not mentioned with an 'on' keyword.
解决方法如下所示on模块后面的必须是对应主机的主机名所以我们需要修改主机名
在/etc/sysconfig/network文件的hostname修改为 mysql1、mysql2
4.再次执行该命令是又报如下错误:
Command 'drbdmeta 1 v08 /dev/vg1/lv1 internal create-md' terminated with exit code 40
drbdadm create-md r1: exited with code 40
解决方法如下所示:
dd if=/dev/zero bs=1M count=1 of=/dev/vg1/lv1
#低格式化分区
再次执行ok成功了。
5.service drbd start