MooseFS 2.x 分布式文件系统部署手册
2015-05-06 by dongnan
简介
MFS (MooseFS) is a fault tolerant, network distributed file system.
- 官网地址: http://www.moosefs.org/
- Repo地址: http://ppa.moosefs.com/stable/yum/
2.X 版本
2014年7月1日,分布式文件系统 moosefs 2.0 发布,分为CE(社区版)和Pro(专业版)。
此版本支持在多个规则中运行多个 Master 服务器。其中一个规则是"leader",是给 ChunkServer 和客户端使用。每个运行的系统不会超过一个 leader。
示例使用CE版
- moosefs-ce-master
- moosefs-ce-cli
- moosefs-ce-chunkserver
- moosefs-ce-metalogger
- moosefs-ce-client
环境
操作系统: CentOS 6.6 amd64
配置
ChunkServer: 物理机 4Core CPU/16GB Mem/单磁盘 1TB/1GB NIC
Master: VM 4Core CPU/4GB Mem/100GB Disk/1GB NIC
Client: VM 4Core CPU/4GB Mem/50GB Disk/1GB NIC
IP
master: 172.27.244.69
client: 172.27.244.99
chunk1: 172.27.244.31
chunk2: 172.27.244.32
chunk3: 172.27.244.33
DNS
172.27.233.45 #可选
准备工作
配置 dns (可选)
添加私有域名 ".lan"
配置文件
# 编辑文件
vim named.conf
# 添加内容
zone "lan" {
                type master;
                file  "master/lan.db";
};
# 编辑文件
vim lan.db
# 添加内容
$TTL 600
@       IN      SOA     ns.lan root.lan. (
        2015042301
        3600
        600
        3600000
        1800 )
@               IN      NS      ns.lan.
@               IN      A       172.27.233.43
ns              IN      A       172.27.233.43
mfsmaster       IN      A       172.27.244.69    ;moosefs master1
mfsclient       IN      A       172.27.244.99    ;moosefs client1
chunk1          IN      A       172.27.244.31    ;moosefs chunk server1
chunk2          IN      A       172.27.244.32    ;moosefs chunk server1
chunk3          IN      A       172.27.244.33    ;moosefs chunk server1
全部机器均使用私有DNS (可选)
# 包括master,client,chunkserver
cat /etc/resolv.conf
nameserver 172.27.233.45
添加repo源
全部机器均需要添加:
# pki
wget http://ppa.moosefs.com/stable/yum/RPM-GPG-KEY-MooseFS -P /etc/pki/rpm-gpg/
# repo
wget http://ppa.moosefs.com/stable/yum/MooseFS.repo -P /etc/yum.repos.d/
关闭防火墙与selinux
全部机器均需要关闭:
# selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config && sestatus
# iptables
/etc/init.d/iptables stop && mv /etc/sysconfig/iptables /tmp/
部署Master
安装
yum -y install moosefs-ce-master
配置
配置文件模板放在/etc/mfs目录中并以后缀.dist结尾,如果不想使用默认配置可以修改配置文件取消或修改影响参数的注释或值,
配置文件中被注释了的参数将会使用mfs内建的默认值。
- mfsmaster.cfg包含了- Master的设置,你可以通过- man pages查看更多关于该文件的信息。
- mfsexport.cfg中指定了可以挂载文件系统的用户与权限。
默认配置文件与dist模板文件相同
diff mfsmaster.cfg mfsmaster.cfg.dist
diff mfsexports.cfg mfsexports.cfg.dist
mfsmaster.cfg
# 保持默认即可
mfsexports.cfg
# 编辑文件
vim /etc/mfsmfsexports.cfg
# 将  * / rw,alldirs,maproot=0 修改为类似如下:
172.27.244.0/24 / rw, alldirs, maproot=0
注意,指定只有 172.27.244.x可以使用 MooseFS 资源(/)的整个目录树权限为 read/write。
启动Master
/etc/init.d/mfsmaster start
# 设置开机启动
chkconfig mfsmaster on
安装 MooseFS CGI
MooseFS CGI monitor 接口用于用户观察和分析当前 MooseFS状态, 只需要安装在第一个启动的 Master 服务器上。
yum -y install moosefs-ce-cgiserv moosefs-ce-cgi
启动 CGI Monitor 后,可以通过浏览器查看当前 MooseFS 的状态。
/etc/init.d/mfscgiserv start
访问 http://your-ip:9425 可以查看信息,当前还没有关于 ChunkServer 的数据。

安装 MooseFS CLI
MooseFS 命令行接口工具,可以查看 MooseFS 的状态信息。
该工具拥有多个选项可以使用命令行来查看所有能在 MooseFS CGI上查看的的信息。通过 -h或 --help 开关查看所有选项和帮助。
yum -y install moosefs-ce-cli
使用示例
mfscli -SIN -H localhost

命令帮助
mfscli --help
mfscli 的 -SIN 选项可以显示与 CGI
部署ChunkServer
安装
yum -y install moosefs-ce-chunkserver
配置
可以通过命令查看更多关于 chunkserver的信息(man mfschunkserver.cfg)。
如果修改了 Master 的主机名,则还需修改mfschunkserver.cfg 中的 MASTER_HOST 为相同的值。
配置目录
cd /etc/mfs
mfschunkserver.cfg 配置文件
# 编辑文件
vim mfschunkserver.cfg
# 更改类似如下
MASTER_HOST = 172.27.244.69
# MooseFS master host, IP is allowed only in single-master installations (default is mfsmaster)
mfshdd.cfg 配置文件
此文件你需要指定 MooseFS 存储 chunks 使用的磁盘或分区,建议使用专门的磁盘或分区这样方便 MooseFS 管理磁盘剩余空间。
假定现在使用 /mfs/chunk1 位置
df -Th | tail -n1
/dev/sda5      ext4   889G   72M  844G   1% /mfs/chunk1
如果没有则需要创建这个目录
mkdir -p /mfs/chunk1
# 编辑文件
vim mfshdd.cfg
# 更改类似如下    
/mfs/chunk1
# 在启动 chunkserver 之前,还需要确定 mfs 有权限对这些分区进行写操作(为了创建lock 文件)
chown -R mfs:mfs /mfs/chunk1
启动ChunkServer
/etc/init.d/mfschunkserver start
# 设置开机启动
chkconfig mfschunkserver on
MFS客户端
安装客户端之前,首先需要安装 FUSE package(最低版本 2.6,建议不低于 2.7.2)。
安装
yum install fuse moosefs-ce-client
挂载
假定挂载点为/mnt/mfs 目录
mkdir /mnt/mfs
mfsmount /mnt/mfs -H 172.27.244.69
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
验证
df -Th
Filesystem           Type      Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root
                     ext4      7.3G  1.3G  5.7G  19% /
tmpfs                tmpfs     1.9G     0  1.9G   0% /dev/shm
/dev/xvda1           ext4      477M   48M  404M  11% /boot
/dev/xvdb1           ext4       50G   52M   47G   1% /data
172.27.244.69:9421   fuse.mfs  2.7T     0  2.7T   0% /mnt/mfs
注意,fuse.mfs 关键字。 
使用
创建目录 folder1 设置 goal=1 则该目录中存放1份文件拷贝
mkdir -p /mnt/mfs/folder1
创建目录 folder2 设置 goal=2 这样就可以在该目录中存放2份文件拷贝
mkdir -p /mnt/mfs/folder2
目录的拷贝数量设置命令
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
mfssetgoal -r 2 /mnt/mfs/folder2/
/mnt/mfs/folder2/:
inodes with goal changed:               2
inodes with goal not changed:           0
inodes with permission denied:          0
测试
创建一个文件
dd if=/dev/zero of=testfile bs=1M count=100
然后将同一份文件分别复制到两个目录中
cp testfile /mnt/mfs/folder1/
cp testfile /mnt/mfs/folder2/
通过 mfscheckfile 命令查看指定文件的拷贝数量
# folder1 中,在一个 chunk 中只有一个拷贝:
mfscheckfile /mnt/mfs/folder1/testfile
/mnt/mfs/folder1/testfile:
chunks with 1 copy:              2
# folder2 中,文件有两个拷贝
mfscheckfile /mnt/mfs/folder2/testfile
/mnt/mfs/folder2/testfile:
chunks with 2 copies:            2
注意事项
- 当MFS的所有组件都运行在同一台设备上时,即使设置goal=2也只会保存一个文件拷贝。
- 即使这台 ChunkServer上有两个磁盘,也会出现这种特有的情况。
- 可以访问官网查看更多的使用和命令信息。
- 建议访问常见问题FAQ。