MFS分布式文件系统

################相关概念

(1)MFS是什么?
MooseFS[MFS]是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。
官网地址:http://www.moosefs.com/
(2)MFS特性有那些?
1. Free(GPL)
2. 通用文件系统,不需要修改上层应用就可以使用
3. 可以在线扩容,体系架构可伸缩性极强。
4. 部署简单。
5. 高可用,可设置任意的文件冗余程度(提供比 raid1+0 更高的冗余级别,而绝对不会影响读或
写的性能,只会加速!)
6. 可回收在指定时间内删除的文件( “ 回收站 ” 提供的是系统级别的服务,不怕误操作了,提供类
似 oralce 的闪回等高级 dbms 的即时回滚特性!)
7. 提供 netapp,emc,ibm 等商业存储的 snapshot 特性。(可以对整个文件甚至在正在写入的文
件创建文件的快照)
8. google filesystem 的一个 c 实现。
9. 提供 web gui 监控接口。
10. 提高随机读或写的效率。
11. 提高海量小文件的读写效率。
(3)MFS中角色及其作用?
MooseFS 是一种分布式文件系统,MooseFS 文件系统结构包括以下四种角色:
MFS分布式文件系统_第1张图片
(4)MFS文件系统的组成架构:
MFS分布式文件系统_第2张图片
(5)内部运行机制
1:客户端请求访问存储,请求发送到了MFS Master。
2:MFS Master根据我们的请求,查询所需要的文件分布在那些服务器上。
3:客户端直接和存储服务器进行数据存储和读写 。


#################MFS安装与配置

实验环境:
主机环境:RHEL6.5 selinux and iptables disabled
服务器角色:
server1—>172.25.254.1—>管理服务器managing server (master) 和元数据日志服务器(Metalogger)
server2—>172.25.254.2—> 数据存储服务器data servers (chunk servers )
server3—>172.25.254.3—> 数据存储服务器data servers (chunk servers )
foundation77—>172.25.254.77—>客户机挂载使用client computers
所有服务器端和客户端都要支持fuse内核模块。
由于mfs的客户端程序也就是加载mfs磁盘系统的命令是使用了fuse,因此只要是想挂载mfs的服务器,必要的前提条件就是先安装fuse,这样编译mfs的时候才能顺利通过。
fuse概述:
用户空间文件系统(Filesystem in Userspace,简称FUSE)是操作系统中的概念,指完全在用户态实现的文件系统。目前Linux通过内核模块对此进行支持。一些文件系统如NTFS-3G(作用:让Linux中对NTFS文件系统提供支持) 使用FUSE实现。
注:2.6以上内核,都自带fuse
一.MFS管理服务器(master配置)———server1
步骤:
(1)安装一些需要的依赖包

yum install rpm-build make gcc gcc-c++ fuse-devel zlib-devel –y

(2)在官网上下载有关mfs的rpm包,注意需对应相应的可用版本。

[root@server1 3.0.97]# ls
moosefs-cgi-3.0.97-1.rhsysv.x86_64.rpm
moosefs-cgiserv-3.0.97-1.rhsysv.x86_64.rpm
moosefs-chunkserver-3.0.97-1.rhsysv.x86_64.rpm
moosefs-cli-3.0.97-1.rhsysv.x86_64.rpm
moosefs-client-3.0.97-1.rhsystemd.x86_64.rpm
moosefs-client-3.0.97-1.rhsysv.x86_64.rpm
moosefs-master-3.0.97-1.rhsysv.x86_64.rpm
moosefs-metalogger-3.0.97-1.rhsysv.x86_64.rpm

(3)安装master端所需要的mfs包

[root@server1 3.0.97]# yum install moosefs-cgi-3.0.97-1.rhsysv.x86_64.rpm moosefs-cgiserv-3.0.97-1.rhsysv.x86_64.rpm moosefs-master-3.0.97-1.rhsysv.x86_64.rpm -y

(4)做域名解析并开启服务

[root@server1 3.0.97]# vim /etc/hosts
写入:
         172.25.254.1   server1        mfsmaster
         172.25.254.2   server2         chunkserver
         172.25.254.3   server3         chunkserver
[root@server1 3.0.97]# /etc/init.d/moosefs-master start
Starting mfsmaster:                                        [  OK  ]
[root@server1 3.0.97]#/etc/init.d/moosefs-cgiserv start
Starting mfscgiserv:                                       [  OK  ]

(5)查看端口并在浏览器测试:

[root@server1 3.0.97]# netstat -antlp | grep 94*
tcp        0      0 0.0.0.0:9419                0.0.0.0:*                   LISTEN      1642/mfsmaster      
tcp        0      0 0.0.0.0:9420                0.0.0.0:*                   LISTEN      1642/mfsmaster      
tcp        0      0 0.0.0.0:9421                0.0.0.0:*                   LISTEN      1642/mfsmaster      
tcp        0      0 0.0.0.0:9425                0.0.0.0:*                   LISTEN      1649/python  

浏览器测试:
MFS分布式文件系统_第3张图片
二.数据存储服务器(chunkserver端配置)——server2和server3配置相同。
安装数据服务器(chunkservers),这些机器的磁盘上要有适当的剩余空间,而且操作系统要遵循POSIX 标准(验证了的有这些: Linux, FreeBSD, Mac OS X and OpenSolaris)。
Chunkserver存储数据时,是在一个普通的文件系统如ext4上储存数据块或碎片(chunks/fragments)作为文件。你在chunkserver上看不到完整的文件。
步骤:
(1)域名解析

root@server2 ~]# vim /etc/hosts
172.25.254.1   server1        mfsmaster

(2)在网上下载相应的包并安装(moosefs-chunkserver)

[root@server2 3.0.97]# yum install -y moosefs-chunkserver-3.0.97-1.rhsysv.x86_64.rpm

(3)建立需要作为chunkserver的目录

[root@server2 ~]# mkdir /mnt/chunk1
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/ -R

(4)在配置文件中注名作为chunkserver的目录,并开启服务

root@server2 ~]# vim /etc/mfs/mfshdd.cfg
 写入: 
        /mnt/chunk1
[root@server2 ~]# /etc/init.d/moosefs-chunkserver start
Starting mfschunkserver:                                   [  OK  ]

至此,chunkserver其中之一的server2就配置好了,其他的数据服务器做一样的操作就可以(只需每次修改作为chunkserver的目录名即可)
当所有的数据服务器都配置好之后,我们可以在浏览器刷新MFS的界面,点选servers就可以看见我们的所有数据服务器。
MFS分布式文件系统_第4张图片
三.moosefs-client配置———foundation77
(1)安装moosefs-client

[root@foundation77 3.0.97]# yum install -y moosefs-client-3.0.97-1.rhsystemd.x86_64.rpm

(2)域名解析

root@foundation ~]# vim /etc/hosts
172.25.254.1   server1        mfsmaster

(3)建立挂载目录,并进行挂载

[root@foundation77 mfs]# mkdir /mnt/mfs
[root@foundation77 mfs]# mfsmount 
no mount point
see: mfsmount -h for help
[root@foundation77 mfs]# mfsmount /mnt/mfs
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@foundation77 mfs]# df
Filesystem     1K-blocks     Used Available Use% Mounted on
/dev/sda11     117366792 35932044  81434748  31% /
devtmpfs         1609828        0   1609828   0% /dev
tmpfs            1625612      516   1625096   1% /dev/shm
tmpfs            1625612     9484   1616128   1% /run
tmpfs            1625612        0   1625612   0% /sys/fs/cgroup
/dev/sda7         505580   236568    269012  47% /boot
/dev/sda6         204580     9636    194944   5% /boot/efi
/dev/loop0       3654720  3654720         0 100% /var/www/html/source7.0
/dev/loop1       3947824  3947824         0 100% /var/www/html/source7.2
/dev/loop2       3762278  3762278         0 100% /var/www/html/source6.5
/dev/loop3       3704296  3704296         0 100% /var/www/html/source7.3
tmpfs             325124       28    325096   1% /run/user/1000
mfsmaster:9421  36324672  2497344  33827328   7% /mnt/mfs

这里写图片描述
测试:

[root@foundation77 mfs]# cd /mnt/mfs
[root@foundation77 mfs]# mkdir dir1 dir2
[root@foundation77 mfs]# mfsgetgoal dir1   ##默认建立的文件,会保存两份,分别在两个chunkserver上
dir1: 2
[root@foundation77 mfs]# mfsgetgoal dir2
dir2: 2
[root@foundation77 mfs]# cp /etc/passwd dir1
[root@foundation77 mfs]# cp /etc/fstab dir2
[root@foundation77 mfs]# mfssetgoal -r 1 dir1   ##设置dir1目录下的文件,只cp一份
dir1:
 inodes with goal changed:                       2
 inodes with goal not changed:                   0
 inodes with permission denied:                  0
[root@foundation77 mfs]# mfsgetgoal dir1
dir1: 1
[root@foundation77 mfs]# mfsfileinfo dir1/passwd  ##查看有一份
dir1/passwd:
    chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
        copy 1: 172.25.254.3:9422 (status:VALID)
[root@foundation77 mfs]# mfsfileinfo dir2/fstab    #查看有两份
dir2/fstab:
    chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
        copy 1: 172.25.254.2:9422 (status:VALID)
        copy 2: 172.25.254.3:9422 (status:VALID)

当关闭dir1保存文件的chunkserver:

root@server3 ~]# systemctl stop moosefs-chunkserver
[root@foundation77 mfs]# mfsfileinfo dir1/passwd   ##可以查看到看到有这文件,但是不能查看
dir1/passwd:
    chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
        no valid copies !!!
[root@server3 ~]# systemctl start moosefs-chunkserver  ##重新打开chunkserver后文件恢复正常
[root@foundation77 mfs]# mfsfileinfo dir1/passwd 
dir1/passwd:
    chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
        copy 1: 172.25.254.3:9422 (status:VALID)

那么当文件误删除了,我们要怎样补救呢,其实只要重新建立一个挂载目录就可以了。

[root@foundation77 dir1]# rm -fr passwd 
[root@foundation77 dir1]# cd ..
[root@foundation77 mfs]# mkdir /mnt/mfsmeta
[root@foundation77 mfs]# mfsmount -m /mnt/mfsmeta/
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@foundation77 mfs]# cd /mnt/mfsmeta/trash/
[root@foundation77 trash]# ls

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

root@foundation77 trash]# find -name *passwd*
00000003\|dir1\|passwd
[root@foundation77 trash]# mv 00000003\|dir1\|passwd undel/
[root@foundation77 mfs]# cd /mnt/mfs
[root@foundation77 mm]# ls
dir1  dir2
[root@foundation77 mm]# cd dir1
[root@foundation77 dir1]# ls
passwd

我们看到删除的又恢复了。

你可能感兴趣的:(运维,linux)