在服务器较多,且服务器上硬盘剩余空间较大的情况下。为了更充分的利用资源,我们可以使用分布式的文件系统将这些空间整合起来。而在众多的分布的文件系统中,笔者经过反正的比较和尝试最终选择了moosefs(以下简称mfs).
为什么选择mfs而不是其它的什么系统呢?
    1. 安装简单方便(易用性)。这点是其它系统所不及的。你只需要像安装普通的服务那样安装mfs,不需要修改内核!
    2. 扩容方便(高可靠性)mfs群集启动以后,你可以很方便的向群集里添加或者删除服务器而不用停止服务,且不影响服务的正常运行!
    3. 管理方便(可操作性)。你可以很方便的动态调整集群运行参数,即时生效而不用重启服务!
 
现在来看一下mfs系统的组成部分吧:
    1.master master负责在整个系统中管理数据。是整个系统的维护者。但是它有个弱点就是master只有一个!也就是说如果master坏掉,整个系统将停止工作!不过这算不上致命弱点,因为我们做好数据备份以后,恢复master是很简单的事。
    2.chunkserver chunkservermfs系统中的数据存储者。真正的用户数据按照算法被分成chunk,并分发到各个chunkserver上。这样就保存了数据的安全性。
    3.client 。凡是使用mfs文件系统的机器都可以被称为clientclientmfs系统的使用者。当clientmfs文件系统挂载到本机以后,它可以像使用一个普通的磁盘分区一样,来使用mfs.
 
安装fuse
    我们首先 安装fuse。为什么要安装fuse呢?因为mfs的客户端是基于fuse写的,编译客户端工具的时候要用到它。所以,如果你打算在这台机器使用mfs的客户端。你必须先安装fuse。另外,笔者在安装mfs的时候,fuse的最新版本为2.8,但是用了最新的版本以后modprobe fuse的时候提示找不到。最后用了2.7的版本才没问题,使用过程中也很正常。所以我们还是基于2.7
    1. 下载
http://jaist.dl.sourceforge.net/project/fuse/fuse-2.X/ 2.7.4 /fuse-2.7.4.tar.gz
2. 解压
tar zxvf fuse- 2.7.4 .tar.gz
3. 编译安装
cd fuse
./configure --prefix=/usr&&make &&make install
解释一下: prefix指定目录,我们安装到/usr下,这样fuse的库文件就自动安装到了/usr/lib,免去了我们手工指定链接库的麻烦。
 
安装mfs系统
mfs 系统的软件包,总共才300k,对于一个用来完成分布式文件系统的软件来说只能用短小精悍来形容。
1. 下载
wget http://www.moosefs.com/files/mfs-1.5.12.tar.gz
2. 解包
tar zxvf mfs- 1.5.12 .tar.gz
3. 创建用户mfs,默认使用的用户是nobody,同时也不建议使用root用户来运行mfs系统,所以我们添加一个普通用户。
useradd mfs -M -s /sbin/nologin
4. 编译安装
cd mfs- 1.5.12
./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --enable-mfsmount&&make&&make install
    解释一下:prefix指定安装的目录;接下来指定的是运行mfs的用户和组;--enable-mfsmount是强制编译mfs的客户端工具mfsmount;用这样的编译参数编出来的mfs系统,master,chunkserver,client三个工具都包含了。笔者个人比较偏好这种方式。当然如果你的服务器分工很明确,master只编译master的包,chunkserver只编译chunkserver的包也可以:
--disabe-mfsmater 这样就禁用了master;
--disable-mfschunkserver 就禁用了chunkserver;
--disable-mfsmount 这样就强制禁用了mfsmount,默认情况下是检测到已经安装fuse才自动安装mfsmount
 
配置mfs系统
    mfs 系统配置起来特别简单,下面就由我来向您展示一下mfs的神奇魅力。先简单说一下mfs的目录结构。如果您也和我使用一样的编译参数。那么进入/usr/local/mfs你会发现bin,etc,sbin,share,var几个简洁的目录。
bin:mfs 客户端工具的目录
sbin:mfs 服务端工具目录
etc:mfs 配置文件所在的目录包括masterchunkserver
share: 这个就不用说了,帮助文件目录
var: 数据文件目录。
    嘿嘿,目录给人的感觉就是清析明了。一会儿再配置一下,你就会感觉配置也是so easy。在开始配置以前咱们说下实验环境,省得我们言之无物:
master:192.168.1.247
chunkserver1:192.168.1.248
chunkserver2:192.168.1.249
client: 三台机器哪个都可以了 J
mfs 并不严格要求你说masterchunkserver以及client不能跑在同一台器,而实际情况笔者也确实这样试过没啥问题。但是考虑的系统的安全稳定还是建议master单独跑一台,并做好备份,chunkserverclient就可以看具体需求了。
 
master 配置
    用到的文件etc下的mfsmaster.cfg,用到的工具sbin下的mfsmaster。先来看mfsmaster.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
 
# LOCK_FILE = /var/run/mfs/mfsmaster.pid
# DATA_PATH = /usr/local/mfs/var/mfs
# SYSLOG_IDENT = mfsmaster
 
# BACK_LOGS = 50
 
# REPLICATIONS_DELAY_INIT = 300
# REPLICATIONS_DELAY_DISCONNECT = 3600
 
# MATOCS_LISTEN_HOST = *
# MATOCS_LISTEN_PORT = 9420
 
# MATOCU_LISTEN_HOST = *
# MATOCU_LISTEN_PORT = 9421
 
# CHUNKS_LOOP_TIME = 300
# CHUNKS_DEL_LIMIT = 100
# CHUNKS_REP_LIMIT = 15
选项似乎挺多,其实我们第一次可以只关注一句
# MATOCS_LISTEN_HOST = * 改成MATOCS_LISTEN_HOST = 192.168.1.247
去掉#,*换成masterip,就这么简单,保存,退出就可以了。
这里顺便说一下mfs的配置文件,虽然默认都加着#也就是说不起作用,但是未编辑过的配置文件里记录的参数,也是系统未配置时运行的默认参数,这点注意。
    启动master
[root@lvs etc]#/usr/loca/mfs/sbin/ mfsmaster
就可以了。可以去系统日志看下master的运行情况。
停止master的指令
[root@lvs etc]#/usr/loca/mfs/sbin/ mfsmaster -s
小技巧:如果觉得每次都输这么长的命令麻烦的话,可以把它加入到path:
export PATH=/usr/local/mfs/sbin:/usr/local/mfs/sbin:$PATH
    以后再控制master直接用mfsmaster或者mfsmaster -s是不是很方便?
 
chunkserver 配置
    用到的文件etc下的mfschunkserver.cfgmfshdd.cfg,用到的工具sbin下的mfschunkserver。先来看mfschunkserver.cfg
# WORKING_USER = mfs
# WORKING_GROUP = mfs
 
# DATA_PATH = /usr/local/mfs/var/mfs
# LOCK_FILE = /var/run/mfs/mfschunkserver.pid
# SYSLOG_IDENT = mfschunkserver
 
# BACK_LOGS = 50
 
# MASTER_RECONNECTION_DELAY = 30
 
# MASTER_HOST = mfsmaster
# MASTER_PORT = 9420
 
# MASTER_TIMEOUT = 60
 
# CSSERV_LISTEN_HOST = *
# CSSERV_LISTEN_PORT = 9422
 
# CSSERV_TIMEOUT = 60
 
# CSTOCS_TIMEOUT = 60
 
# HDD_CONF_FILENAME = /usr/local/mfs/etc/mfshdd.cfg
    嘿嘿,选项比mfsmaster.cfg不少,不过不怕,我们只关心下面一行。
# MASTER_HOST = mfsmaster 改成MASTER_HOST = 192.168.1.247
    再来看mfshdd.cfg。顾名思义就是mfs的硬盘配置。
/mnt/hd1
/mnt/hd2
/mnt/hd3
/mnt/hd4
    把这四行都删除了吧,因为在我们机器上不存在。这里我只写了一行/data,这个分区在我机器上是一块单独的硬盘,专门用来存放数据的。记得重新定义一下/data的权限哟,要不mfs操作不了。
    [root@lvs etc]#chown -R mfs.mfs /data
    启动chunkserver
    [root@lvs etc]#chunkserver
    停止chunkserver
[root@lvs etc]#chunkserver -s
你可以去系统日志看,chunkserver是不是正常起动。(同样的方法配置第二台机器)
OK, 这样的话,我们就成功启动了一个由一个master和两个chunkserver组成的分布式系统。为了达到这个系统的开机启动我们可以把下面这两条加到/etc/rc.local(根据实际情况添哟)
/usr/local/mfs/sbin/mfsmaster
/usr/local/mfs/sbin/mfschunkserver
 
client 配置
    嘿嘿,客户端严格来说,已经算不上配置了,充其量也就是一个应用。客户端可以是任意一台需要使用分布式系统,并且安装了mfsmount的服务器。对于客户端来说mfs只是挂载方式不一样,挂载完了和普通的硬盘分区没啥区别。到底怎么挂载呢?
    用到的命令mfsmount,这个工具位于bin目录下。
[root@web2 etc]# mkdir /mnt/mfs
[root@web2 etc]# /usr/local/mfs/bin/mfsmount -h 192.168.1.247
[root@web2 etc]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/sda1 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/sdb1 on /data type ext3 (rw)
MFS on /mnt/mfs type fuse (rw,allow_other,default_permissions)
mfsmount 这个命令常用的参数就两个:
-h 指定服务器。
-w 指定本地挂载目录。默认用/mnt/mfs
 
 
以后就可以对/mnt/mfs这个目录进行正常的读写了,你所写入的任何东东都会分布到其它的机器上,以保证数据的安全性。在/usr/local/mfs/bin目录还有一些其它的工具,帮你了解mfs运行情况,并设定mfs,有时间一定要好好看看哟~