DRBD + HeartBeat + MooseFS
建立高可用的Moosefs文件系统
目录
1.概述... 2
2.系统构架... 2
3.DRBD.. 3
原理... 3
安装... 4
配置... 4
监控... 6
测试... 8
4.HeartBeat. 8
准备工作... 8
安装... 9
监控与测试... 11
5.MooseFS. 12
安装元服务器(主从都一样)... 13
备份服务器Backup server (metalogger) 安装... 14
存储块服务器Chunk servers 安装... 15
客户端Users’ computers 安装... 16
监控界面:... 17
测试... 17
6.集成与测试... 18
集成... 18
测试... 18
Moose通过DNBD提供磁盘及时同步,通过HeartBeat提供Failover,来达到高可用。
搭建此环境前,应该对整体的系统构架有清楚的认识,下面是我的系统构架图
原理
DRBD(Distributed Replicated BlockDevice)是一种块设备,可以被用于高可用(HA)之中.它类似于一个网络RAID-1功能.当你将数据写入本地文件系统时,数据还将会被发送到网络中另一台主机上.以相同的形式记录在一个文件系统中. 本地(主节点)与远程主机(备节点)的数据可以保证实时同步.当本地系统出现故障时,远程主机上还会保留有一份相同的数据,可以继续使用.在高可用(HA)中使用DRBD功能,可以代替使用一个共享盘阵.因为数据同时存在于本地主机和远程主机上,切换时,远程主机只要使用它上面的那份备份数据,就可以继续进行服务了.
DRBD的工作原理如下图:
+----------+
| 文件系统 |
+----------+
|
V
+-------------+
| 块设备层 |
| (/dev/drbd1)|
+-------------+
| |
| |
V V
+------------+ +-------------+
| 本地硬盘 | | 远程主机硬盘|
| (/dev/sda1)| | (/dev/sda1) |
+------------+ +-------------+
==========================================================
注意:你需要为本地主机和远程主机,指定一个DRBD使用的硬盘分区.这两个分区的大小建议相同. 我们指定两台主机的/dev/sda1 分区作为DRBD的使用的分区.此分区最好是新划分出来的分区,系统规划过程应预留此分区为DRBD,如果是已经安装好的系统没有分区的话,防止系统数据丢失,建议用Linux分区工具对系统进行分区。
*注意! 在没有建立drbd资源时,切不可提前格式化硬盘!
系统环境:Centos5.5 x86_64 [2.6.18-194.el5]
master(主机):IP地址:10.1.27.34 镜像分区:/dev/sda1,4GB
slave (备机):IP地址:10.1.27.35 镜像分区:/dev/sda1,4GB
软件环境:
Centos自带RPM包 kernel-headers kernel-devel
如果找不到,建议利用yum安装相关的包库 yum �Cy install kernel-headers kernel-devel2.
从官方网站下载源码包来编译或直接使用yum源来安装,这里以CentOS为例说明安装过程,其它系统类似。
[root@server1 ~]# uname -a
Linux server1 2.6.18-194.el5 #1 SMP Fri Apr2 14:58:35 EDT 2010 i686 i686 i386 GNU/Linux
Note : 在安装过程中系统不要选择虚拟机内核去安装DRBD,否则会出现加载不了内核的错误,如我的内核是2.6.18-194.el5xen和2.6.18-194.el5,应选择后者,在电脑启动的BIOS上课选择启动的内核
通过yum安装DRBD服务(请设置好网络和yum下载镜像):
Note: 在编译之前,首先要确认系统中已经安装了gcc,make, glibc库,flex scanner generator和bison等工具,其中gcc的版本必须和编译当前linux内核所用的gcc是相同版本的。
查看gcc版本的命令:gcc -v
查看当前linux内核对应gcc版本的命令:cat/proc/version
[root@ server1 ~]# yum -y installkmod-drbd83 drbd83
检查DRBD是否安装成功:
[root@ server1 ~]# lsmod | grep -i drbd
drbd 228528 3
如果没有提示,则系统找不到相应的模块执行下面的命令找到drbd.ko
[root@server1 ~]# modprobe -l | grep -i drbd
/lib/modules/2.6.18-194.11.1.el5/weak-updates/drbd83/drbd.ko
安装成功之后/sbin目录下面有drbdadm,drbdmeta,drbdsetup命令,以及/etc/init.d/drbd启动脚本。
DRBD运行需要读取/etc/drbd.conf配置文件,下面是两台主机节点配置的drbd.conf文件的简单示例:
[root@ server1 ~]#cat /etc/drbd.conf
# 是否参加DRBD使用者统计.默认是yes
global { usage-count yes; }
# 设置主备节点同步时的网络速率最大值,单位是字节.
common { syncer { rate 50M; } }
# 一个DRBD设备(即:/dev/drbdX),叫做一个"资源".里面包含一个DRBD设备的主备节点的相关信息.
resource r0 {
# 使用协议C.表示收到远程主机的写入确认后,则认为写入完成.
protocol C;
# 设置主备机之间通信使用的信息算法.
net{
cram-hmac-alg sha1;
shared-secret "secret string";
}
# 每个主机的说明以"on"开头,后面是主机名.在后面的{}中为这个主机的配置.
onserver1 {
# /dev/drbd1使用的磁盘分区是/dev/sda1
device /dev/drbd1;
disk /dev/sda1;
# 设置DRBD的监听端口,用于与另一台主机通信
address 10.1.27.34:7898;
meta-disk internal;
}
onserver2 {
device /dev/drbd1;
disk /dev/sda1;
address 10.1.27.35:7898;
meta-disk internal;
}
}
drbd.conf的配置参数很多,有兴趣的话可以使用命令:mandrbd.conf来查看了解更多的参数说明。
建立drbd设备
在启动DRBD之前,你需要分别在两台主机的sda1分区上,创建供DRBD记录信息的数据块.
注意:如果你在这步之前已经给/dev/sda1格式化的话,这里会报错,并且无法继续,抱错内容如下:
md_offset ...........
al_offset...........
bm_offset...........
Found ext3 filesystem which uses
Device size would be truncated, which
wouldcorrupt data and result in
'access beyondend of device' errors.
You need toeither
* use externalmeta data (recommended)
* shrink thatfilesystem first
* zero out thedevice (destroy the filesystem)
Operation refused.
Command 'drbdmeta
根据报错和官方描述的大概意思就是:有了文件系统,会被认为该设备已经被使用,不能被drbd所使用,最好的解决办法就是低格硬盘破坏该文件系统~
官方的方法如下:破坏文件系统:
#dd if=/dev/zero bs=1M count=1 of=/dev/sda1;sync
# drbdadm create-md r0 // 配置文件中的resource名
--== Thank you for participating in the global usage survey ==--
The server's response is:
you are the 1889th user to install this version
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success
启动服务
[root@server1 ~]#/etc/init.d/drbd start
[root@ server2~]#/etc/init.d/drbd start
两台机器同时启动
在任意节点查看节点状态
[root@ server1 ~]# cat /proc/drbd
1:cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:2007644
对输出的含义解释如下:
ro表示角色信息,第一次启动drbd时,两个drbd节点默认都处于Secondary状态,
ds是磁盘状态信息,“Inconsistent/Inconsisten”,即为“不一致/不一致”状态,表示两个节点的磁盘数据处于不一致状态。
Ns表示网络发送的数据包信息。
Dw是磁盘写信息
Dr是磁盘读信息
设置主节点
由于默认没有主次节点之分,因而需要设置两个主机的主次节点,选择需要设置为主节点的主机,然后执行如下命令:
[root@ server1 ~]#drbdsetup /dev/drbd1 primary�Co
或者执行下面命令也是可以的
[root@ server1 ~]#drbdadm ----overwrite-data-of-peer primary all
第一次执行完此命令后,在后面如果需要设置哪个是主节点时,就可以使用另外一个命令:
[root@ server1 ~]#/sbin/drbdadm primary r0或者/sbin/drbdadmprimary all
执行此命令后,开始同步两台机器对应磁盘的数据
[root@ server1 ~]#cat /proc/drbd
1: cs:SyncSource ro:Primary/Secondaryds:UpToDate/Inconsistent C r----
ns:576224 nr:0 dw:0 dr:581760 al:0 bm:34lo:84 pe:369 ua:256 ap:0 ep:1 wo:b oos:1443196
[====>...............] sync'ed: 28.4%(1443196/2007644)K delay_probe: 69
finish: 0:03:56 speed: 6,024 (5,876) K/sec
从输出可知:“ro状态现在变为“Primary/Secondary”,“ds”状态也变为“UpToDate/Inconsistent”,也就是“实时/不一致”状态,现在数据正在主备两个主机的磁盘间进行同步,且同步进度为28.4%,同步速度每秒5.8M左右。只有出现了Primary/Secondary表示主从机器已经识别到对方了,drbd启动正常。
等待片刻,再次查看同步状态,输出如下:
[root@ server1 ~]#cat /proc/drbd
1: cs:Connected ro:Primary/Secondaryds:UpToDate/UpToDate C r----
ns:2007644 nr:0 dw:0 dr:2007644 al:0 bm:123lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0
可以看到同步完成了,并且“ds“状态也变为“UpToDate/UpToDate”了。即为“实时/实时”状态了。
如果第一次设置主备节点时使用“/sbin/drbdadm primary r0”命令,那么会提示如下错误:
0: State change failed: (-2) Need access toUpToDate data
Command '/sbin/drbdsetup 0 primary'terminated with exit code 17
只要第一次用上面命令成功后,以后就可以用“/sbin/drbdadm primary r0”命令了。
格式化文件系统
由于mount操作只能在主节点进行,所以只有设置了主节点后才能格式化磁盘分区,然后挂载:
[root@ server1 ~]#mkfs.ext3 /dev/drbd1
[root@ server1 ~]#mount /dev/drbd1 /mnt/mfs
主备节点切换
主备节点切换有两种方式,分别是停止drbd服务切换和正常切换,依次介绍:
停止drbd服务切换
1.关闭主节点服务切换
此时挂载的drbd分区就自动在主节点卸载了,然后在备用节点执行切换命令:
[root@drbd2 ~]#drbdadm primary all
此时会报错:
State change failed: (-7) Refusing to bePrimary while peer is not outdated
Command 'drbdsetup 2 primary' terminatedwith exit code 11
因此,必须在备用节点执行如下命令:
[root@server2 ~]#drbdsetup /dev/drbd1primary �Co
或者
[root@server2~]#drbdadm ----overwrite-data-of-peer primary all
此时就可以正常切换了。
当在备用节点执行切换到主节点命令后,原来的主用节点自动变为备用节点。无需在主用节点再次执行切换到备用节点的命令。
2.正常切换
在主节点卸载磁盘分区,然后执行
[root@drbd1 ~]#drbdadm secondary all
如果不执行这个命令,直接在备用节点执行切换到主节点的命令,会报错:
2: State change failed: (-1) Multipleprimaries not allowed by config
Command 'drbdsetup 2 primary' terminatedwith exit code 11
接着,在备用节点执行
[root@server2 ~]#drbdadm primary all
最后在备用节点挂载磁盘分区即可:
[root@ server2 ~]#mount /dev/drbd1 /mnt/mfs
测试
1) 切换测试
master主节点
[root@ server2 ~]mount /dev/drbd1 /mnt/mfs
[root@ server2 ~]cd /mnt/mfs/
[root@ server2 ~]vi test
[root@ server2 ~]echo “testing…”>test
接下来你需要将DRBD的主从机互换一下.
可以执行下面的操作:
在主机上,先要卸载掉DRBD设备.
[root@ server2 ~]umount /mnt/mfs
[root@ server2 ~]drbdadm secondary r0
现在,两台主机都是"备机"需要把备节点升为主节点
[root@ server2 ~]drbdadm primary r0
[root@ server2 ~]mount /dev/drbd1 /mnt/mfs
[root@ server2 ~]ls /mnt/mfs 查看是否有test文件
2) 灾难测试
master主节点
[root@ server2 ~]mount /dev/drbd1 /mnt/mfs
[root@ server2 ~]cd /mnt/mfs/
[root@ server2 ~]vi test1
[root@ server2 ~]echo “test1ing…”>test1
slave备节点
[root@ server2 ~]service drbd stop
[root@ server2 ~]mount /dev/sda1 /mnt/mfs
1.网络布局
IP设置:
HA01: 10.1.27.34 (eth0 对外IP) 心跳:192.168.91.1eth1: 对内IP(HA专用)
HA02: 10.1.27.35 (eth0 对外IP) 心跳:192.168.91.1 eth1: 对内IP(HA专用)
浮动IP在这里不需要设置这个IP是在安装heartbeat时设置
2.网络测试
[root@server1 ~]# ping HA02
[root@server1 ~]# ping server2
如果网络网络不通请检查网络。
3.检查主机的几个配置文件
server1的hosts内容如下:
[root@server1 ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
10.1.27.34 server1 HA01
192.168.91.1 HA01
192.168.91.2 HA02
10.1.27.35 server2
server2的hosts内容如下:
[root@server2 ~]# cat /etc/hosts
127.0.0.1 localhost.localdomain localhost
10.1.27.35 server2 HA02
192.168.91.1 HA01
192.168.91.2 HA02
10.1.27.34 server1
[root@server1 ~]# cat /etc/host.conf
order hosts,bind
安装heartbeat(主从都需安装)
yum install libnet
yum install heartbeat-devel
yum installheartbeat-ldirectord
yum install heartbeat
安装过程中如果出现依赖的包,利用yum安装即可。
配置文件
cp /usr/share/doc/heartbeat-2.1.3/ha.cf/etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/authkeys/etc/ha.d/
cp /usr/share/doc/heartbeat-2.1.3/haresources /etc/ha.d/
a.配置ha.cf
编辑hertbeat主配置文件ha.cf,2个主机上的内容一样。
[root@server1 ~]# cat /etc/ha.d/ha.cf
logfile /var/log/ha_log/ha-log.log ## ha的日志文件记录位置。如没有该目录,则需要手动添加
bcast eth1 ##使用eth1做心跳监测
keepalive 2 ##设定心跳(监测)时间时间为2秒
warntime 10
deadtime 30
initdead 120
hopfudge 1
udpport 694 ##使用udp端口694 进行心跳监测
auto_failback on ##是否恢复到它的primary节点
node server1 ##节点1,必须要与 uname-n 指令得到的结果一致。
node server2 ##节点2
b.配置心跳的加密方式:authkeys(主从相同)
[root@server1 ~]# vi /etc/ha.d/authkeys
auth 1
1 crc
#2 sha1 HI!
#3 md5 Hello!
可以选择的几种验证方式,
最后记得将authkeys 权限给为600
[root@server1 ~]chmod600 /etc/ha.d/authkeys
c.编辑haresources,2个主机上的内容一样。
[root@server1 ~]# vi /etc/ha.d/haresources
server1 Initdrbd mfsmaster 10.1.27.38
第一个字段是主机名,是uname -a得到的
第二个字段作用是执行当前的脚本命令此脚本可以定义在/etc/init.d/或/etc/ha.d/resource.d,此处我定义了一个名叫Initdrbd 的脚本命令,具体的见下面演示。
第三个字段作用定义启动mfsmaster进程,必须在/etc/init.d/或/etc/ha.d/resource.d能找到的可执行的脚本文件。
第四个字段作用是启动虚拟的IP
d.Initdrbd脚本制作
[root@server1 ~]# cd /etc/ha.d/resource.d/
[root@server1 ~]# vi Initdrbd
#!/bin/sh
unset LC_ALL; export LC_ALL
unset LANGUAGE; export LANGUAGE
prefix=/usr
exec_prefix=/usr
. /etc/ha.d/shellfuncs
case"$1" in
'start')
drbdadmprimary r0
mount/dev/drbd1 /mnt/usb
;;
'stop')
umount/mnt/usb
drbdadm secondary r0
;;
'restart')
;;
*)
echo "Usage: $0 { start | stop | restart }"
;;
esac
exit 0
常用的命令
启动/etc/init.d/heartbeat start 或者service heartbeatstart
停止/etc/init.d/heartbeat stop 或者 service heartbeatstop
重启/etc/init.d/heartbeat restart或者 service heartbeatrestart
监视服务tail -f /var/log/ha_log/ha-log.log 来查看启动的服务过程,具体的路径需要看配置文件的cat /etc/ha.d/ha.cf的日志路径的设定。
简单的测试
两台机器都修改配置文件
[root@server1]# vi /etc/ha.d/haresources
server1 10.1.27.38 httpd
利用虚拟IP和启动的Appache服务来,测试heartbeat的切换。
为两台机器建立标识文件如下
[root@server1]# cd /var/www/html
[root@server1 html]# cat index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
server1 is running
</BODY>
</HTML>
[root@server2]# cd /var/www/html
[root@server1 html]# cat index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
</HEAD>
<BODY>
Server2 is running
</BODY>
</HTML>
a). 两台机器分别启动
b). 然后在两台机器意外的其他机器上输入http://10.1.27.38
c). 正常会显示server1 isrunning,
d). 把server1宕机或者关闭heartbeat,则会出现server2接管工作的状态,刷新浏览器出现server2 is running
e). 恢复server1,过数秒后刷新浏览器出现server1is running,
f). 测试成功
Note:如果输入http:// 10.1.27.38 出现错误,请检查配置文件里面的服务是否写对了,查看日志文件看服务是否起来了,如果确定全部运行正常,还是没有WEB页面显示结果,请检查防火墙。
我们假定使用的主机ip 地址分配如下:
・ 主控服务器Master server: 10.1.27.34
・ 主控服务器Master server: 10.1.27.35
・ 主控备份服务器Metalogger server: 10.1.27.31
・ 存储块服务器Chunk servers: 10.1.27.31 and 10.1.27.32
・ 客户端主机 (clients): 10.1.27.33
安装元服务器(主从都一样)
切忌:用户的uid和gid必须两台主备机一样,否则切换之后,起不来!!!!!!
(1)、创建用户:
[root@server1 /]# groupadd -g 65534 mfs
[root@server1 /]# useradd -u 65534 -g mfs
(2)、设置依赖库
exportKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
[root@server1 /]# tar -zxvf mfs-1.6.15.tar.gz
[root@server1 ]#./configure --prefix=/mnt/mfs --with-default-user=mfs--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
[root@server1 /]# make && makeinstall
Note:安装时候一定要记得带prefix=/mnt/mfs,把安装目录全部置于DRBD的挂载目录,这样方便以后不能去指定路径去挂载。
(3)、安装必要文件
[root@server1 /]# cd /mnt/mfs/etc
[root@server1 etc]#cpmfsmaster.cfg.dist mfsmaster.cfg
[root@server1 etc]#cpmfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@server1 etc]#cpmfsexports.cfg.dist mfsexports.cfg
[root@server1 etc]#cd /mnt/mfs/var/mfs/
[root@server1 mfs]#cpmetadata.mfs.empty metadata.mfs
(4)、启动mfs
[root@server1 mfs]#/mnt/mfs/sbin/mfsmasterstart
(5)、定制hearbeat的启动文件mfsmaster
[root@server1 mfs]#vi /etc/init.d/mfsmaster
# chkconfig: 345 91 10
# description: mfs start.
# 包含函数库
. /etc/rc.d/init.d/functions
# 获取网络配置
. /etc/sysconfig/network
# 检测 NETWORKING 是否为 "yes"
[ "${NETWORKING}" ="no" ] && exit 0
# 启动服务函数
start() {
/mnt/usb/sbin/mfsmaster start
}
# 关闭服务函数
stop() {
/mnt/usb/sbin/mfsmaster stop
}
# 重启服务
restart() {
/mnt/usb/sbin/mfsmaster restart
}
# 根据参数选择调用
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: $0 start|stop|restart"
exit 1
esac
exit 0
[root@server1 mfs]#chmod 755/etc/init.d/mfsmaster
用来安装metalogger 的主机,在性能上应该比master 强大(至少有更多的内存)。一旦主控服务器master 失效,只要导入changelogs 到元数据文件,备份服务器metalogger将能接替发生故障的master,备份服务器Metalogger安装跟主控服务器master 安装非常类似。其安装命令如下:
1、 创建组mfs
#groupadd mfs
2、创建用户mfs
#useradd -g mfs mfs
3、切换目录
#cd /usr/src
4、解包归档文件
#tar -zxvf mfs-1.6.15.tar.gz
5、切换目录
#cd mfs-1.6.15
6、配置
#./configure --prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib --with-default-user=mfs \
--with-default-group=mfs --disable-mfschunkserver --disable-mfsmount
7、编译及安装
#make
#make install
8、产生配置文件
#cd /etc
#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
类似地,修改/etc/hosts 文件,增加下面的行:
10.1.27.38 mfsmaster
现在,我们来试着运行备份服务mfsmetaloger:
#/usr/sbin/mfsmetalogger start
在一个生产环境里,我们应当设置自动启动脚本,以便操作系统重新启动时,MooseFS
mfsmetalogger服务也能自动运行。
在每个chunk server 主机上执行下面的命令:
#groupadd mfs
#useradd -g mfs mfs
#cd /usr/src
#tar -zxvfmfs-1.6.15.tar.gz
#cd mfs-1.6.15
#./configure--prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib--with-default-user=mfs \
--with-default-group=mfs--disable-mfsmaster
#make
#make install
准备chunk server 服务所需的配置文件:
#cd /etc/
#cpmfschunkserver.cfg.dist mfschunkserver.cfg
#cp mfshdd.cfg.distmfshdd.cfg
为了测试这个安装,我们保留mfschunkserver.cfg文件不做任何改动;如果读者想了解
配置文件mfschunkserver.cfg 更详细的信息,请查看手册页 (man
mfschunkserver.cfg)。
在配置文件mfshdd.cfg 中,我们给出了用于客户端挂接MooseFS 分布式文件系统根分区所
使用的共享空间位置。建议在chunk server上划分单独的空间给 MooseFS 使用,这样做的好处
是便于管理剩余空间。此处我们假定要使用两个共享点/mnt/mfschunks1和
/mnt/mfschunks2,为此,我们在mfshdd.cfg 加入下面的文本行:
/mnt/mfschunks1
/mnt/mfschunks2
在启动chunk server 前,需确保用户mfs 有权限读写将要被挂接的分区(因为chunk server 运
行时要在此创建一个.lock 的文件):
#chown -R mfs:mfs/mnt/mfschunks1
#chown -R mfs:mfs/mnt/mfschunks2
类似地,修改/etc/hosts 文件,增加下面的行:
10.1.27.38 mfsmaster
利用双热备虚拟IP来接管mfsmaster服务
开始启动chunk server:
#/usr/sbin/mfschunkserverstart
为了挂接基于MooseFS 分布式文件,客户端主机必须安装FUSE 软件包( fuse 版本号至少2.6,推荐使用版本号大于2.7.2 的fuse)。如果系统没有安装fuse,你必须手动对其进行安装。
#cd /usr/src
#tar -zxvffuse-2.8.3.tar.gz
#cd fuse-2.8.3
#./configure
#make
#make install
安装客户端软件 mfsmount 的步骤:
#cd /usr/src
#tar -zxvfmfs-1.6.15.tar.gz
#cd mfs-1.6.15
#./configure--prefix=/usr --sysconfdir=/etc \
--localstatedir=/var/lib--with-default-user=mfs \
--with-default-group=mfs--disable-mfsmaster \
--disable-mfschunkserver
#make
#make install
修改文件/etc/hosts ,增加如下的文本行:
10.1.27.38 mfsmaster
假定客户端的挂接点是/mnt/mfs,我们将以下面的指令来使用MooseFS
1、 创建挂接点
#mkdir -p /mnt/mfs
2、开始挂接操作
#/usr/bin/mfsmount/mnt/mfs -H mfsmaster
执行命令df �Ch | grep mfs 检查分区情况,可能的输出如下:
/storage/mfschunks/mfschunks1
2.0G 69M 1.9G 4%/mnt/mfschunks1
/storage/mfschunks/mfschunks2
2.0G 69M 1.9G 4%/mnt/mfschunks2
mfs#mfsmaster:94213.2G 0 3.2G 0% /mnt/mfs
对mfscgiserv的使用Mfscgiserv是用python编写的一个web服务器,它的监听端口是9425,
可以利用:/mnt/mfs/sbin/mfscgiserv来启动,用户利用浏览器就可全面监控所有客户挂接,chunkserver及masterserver,客户端的各种操作等等,绝对是个好工具。
在任何一台装有浏览器的机器上都可以查看:http://10.1.27.38:9425
在MooseFS 挂接点下创建目录folder1,在该目录,我们将以一个副本的方式存放文件 (设置goal=1):
#mkdir-p /mnt/mfs/folder1
再在挂接点创建第2 个目录 folder2, 在该目录,我们将以两个个副本的方式存放文件(设置goal=2):
#mkdir-p /mnt/mfs/folder2
使用命令mfssetgoal �Cr 设定目录里文件的副本数:
1、副本数为1
#mfssetgoal-r 1 /mnt/mfs/folder1
/mnt/mfs/folder1:
inodeswith goal changed: 0
inodeswith goal not changed: 1
inodeswith permission denied: 0
2、副本数为2
#mfssetgoal-r 2 /mnt/mfs/folder2
/mnt/mfs/folder2:
inodeswith goal changed: 0
inodeswith goal not changed: 1
inodeswith permission denied: 0
拷贝同一个文件到两个目录:
cp/usr/src/mfs-1.6.15.tar.gz /mnt/mfs/folder1
cp/usr/src/mfs-1.6.15.tar.gz /mnt/mfs/folder2
命令mfschunkfile 用来检查给定的文件以多少副本数来存储。对应目录folder1 来说,
有一个副本存储在一个chunk 里:
#mfscheckfile/mnt/mfs/folder1/mfs-1.6.15.tar.gz
/mnt/mfs/folder1/mfs-1.6.15.tar.gz:
1copies: 1 chunks
而在目录folder2 中,文件 mfs-1.6.15.tar.gz 是以两个副本保存的:
#mfscheckfile/mnt/mfs/folder2/mfs-1.6.15.tar.gz
/mnt/mfs/folder2/mfs-1.6.15.tar.gz:
2copies: 1 chunks
附加信息。当所有的组件被安装到同一个物理主机的时候,即便设定了goal=2 来到达保存两个副本的目的,但你可能看到的只是一个副本而已―这是合理的,尽管有两个磁盘,但它只是一个chunk server 啊!
1.heartbeat与drbd的集成
DRBD的主从的切换依赖与heartbeat的服务,所以集成的关键点在于定义Initdrbd的脚本文件的定义和heartbeat的服务定义文件/etc/ha.d/resource.d。如server1 Initdrbd 就是集成DRBD和heartbeat。
2.heartbeat与MFS的集成
与DRBD一样,mfsmaster的脚本文件定义与heartbeat的服务定义文件/etc/ha.d/resource.d中即可。
3.drbd 与mfs 的集成
在主服务器中,必须把MFS的安装文件全部安装到drbd的挂载目录中去,安装到块设备上去,所以在主从切换的时候,备份机器拿到安装环境和主的一样,那么通过同样的方式来启动MFS进程,达到切换切换启动MFS的目的。
1.两台server上启动DRBD,利用cat /proc/drbd 查看启动情况和网络状态
主机器上显示Primary/Secondary 备份机器上显示Secondary/Primary,启动成功
2.启动heartbeat,通过日志查看heartbeat包括关联的服务加载的情况,tail �Cf /var/log/ha_log/xxx.log
3.在主机器上Ps 的方式查看heartbeat 和MFS进程,确保服务启动,如果没有启动,可手动在启动一次。此时备份机器的mfs没有启动。
4.停止主服务的heartbeat,查看主服务的日志,发现所有的关联服务都会被关闭,包括drbd,mfs,vip等。
5.查看备份机器的日志,发现已经开始启动关联的服务,此时备份机器上cat /proc/drbd
出现Primary/Secondary 主机器上显示Secondary/Primary,说明DRBD切换成功,然后查看mfs是否启动,如果启动成功,恭喜您,高可用的MFS文件分布式系统已经搭建好了。