第一 解决moosefs 中的元数据(mfsmaster)单点故障
1 所需要的软件包如下
drbd-8.3.10.tar.gz
heartbeat-2.0.7.tar.gz
libnet-1.1.2.1.tar.gz
mfs-1.6.20-2.tar.gz
2 用到heartbeat 来进行心跳探测主从节点,判断其主机是否存活
3 对moosefs元数据(mfsmaster)的运行状态监控,在对moosefs元数据(mfsmaster)的状态监控是用shell 脚本 ,当mfsmaster 处于stoped 状态时,会自动关闭heartbeat
并进行主从切换
4 为保证数据的实时同步是用DRBD(磁盘镜像技术)
第二 在配置其drbd主从节点,对其系统资源的要求
1 在配置磁盘镜像的同步磁盘必须是一个独立的磁盘分区(不能和系统磁盘在同一个分区)或者是独立的磁盘,
2 对drbd的主从节点上进行数据同步的网卡接口必须保证其网络的高可用性,如果在主从节点之间不能正常探测到对方主机,drbd会出现split brain 现象,从而导致 drbd的主从节点不能进行数据的正常同步
第三,安装drbd
1 drbd 的安装
#tar xvf drbd-8.3.10.tar.gz
#cd drbd-8.3.10
#./configure --with-km --prefix=/usr --sysconfdir=/etc --localstatedir=/var
#make && make install
#modprobe drbd
2 drbd 的配置
#vim /etc/drbd.d/global_common.conf
global {
usage-count yes;
}
common {
syncer {
# rate after al-extents use-rle cpu-mask verify-alg csums-alg
rate 100M;
al-extents 257;
}
}
resource mfs {
#使用的协议,收到写入确认就认为完成写操作
protocol C;
disk {
on-io-error detach;
#同步磁盘的大小,建议如果同步的磁盘大小不相同,请在该处设置最小的磁盘大小
size 100G;
} net {
after-sb-0pri disconnect;
rr-conflict disconnect;
}
syncer {
#同步速率
rate 100M;
al-extents 257;
}
on mfsmaster {
#drbd的设备
device /dev/drbd0;
#同步的磁盘
disk /dev/sdb1;
#server IP 地址,及其端口
address 10.10.1.1:7788;
meta-disk internal;
}
on mfsback {
device /dev/drbd0;
disk /dev/sdb1;
address 10.10.1.2:7788;
meta-disk internal;
}
}
3 在主次节点上分别启动drbd
#service drbd start
#drbdadm create-md resource 注:resource 为资源名称
#mkfs.ext3 /dev/drbd0
4 在主节点上执行下面命令
#drbdsetup /dev/drbd0 primary –o
#mount /dev/drbd0 /mfsdata
第四 安装moosefs ,一定要安装在drbd的挂载的目录下面
1 创建用户
#useradd -s /sbin/nologin mfs
2 安装mfs
#tar xvf mfs-1.6.20-2.tar.gz
#cd mfs-1.6.20-2
# ./configure --prefix=/mfsdata/mfs --disable-mfschunkserver --disable-mfsmount --with-default-user=mfs --with-default-group=mfs
#make && make install
3 配置mfs服务
#cd /mfsdata/mfs/etc
#cp mfsexport.cfg.dist mfsexprot.cfg
#cp mfsmaster.cfg.dist mfsmaster.cfg
#cd ../var/mfs/
#cp metadata.mfs.empty metadata.mfs
4 启动mfsmaster 即元数据服务器
#/mfsdata/mfs/sbin/mfsmaster start
第五 安装heartbeat,并进行整合heartbeat和drbd,moosefs 启动脚本
1 监控moosefs 元数据的运行状态的脚本
#!/bin/bash
#By Frank
##monitor mfs status
STATUS="`/etc/init.d/heartbeat status | awk '{print $1,$2}'`"
OK="heartbeat OK"
while true
do
if [ -d /mfsdata/mfs -a ! -f /mfsdata/mfs/var/mfs/metadata.mfs.back ]
then
# echo "`date +%y-%m-%d-%H:%M:%S`: $STATUS " >>monitormfsd.log
if [ "$STATUS"="$OK" ]
then
/etc/init.d/heartbeat stop >>/dev/null 2>&1
break
fi
else
continue
fi
done &
2 创建moosefs元数据启动脚本
#vim mfsd
#!/bin/bash
#By Frank
##mfsmaster start shell
#chkconfig: 2345 99 10
#description:mfsd start
. /etc/rc.d/init.d/functions
## start mfs service
start() {
/mfsdata/mfs/sbin/mfsmaster -c /mfsdata/mfs/etc/mfsmaster.cfg
/bin/sleep 2
/bin/bash /etc/ha.d/resource.d/monitormfsd >>/dev/null 2>&1
}
stop() {
PID=`/bin/ps -ef |/bin/grep monitormfsd | /bin/grep -v grep |/bin/awk '{print $2}'`
/bin/kill -9 $PID >>/dev/null 2>&1
/bin/sleep 5
/mfsdata/mfs/sbin/mfsmaster stop
}
case "$1" in
start )
start
;;
stop )
stop
;;
* )
echo "Usage: $0 start|stop"
exit 0
esac
4 整合drbd heartbeat moosefs元数据服务器(mfsmaster),注意的是,当主节点出现故障恢复正常是不让其自动收回资源,因为drbd易出现split
brain 现象
#vim /etc/ha.d/haresource
mfsmaster drbddisk::mfs Filesystem::/dev/drbd0::/mfsdata::ext3 mfsd:: IPaddr::192.168.2.100/24/eth0
5 并把drbd 及heartbeat,mfsd 添加到开机启动队列中
#cp /etc/ha.d/resource/mfsd /etc/init.d/mfsd
#chmod 700 /etc/init.d/mfsd
#chkconfig --add mfsd
#chkconfig mfsd on
#chkconfig heartbeat on
#chkconfig mfsd on
第六 出现的问题,如下
在该集群上eth1 为mfsmaster和mfsback 进行数据同步,由于网络的不稳定,易造成DRBD 出现split brain 现象,
如下
1 测试发生split brain 情况
[root@mfsmaster ~]# ifdown eth1 注:一段时间后在启动该网卡(ifup eth1)drbd 同步eth1 进行数据同步
并查看 在mfsmaster
[root@mfsmaster ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsmaster, 2011-02-28 11:31:28
0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown r-----
ns:40 nr:0 dw:856 dr:2090 al:9 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:784
2 在mfsback
[root@mfsback ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsback, 2011-02-28 11:29:00
0: cs:StandAlone ro:Secondary/Unknown ds:UpToDate/DUnknown r-----
ns:0 nr:40 dw:900 dr:1169 al:5 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:784
3 解决方法
首先关闭在主从节点上关闭heartbeat 不然不能恢复drbd 的正常连接
#service heartbeat stop
在mfsmaster 运行一下命令
#drbdadm secondary resource(注:resource 为drbd的资源名)
#drbdadm -- --discard-my-data connect resource
在mfsback 上运行下面命令
#drbdadm connect source
4 再次查看drbd的信息
查看mfsmaster 上的drbd的信息
#cat /proc/drbd
[root@mfsmaster~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsmaster, 2011-02-28 11:31:28
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:0 nr:2620 dw:4168 dr:2102 al:9 bm:5 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
查看mfsback 上的drbd信息
[root@mfsback ~]# cat /proc/drbd
version: 8.3.10 (api:88/proto:86-96)
GIT-hash: 5c0b0469666682443d4785d90a2c603378f9017b build by root@mfsback, 2011-02-28 11:29:00
0: cs:Connected ro:Secondary/Secondary ds:UpToDate/UpToDate C r-----
ns:2620 nr:0 dw:1632 dr:4830 al:6 bm:6 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
5 在主备节点上依次重启heartbeat
#service heartbeat start