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。