在服务器较多,且服务器上硬盘剩余空间较大的状况下。为了更充分的利用资源,咱们可使用分布式的文件系统将这些空间整合起来。而在众多的分布的文件系统中,笔者通过反正的比较和尝试最终选择了moosefs(如下简称mfs).
为何选择mfs而不是其它的什么系统呢?
1.
安装简单方便(易用性)。这点是其它系统所不及的。你只须要像安装普通的服务那样安装mfs,不须要修改内核!
2.
扩容方便(高可靠性)。mfs群集启动之后,你能够很方便的向群集里添加或者删除服务器而不用中止服务,且不影响服务的正常运行!
3.
管理方便(可操做性)。你能够很方便的动态调整集群运行参数,即时生效而不用重启服务!
如今来看一下mfs系统的组成部分吧:
1.master
。master负责在整个系统中管理数据。是整个系统的维护者。可是它有个弱点就是master只有一个!也就是说若是master坏掉,整个系统将中止工做!不过这算不上致命弱点,由于咱们作好数据备份之后,恢复master是很简单的事。
2.chunkserver
。chunkserver是mfs系统中的数据存储者。真正的用户数据按照算法被分红chunk,并分发到各个chunkserver上。这样就保存了数据的安全性。
3.client
。凡是使用mfs文件系统的机器均可以被称为client。client是mfs系统的使用者。当client把mfs文件系统挂载到本机之后,它能够像使用一个普通的磁盘分区同样,来使用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
系统的软件包,总共才300多k,对于一个用来完成分布式文件系统的软件来讲只能用短小精悍来形容。
1.
下载
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
配置文件所在的目录包括master和chunkserver
share:
这个就不用说了,帮助文件目录
var:
数据文件目录。
嘿嘿,目录给人的感受就是清析明了。一下子再配置一下,你就会感受配置也是so easy。在开始配置之前我们说下实验环境,免得咱们言之无物:
master:192.168.1.247
chunkserver1:192.168.1.248
chunkserver2:192.168.1.249
client:
三台机器哪一个均可以了
J
mfs
并不严格要求你说master和chunkserver以及client不能跑在同一台器,而实际状况笔者也确实这样试过没啥问题。可是考虑的系统的安全稳定仍是建议master单独跑一台,并作好备份,chunkserver和client就能够看具体需求了。
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
去掉#,把*换成master的ip,就这么简单,保存,退出就能够了。
这里顺便说一下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.cfg和mfshdd.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,有时间必定要好好看看哟~