目录:
一.介绍
MFS是一个具有容错性的网络分布式文件系统,它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
MFS的组成:
元数据服务器(Master),元数据日志服务器(MetaLogger),数据存储服务器(Chunk Server),客户端(Client)。
元数据服务器 | 在整个体系中负责管理文件系统,维护元数据。所谓元数据记录的是整个分布式文件系统的变化,比如说记录文件存储在哪个主机,有多少个副本、每个文件大小多少、文件名字、文件被分成多少个块儿进行存储等信息,这些数据消耗的是服务器的内存资源,因此元数据不在于存储的数据有多大,而在于其数量。 |
---|---|
元数据日志服务器(MetaLogger) | 备份Master服务器的变化日志文件,当master服务器损坏,可以从日志服务器中取得文件恢复。 |
数据存储服务器(Chunk Server) | 真正存储数据的服务器,服务器越多,容量就越大,可靠性越高,性能越好。 |
客户端(Client) | 可以像挂载NFS一样 挂载MFS文件系统 |
二.MFS的部署
1.下载
首先需要配置自己的yum 源:
[root@server1 yum.repos.d]# vim MooseFS.repo
[MooseFS]
name=MooseFS
baseurl=http://ppa.moosefs.com/moosefs-3/yum/el7
gpgcheck=0
然后把yum 源传到三台虚拟机都有!
scp /etc/yum.repos.d/MooseFS.repo server2:/etc/yum.repos.d/
然后就可以直接下载所需要的包了:
[root@server1 yum.repos.d]# yum install moosefs-master moosefs-cgi moosefs-cgiserv moosefs-cli -y
下载不了的话,做解析。
vim /etc/resolv.conf
nameserver 114.114.114.114
在server2,3上只需要下载
yum install -y moosefs-chunkserver
2.master部署和启动
[root@server1 mfs]# vim /etc/hosts
添加server1的解析 172.25.1.1 server1 mfsmaster
[root@server1 mfs]# scp /etc/hosts server2:/etc/
[root@server1 mfs]# scp /etc/hosts server3:/etc/
[root@server1 mfs]# systemctl start moosefs-master.service %启动服务
root@server1 mfs]# netstat -antulp %查看开启的端口
[root@server1 mfs]# systemctl start moosefs-cgiserv.service %开启相关cgi服务(提供可视化界面)
[root@server1 mfs]# netstat -antulp
systemctl start moosefs-master.service
systemctl start moosefs-cgiserv.service
接着在网页访问:
172.25.1.1:9425
3.chunk server
前面说了,chunk server是真正存储数据的地方!
我们首先要划出来一个区域来提供存储
server2上操作:
添加一块儿10G的硬盘并设置分区、格式化文件系统,设置开机自动挂载
fdisk /dev/vdb
Command (m for help): n
Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
First sector (2048-20971519, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519):
Using default value 20971519
Partition 1 of type Linux and of size 10 GiB is set
Command (m for help): w
The partition table has been altered!
[root@server2 yum.repos.d]# mkfs.xfs /dev/vdb1 %格式化文件系统
[root@server2 yum.repos.d]# mkdir /mnt/chunk1 %创建挂载目录
[root@server2 yum.repos.d]# cd
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/ %更改存储的用户及用户组
[root@server2 ~]# blkid %查看设备uid,通过uid来设置开机自动挂载
[root@server2 ~]# vim /etc/fstab %设置开机自动挂载
查到的id是多少就写多少
UUID=a18fbb2f-cb4b-4c51-a659-cb58503860f6 /mnt/chunk1 xfs defaults 0 0
[root@server2 ~]# mount -a
[root@server2 ~]# df
[root@server2 ~]# systemctl start moosefs-chunkserver %启动服务
[root@server2 mfs]# ls
mfschunkserver.cfg mfschunkserver.cfg.sample mfshdd.cfg mfshdd.cfg.sample
[root@server2 mfs]# vim mfshdd.cfg %编辑配置文件,指定mfs存储文件
/mnt/chunk1 %添加这行内容
[root@server2 mfs]# systemctl reload moosefs-chunkserver.service %reload服务
刷新网页,查看:
在server3上:
mkdir /mnt/chunk2
chown mfs.mfs /mnt/chunk2/
systemctl start moosefs-chunkserver
cd /etc/mfs/
vim mfshdd.cfg
/mnt/chunk2 %添加这行内容
systemctl reload moosefs-chunkserver.service
然后刷新页面:
4.client
就是在自己的真机上操作:
[root@foundation1 mnt]# yum install -y moosefs-client-3.0.115-1.rhsystemd.x86_64.rpm %先配置好源,然后下载相应rpm包
[root@foundation1 mnt]# vim /etc/hosts %添加server1的mfsmaster解析
[root@foundation1 mnt]# cd /etc/mfs/
[root@foundation1 mfs]# ls
mfsmount.cfg mfsmount.cfg.sample
[root@foundation1 mfs]# vim mfsmount.cfg
/mnt/mfs
[root@foundation1 mfs]# cd
[root@foundation1 ~]# mkdir /mnt/mfs -p
[root@foundation1 ~]# mfsmount %挂载mfs存储
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation1 ~]# df
5.client端存储
[root@foundation1 ~]# cd /mnt/mfs/
[root@foundation1 mfs]# ls
[root@foundation1 mfs]# mkdir dir1
[root@foundation1 mfs]# mkdir dir2
[root@foundation1 mfs]# mfsgetgoal dir1 %因为有两个chunk server,因此默认存储的数据备份两份,server2和server3上各一份
dir1: 2
[root@foundation1 mfs]# mfsgetgoal dir2
dir2: 2
[root@foundation1 mfs]# mfsgetgoal dir1
dir1: 2
[root@foundation1 mfs]# mfssetgoal -r 1 dir1 %备份的份数可以自己设置
dir1:
inodes with goal changed: 1
inodes with goal not changed: 0
inodes with permission denied: 0
[root@foundation1 mfs]# mfsgetgoal dir1
dir1: 1
[root@foundation1 mfs]# cp /etc/passwd dir1/
[root@foundation1 mfs]# cp /etc/fstab dir2/
[root@foundation1 mfs]# cd dir1
[root@foundation1 dir1]# mfsfileinfo passwd %查看文件的存储分配信息
[root@foundation1 dir1]# cd ..
[root@foundation1 mfs]# cd dir2
[root@foundation1 dir2]# ls
fstab
[root@foundation1 dir2]# mfsfileinfo fstab
[root@server2 mfs]# systemctl stop moosefs-chunkserver
[root@foundation1 dir2]# mfsfileinfo fstab %当某个存储节点down掉之后,另外一台节点上的存储不会收到影响
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.1.2:9422 (status:VALID)
[root@foundation1 dir2]# cd ..
[root@foundation1 mfs]# cd dir1
[root@foundation1 dir1]# mfsfileinfo passwd
passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.1.2:9422 (status:VALID)
当把server2服务停掉后,再次执行会发现fstab只会复制一份了!
注意,若是启动失败:
因为虚拟机同时挂了,导致脑裂!
启动服务失败,执行
mfsmaster -a
mfsmaster stop
systemctl start moosefs-master
三.文件问题
1.文件的写入
mfs默认的单个chunk大小为50M,如果写入文件大于50M,则mfs会为其分配多个chunk来存储
在真机上操作:
可以看到我们直接写入一个200M的文件,那么会自动分为四个来储存!
[root@foundation1 mnt]# cd /mnt/mfs/
[root@foundation1 mfs]# ls
dir1 dir2
[root@foundation1 mfs]# cd dir2/
[root@foundation1 dir2]# ls
fstab
[root@foundation1 dir2]# dd if=/dev/zero of=bigfile bs=1M count=200
[root@foundation1 dir2]# mfsfileinfo bigfile
2.文件的恢复
[root@foundation1 mnt]# mkdir mfsmeta
[root@foundation1 mnt]# cd mfsmeta/
[root@foundation1 mfsmeta]# ls
[root@foundation1 mfsmeta]# mfsmount -m /mnt/mfsmeta/
再次查看垃圾箱中出现了文件!
[root@foundation1 mnt]# cd mfs
[root@foundation1 mfs]# cd dir1
[root@foundation1 dir1]# ls
passwd
[root@foundation1 dir1]# rm -rf passwd
[root@foundation1 mnt]# cd mfsmeta/
[root@foundation1 mfsmeta]# ls
撤销删除的文件:
cd trash/
ls
find -name *passwd*
cd 004/
ls
mv 00000004\|dir1\|passwd undel/
cd /mnt/mfs/dir1/
ls
四.存储类
master内存的开销主要取决于整个分布式文件系统中文件的数量而不是大小,cpu的消耗主要来源于用户的操作。为了更合理的利用系统资源,我们需要来创建存储类来对存储进行管理
1.添加chunk server节点e
和前面配置一样!
[root@server4 mfs]# yum install -y moosefs-chunkserver.x86_64
[root@server4 mfs]# vim mfshdd.cfg
[root@server4 mfs]# mkdir /mnt/chunk3
[root@server4 mfs]# vim /etc/hosts
[root@server4 mfs]# chown mfs.mfs /mnt/chunk3
[root@server4 mfs]# systemctl start moosefs-chunkserver
vim mfschunkserver.cfg
改为如下A
然后再server3上修改:
[root@server3 mfs]# vim mfschunkserver.cfg
然后再server2上修改:
[root@server2 mfs]# vim mfschunkserver.cfg
重启服务
systemctl reload moosefs-chunkserver
网页上查看
接着在真机上操作:
[root@foundation1 mfs]# cd dir2
[root@foundation1 dir2]# ls
[root@foundation1 dir2]# mfsscadmin create 2A class_2A %创建存储类,2A表示存两份,两份都在有标签A的节点上
[root@foundation1 dir2]# mfsscadmin create AB class_AB %AB表示存一份,在具有A和B标签的节点上
[root@foundation1 dir2]# mfsfileinfo fstab %查看文件的存储信息
[root@foundation1 dir2]# mfssetsclass class_2A fstab %设置文件的存储类
[root@foundation1 dir2]# mfsfileinfo bigfile
[root@foundation1 dir2]# mfssetsclass class_AB bigfile %设置文件的存储类
[root@foundation1 dir2]# mfsscadmin create A,B classAB %A,B表示存两份,一份在具有标签A的节点上,一份在具有标签B的节点上
[root@foundation1 dir2]# mfssetsclass classAB bigfile %设置文件的存储类
访问网页查看:
删除节点
[root@foundation1 dir2]# mfsscadmin delete class_AB
在server2,3,4上:
[root@server2 mfs]# vim mfschunkserver.cfg
LABELS = A S %更改标签
[root@server2 mfs]# systemctl reload moosefs-chunkserver.service
server3上:
[root@server3 mfs]# vim mfschunkserver.cfg
LABELS = A B S H %更改标签
[root@server3 mfs]# systemctl reload moosefs-chunkserver.service
server4上:
[root@server4 ~]# vim /etc/mfs/mfschunkserver.cfg
LABELS = A H %更改标签
[root@server4 ~]# systemctl reload moosefs-chunkserver.service
客户端:
[root@foundation1 dir2]# mfsscadmin create AS,BS class_ASBS %创建存储类
storage class make class_ASBS: ok
[root@foundation1 dir2]# ls
bigfile fstab
[root@foundation1 dir2]# mfssetsclass class_ASBS fstab %设置文件以指定存储类型存储
fstab: storage class: 'class_ASBS'
[root@foundation1 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.1.2:9422 (status:VALID)
copy 2: 172.25.1.3:9422 (status:VALID)
[root@foundation1 dir2]# mfsscadmin create BS,2A[S+H] class4
storage class make class4: ok
[root@foundation1 dir2]# mfssetsclass class4 fstab
fstab: storage class: 'class4'
[root@foundation1 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.1.2:9422 (status:VALID)
copy 2: 172.25.1.3:9422 (status:VALID)
copy 3: 172.25.1.4:9422 (status:VALID)
[root@foundation1 dir2]# mfsscadmin create -C 2AS -K AS,BS -A AH,BH -d 30 class5 %表示创建一个存储类class5,存储两份,在AS上,-K参数指定数据保留在AS和BS上各一份,-d指定30天后,-A指定迁移到AH和BH上
storage class make class5: ok
[root@foundation1 dir2]# mfssetsclass class5 fstab
fstab: storage class: 'class5'
[root@foundation1 dir2]# mfsfileinfo fstab
fstab:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.1.2:9422 (status:VALID)
copy 2: 172.25.1.3:9422 (status:VALID)
刷新网页访问: