moosefs简单入门

最近看了下又拍云存储和七牛云存储的演讲,觉得云存储是个好高端的东西,一般性的小公司也没有用到的机会,一个NFS或者NAS完全解决问题。正好,我们线上有使用到moosefs这个分布式文件系统,这两天就简单的看了下,做个总结,先挖个坑,以后再填。

试验环境:
Centos 6.4,虚拟机,如下:
主控服务器 Master server: 192.168.188.130
主控备份服务器 Metalogger server: 192.168.188.131
存储块服务器 Chunk servers: 192.168.188.132
客户端主机(clients): 192.168.188.133

所有的测试机上都需要下载mfs这个源码包:
wget http://pro.hit.gemius.pl/hitredir/id=.WCbG2t.7Ln5k1s3Q9xPg8cPfX.wVMc5kyXfrKcJTDH.c7/url=moosefs.org/tl_files/mfscode/mfs-1.6.27-5.tar.gz

原理图:

读:

写:

一: moosefs部署安装

######主服务器Master Server 安装:######
[root@puppet ~]# useradd mfs
[root@puppet ~]# tar zxvf mfs-1.6.27-5.tar.gz
[root@puppet mfs-1.6.27]#./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfschunkserver
[root@puppet mfs-1.6.27]# make && make install

复制配置文件,得到master所需的配置文件
[root@puppet ~]# cd /usr/local/mfs/etc/mfs/
[root@puppet mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg
[root@puppet mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
[root@puppet mfs]# cp mfsexports.cfg.dist mfsexports.cfg

首次安装master时,会自动生成一个名为metadata.mfs.empty的元数据文件metadata,该文件是空的。MooseFS master 运必须有文件
metadata.mfs,  这个文件是从 metadata.mfs.empty 改名而来
[root@puppet ~]# cd /usr/local/mfs/var/mfs/
[root@puppet ~]#cp metadata.mfs.empty metadata.mfs

修改/etc/hosts文件,以绑定主机名mfsmaster与ip地址192.168.188.130
[root@puppet ~]#echo "192.168.188.130 mfsmaster" >> /etc/hosts

运行master服务
[root@puppet ~]# /usr/local/mfs/sbin/mfsmaster start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... file not found
if it is not fresh installation then you have to restart all active mounts !!!
exports file has been loaded
mfstopology configuration file (/usr/local/mfs/etc/mfstopology.cfg) not found - using defaults
loading metadata ...
create new empty filesystemmetadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly

为了监控moosefs的当前运行状态,我们可以运行cgi服务,这样就可以用浏览器查看整个moosefs的运行情况
执行命令:/usr/local/mfs/sbin/mfscgiserv
浏览器访问:http://192.168.188.130:9425


######备份服务器 Backup server (metalogger) 安装######
[root@agent ~]# useradd mfs
[root@agent ~]# tar zxvf mfs-1.6.27-5.tar.gz
[root@agent ~]# cd mfs-1.6.27
[root@agent mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfschunkserver
[root@agent mfs-1.6.27]# make && make install

修改/etc/hosts文件,以绑定主机名mfsmaster与ip地址192.168.188.130
[root@agent ~]# echo "192.168.188.130 mfsmaster" >> /etc/hosts

产生配置文件:
[root@agent ~]# cd /usr/local/mfs/etc/mfs/
[root@agent mfs]# cp mfsmetalogger.cfg.dist mfsmetalogger.cfg

启动mfsmetalogger:
[root@agent ~]# /usr/local/mfs/sbin/mfsmetalogger start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfsmetalogger modules ...
mfsmetalogger daemon initialized properly
[root@agent ~]#


######存储块服务器 Chunk servers 安装######
[root@agent2 ~]# useradd mfs
[root@agent2 ~]# tar zxvf mfs-1.6.27-5.tar.gz
[root@agent2 ~]# cd mfs-1.6.27
[root@agent2 mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmount --disable-mfsmaster
[root@agent2 mfs-1.6.27]# make && make install

准备chunk server所需的配置文件:
[root@agent2 ~]# cd /usr/local/mfs/etc/mfs/
[root@agent2 mfs]# ls
mfschunkserver.cfg.dist  mfshdd.cfg.dist
[root@agent2 mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@agent2 mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[root@agent2 mfs]# vim mfshdd.cfg
[root@agent2 mfs]# vim mfshdd.cfg
[root@agent2 mfs]# cat mfshdd.cfg
# mount points of HDD drives
#
/mnt/hd1
/mnt/hd2
#etc.
[root@agent2 mfs]# mkdir /mnt/hd1
[root@agent2 mfs]# mkdir /mnt/hd2
[root@agent2 mfs]# chown -R mfs:mfs /mnt/hd1
[root@agent2 mfs]# chown -R mfs:mfs /mnt/hd2

修改/etc/hosts文件,以绑定主机名mfsmaster与ip地址192.168.188.130
[root@agent2 mfs]# echo "192.168.188.130 mfsmaster" >> /etc/hosts

启动mfschunkserver服务:
[root@agent2 mfs]# /usr/local/mfs/sbin/mfschunkserver start
working directory: /usr/local/mfs/var/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: data folders '/mnt/hd2/' and '/mnt/hd1/' are on the same physical device (could lead to unexpected behaviours)
hdd space manager: path to scan: /mnt/hd2/
hdd space manager: path to scan: /mnt/hd1/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
[root@agent2 mfs]#


######客户端 User’s computers 安装:######
首先,安装fuse软件包
[root@localhost ~]# yum -y install fuse fuse-devel fuse-libs

安装客户端软件mfsmount:
[root@localhost ~]# useradd mfs
[root@localhost ~]# tar zxvf mfs-1.6.27-5.tar.gz
[root@localhost ~]# cd mfs-1.6.27
[root@localhost mfs-1.6.27]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs --disable-mfsmaster --disable-mfschunkserver
[root@localhost mfs-1.6.27]# make && make install

修改/etc/hosts文件,以绑定主机名mfsmaster与ip地址192.168.188.130
[root@localhost ~]# echo "192.168.188.130 mfsmaster" >> /etc/hosts

假设客户端的挂载点是/mnt/mfs,我们将以下面的指令使用moosefs分布式共享文件系统:
root@localhost ~]# mkdir -p /mnt/mfs
[root@localhost ~]# /usr/local/mfs/bin/mfsmount /mnt/mfs/ -H mfsmaster
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
[root@localhost ~]# df -h
文件系统           容量  已用  可用 已用%% 挂载点
/dev/sda2              19G  2.5G   16G  15% /
tmpfs                 236M     0  236M   0% /dev/shm
/dev/sda1             291M   33M  243M  12% /boot
mfsmaster:9421         30G     0   30G   0% /mnt/mfs
[root@localhost ~]#

二: moosefs简单使用介绍

moosefs基础用法:
在moosefs挂载目录下创建目录folder1,我们将以一个副本的方式存放文件(设置goal=1)
[root@localhost ~]# mkdir -p /mnt/mfs/folder1

在moosefs挂载目录下创建目录folder2,我们将以两个副本的方式放文件(设置goal=2)
[root@localhost ~]# mkdir -p /mnt/mfs/folder2

mfssetgoal -r 设置目录里文件的副本数:
1.副本数为1
[root@localhost ~]# /usr/local/mfs/bin/mfssetgoal -r 1 /mnt/mfs/folder1
/mnt/mfs/folder1:
 inodes with goal changed:               0
 inodes with goal not changed:           1
 inodes with permission denied:          0

副本数为2:
[root@localhost ~]# /usr/local/mfs/bin/mfssetgoal -r 2 /mnt/mfs/folder2
/mnt/mfs/folder2:
 inodes with goal changed:               1
 inodes with goal not changed:           0
 inodes with permission denied:          0
[root@localhost ~]#

拷贝同一个文件到两个目录:
[root@localhost ~]# cp mfs-1.6.27-5.tar.gz /mnt/mfs/folder1
[root@localhost ~]# cp mfs-1.6.27-5.tar.gz /mnt/mfs/folder2

mfscheckfile用来检查给定的文件以多少副本数来存储:
对应目录folder1来说,有一个副本存储在一个check里:
[root@localhost ~]# /usr/local/mfs/bin/mfscheckfile /mnt/mfs/folder1/mfs-1.6.27-5.tar.gz
/mnt/mfs/folder1/mfs-1.6.27-5.tar.gz:
 chunks with 1 copy:              1

而在folder2里,对mfs-1.6.27-5.tar.gz是以两个副本保存的:
[root@localhost ~]# /usr/local/mfs/bin/mfscheckfile /mnt/mfs/folder2/mfs-1.6.27-5.tar.gz
/mnt/mfs/folder2/mfs-1.6.27-5.tar.gz:
 chunks with 1 copy:              1
[root@localhost ~]#

注意:当所有的组件被安装到同一个物理主机的时候,即便设定了goal=2来达到保存两个副本的目的,但你看到的只有一个副本而已,这是合理的,尽管有两个磁盘,但它只是一个chunk server.
启动moosefs:
1.启动mfsmaster 进程(/usr/local/mfs/sbin/mfsmaster start)
2.启动所有的mfschunkserver 进程(/usr/local/mfs/sbin/mfschunkserver start)
3.启动mfsmetalogger 进程(如果配置了mfsmetalogger)(/usr/local/mfs/sbin/mfsmetalogger start)
4.当所有的chunkservers 连接到MooseFS master 后,任何数目的客户端可以利用mfsmount 去挂接被export 的文件系统。(可以通过检查master 的日志或是CGI 监视器来查看是否所有的chunkserver被连接)。

停止moosefs:
1.在所有客户端先用umount命令卸载文件系统(本例是:umount /mnt/mfs)
2.停止chunk server 进程:/usr/local/mfs/sbin/mfschunkserver stop
3.停止metalogger进程:/usr/local/mfs/sbin/mfsmetalogger stop
4.停止master server进程:/usr/local/mfs/sbin/mfsmaster stop

自言自语:

刚开始觉得分布式文件系统是个高大上的东西,会很难,等自己慢慢的看了下文档,再跑个测试出来,发现和使用NFS的难度也没太大差距。很多时候我们都是被自己给吓到了,行与不行,先测试下再说呢?知行合一...

参考资料:

官网:http://www.moosefs.org/

田逸:http://www.moosefs.org/tl_files/manpageszip/moosefs-step-by-step-tutorial-cn-v.1.1.pdf

博客:https://www.centos.bz/2013/05/distributed-storage-moosefs-setup/

田逸:http://sery.blog.51cto.com/10037/147756