目前常见的分布式文件系统有很多种,例如我之前一篇文章里面提到的HadoopFastDFSMoosefsPNFS(Parallel NFS)、LustreTFSGFSHDFS等等一系列。在众多的分布式文件系统解决方案中,MFS是搭建比较简单、使用起来也不需要过多的修改web程序,非常方便。

MooseFS(MFS)是一个分布式存储的框架,其具有如下特性:

1.Free(GPL)

2.通用文件系统,不需要修改上层应用就可以使用(那些需要专门apidfs很麻烦)。

3.可以在线扩容,体系架构可伸缩性极强。

4.部署简单。

5.高可用,可设置任意的文件冗余程度(提供比raid1+0更高的冗余级别,而绝对不会影响读或者写的性能,只会加速!)

6.可回收在指定时间内删除的文件(“回收站”提供的是系统级别的服务,不怕误操作了,提供类似oralce 的闪回等高级dbms的即时回滚特性)

7.提供netappemcibm等商业存储的snapshot特性。(可以对整个文件甚至在正在写入的文件创建文件的快照)

8.google filesystem的一个c实现。

9.提供web gui监控接口。

10.提高随机读或写的效率。

11.提高海量小文件的读写效率。

 

MFS 文件系统结构:

包含 种角色:

1. 管理服务器managing server (master):负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝。

2. 元数据日志服务器 Metalogger server(Metalogger): 负责备份 master 服务器的变化日志文件,文件类型为changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作。

3. 数据存储服务器data servers (chunkservers):负责连接管理服务器,听从管理服务器调度,提供存储空间,并为客户提供数

据传输。

4.客户端client computers: 通过 fuse 内核接口挂接远程管理服务器上所管理的数据存储服务器,看起来共享的文件系统和本地 unix 文件系统使用一样的效果。

 

原理图

分布式文件系统MFS_第1张图片

分布式文件系统MFS_第2张图片

 

                                                                                   参考 moosefs.org

server4masterserver5server6chunk,instructorclient

 

server4

#yum  install -y rpm-build 

#cp mfs-1.6.27-5.tar.gz mfs-1.6.27.tar.gz

#rpmbuild -tb mfs-1.6.27.tar.gz

 分布式文件系统MFS_第3张图片

 

#cd rpmbuild/RPMS/x86_64/

#rpm -ivh mfs-master-1.6.27-4.x86_64.rpm mfs-cgi*   //mfs-cgi.x86-64是用于apache主机的cgi监控,如果你不用apache,可以不用安装的

#cd /etc/mfs

借用以.dist后缀命名的样例文件作为 MooseFS 主控服务器的目标配置文件

#cp mfsexports.cfg.dist mfsexports.cfg         

配置文件 mfsexports.cfg 指定那些客户端主机可以远程挂接 MooseFS 文件系统,以及授予挂接客户端什么样的访问权限。例如,我们指定只有 192.168.2.x 网段的主机可以以读写模式访问 MooseFS 的整个共享结构资源(/)。在配置文件 mfsexports.cfg 文件的第一行,先取消注释,然后把星号(*)改成 192.168.2.0/24,以便我们可以得到下面的文本行:

192.168.2.0/24
/
rw,alldirs,maproot=0


#cp mfsmaster.cfg.dist mfsmaster.cfg     

Mfsmaster.cfg 配置文件包含主控服务器 master 相关的设置,在这里我们暂时不打算对其进行修改。如果你想知道关于该配置文件更多的信息,请查看它的手册页(使用命令 man mfsmaster.cfg)。

#cp mfstopology.cfg.dist mfstopology.cfg    //

#chown nobody /var/lib/mfs    //mfs依赖nobody用户

#cd /var/lib/mfs       //mfs安装目录

#cp metadata.mfs.empty metadata.mfs

#cd /usr/share/mfscgi/

#chmod +x *.cgi

#vim /etc/hosts  绑定mfsmaster到172.25.0.4

#mfsmaster   //启动服务

#mfscgiserv     //Mfscgiserv是用python编写的一个web服务器,监听端口是9425。用户利用浏览器就可全面监控所有客户挂载、服务器状态、磁盘IO信息、客户端的各种操作等等

 

web上输入172.25.0.49425

 分布式文件系统MFS_第4张图片

 

#cd rpmbuild/RPMS/x86_64/

#scp mfs-chunkserver-1.6.27-4.x86_64.rpm 172.25.0.5~

#scp mfs-chunkserver-1.6.27-4.x86_64.rpm 172.25.0.6:~

#scp mfs-client-1.6.27-4.x86_64.rpm 172.25.0.1:~

server5

#vim /etc/hosts  绑定mfsmaster到172.25.0.4

#rpm -ivh mfs-chunkserver-1.6.27-4.x86_64.rpm 

#cd /etc/mfs/

#cp mfschunkserver.cfg.dist mfschunkserver.cfg

#cp mfshdd.cfg.dist mfshdd.cfg

#mkdir /var/lib/mfs

#chown nobody /var/lib/mfs

#cd /mnt

#mkdir chunk1  //设立共享点chunk1。chunk 以独占方式使用专门磁盘分区是非常必要的--这样做的好处是便于管理剩余空间。MooseFS 并不考虑其剩余空间能被另作他用。

#chown nobody chunk1/ 

#vim /etc/mfs/mfshdd.cfg

  /mnt/chunk1

#mfschunkserver   //启动chunkserver

分布式文件系统MFS_第5张图片

  

server6

同server5

#mfschunkserver

提示不能创建lock文件,是因为chunk2所有人不是nobody

#chown nobody /mnt/chunk2

#mfschunkserver

 

client端 instructor

#vim /etc/hosts  绑定mfsmaster到172.25.0.4

#yum install mfs-client-1.6.27-4.x86_64.rpm  -y

#cd /etc/mfs

#mv mfsmount.cfg.dist mfsmount.cfg

#vim mfsmount.cfg 

在最后加入

/mnt/mfs 

#cd /mnt

#mkdir mfs     //建立客户端挂接点

#chown nobody mfs/ -R

#cd mfs

#mfsmount

wKiom1eBOLKicWtUAABR_ykPpsI312.png-wh_50

 

#cd mfs 

#mkdir dir1

#mkdir dir2

#cd dir1

#cp /etc/passwd .

#mfsfileinfo passwd

wKioL1eBOnGzSRJGAABTkQckPpg525.png-wh_50

 显示文件只在server5上存储。mfs以块为单位存储,一般每块为64MB。

 

#mfsgetgoal .      //查看文件的冗余份数

wKiom1eBOwnj6eAJAAAbjsl9mEI387.png-wh_50

 

#cd ..

#mfssetgoal -r 2 dir2    //设置dir2下文件的冗余为2

wKioL1eBO1GzVKFaAABZNcn0v-Y056.png-wh_50

 

 

#cd dir2

#cp /etc/fstab .

#mfsfileinfo fstab

wKioL1eBO3Wgg0UaAABj1THxVaw403.png-wh_50

server5与server6各存了1份 

##dd if=/dev/zero of=file2 bs=1M count=200    需要4块来存储。


server6

#mfschunkserver stop

 

instructor

#mfsfileinfo file2

分布式文件系统MFS_第6张图片

 只有server5开启chunk


server6

#mfschunkserver   再启动

 

instructor

#mfsfileinfo file2

分布式文件系统MFS_第7张图片

 

#cd /mnt/

#mkdir mfsmeta

#chown nobody /mnt/mfsmeta

#mfsmount -m /mnt/mfsmeta   //挂载到本地/mnt/mfsmeta

#cd /mnt/mfs/dir1

#dd if=/dev/zero of=file1 bs=1M count=100

#rm -fr *

#cd /mnt/mfsmeta/trash 

#mv 0000000D\|dir1\|file1 undel/    //恢复删除文件

#cd /mnt/mfs/dir1

wKioL1eBPcPRgJPuAACAgjUZrZg585.png-wh_50

文件恢复成功

 

#mfssettrashtim 1000 /mnt/mfs/dir1

   //设置删除后文件保留时间,单位s,设置过小的时间可能不生效。

 

#mfsgettrashtime /mmt/mfs/dir1

显示 dir1/:10

 

修改 linux 下最大文件描述符的限制:

在进行大量小文件写时,可能会出现了一个严重错误,有可能和操作系统文件描述符有关。操作

系统默认文件描述符为 1024.

1.6.26 版本默认为 100000

建议上线时,master 和 chunker 修改文件描述符系统级限制:它是限制所有用户打开文件描述符的总和,可以通过修改内核参数来更改该限制:

# vi /etc/sysctl.conf 添加

fs.file-max=102400

如果此值默认够大可以不用更改

# sysctl -p

命令使其生效。

用户级限制:只是修改用户级的最大文件描述符限制,也就是说每一个用户登录后执行的程序占

用文件描述符的总数不能超过这个限制。

# vi /etc/security/limits.conf

* - nofile 102400

保存退出后重新登录,其最大文件描述符已经被永久更改了。

与 file-max 参数相对应的还有 file-nr,这个参数是只读的,可以查看当前文件描述符的使用情况。

# sysctl -a|grep file

fs.file-nr = 12800 0 782554

fs.file-max = 782554

在 kernel 2.6 之前的版本中,file-nr 中的值由三部分组成,分别为:1.已经分配的文件句柄数,2.

已经分配单没有使用的文件句柄数,3.最大文件句柄数。但在 kernel 2.6 版本中第二项的值总为

0,这并不是一个错误,它实际上意味着已经分配的文件句柄无一浪费的都已经被使用了

file-max 的值是 linux 内核可以分配的最大文件句柄数。如果你看到了很多关于打开文件数已经达

到了最大值的错误信息,你可以试着增加该值的限制。file-max 的默认值大概是系统内存的 10%

(系统内存以 kb 计算)



停止 MooseFS

为了安全停止 MooseFS 集群,建议执行如下的步骤:

在所有客户端用 Unmount 命令先卸载文件系统(本例将是: umount /mnt/mfs)

停止 chunk server 进程: /usr/sbin/mfschunkserver stop

停止 metalogger 进程: /usr/sbin/mfsmetalogger stop

停止主控 master server 进程: /usr/sbin/mfsmaster stop