MFS分布式文件系统

一、MFS概述:

        MooseFS(moose 驼鹿)是一款网络分布式文件系统。它把数据分散在多台服务器上,但对于用户来讲,看到的只是一个源。MFS也像其他类unix文件系统一样,包含了层级结构(目录树),存储着文件属性(权限,最后访问和修改时间),可以创建特殊的文件(块设备,字符设备,管道,套接字),符号链接,硬链接。

        MooseFS[MFS]是一个具有容错性的网络分布式文件系统。它把数据分散存放在多个物理服务器上,而呈现给用户的则是一个统一的资源。

        http://www.moosefs.com/

   http://www.moosefs.org/reference-guide.html       //安装和帮助文档

 

 当我们存储服务器的容量达到瓶颈之后,那我们就需要采用分布式的文件系统来扩大存储容量,类似与百度云的存储,也是采用分布式存储!

2.MFS的特征

       1:层析结构(目录树)

       2:存储文件属性(权限,访问和修改时间)

       3:支持特殊文件(块设备,字符设备,管道)

       4:符号链接,软硬链接

       5:对文件系统访问可以通过IP地址或者密码进行访问限制

       6:高可靠(数据的多个拷贝存储在不同的计算机上)

       7:通过附加新的计算机或者硬盘可以实现容量的动态拓展

       8:删除文件可以根据一个可配置的时间周期进行保留

       9:不受访问和写入影响的文件连贯快照

 3.应用场景

      谈及MooseFS的应用场景,其实就是去谈分布式文件系统的应用场景。

      1)大规模高并发的数据存储及访问(小文件、大文件),

      2)大规模的数据处理,如日志分析

 

二、MFS分布式文件系统部署方案

MooseFS 是一种分布式文件系统,MooseFS 文件系统结构包括以下四种角色:

1、管理服务器 managing server (master):

  负责各个数据存储服务器的管理,文件读写调度,文件空间回收以及恢复.多节点拷贝

2、元数据日志服务器 Metalogger server(Metalogger):

  负责备份 master 服务器的变化日志文件,文件类型为 changelog_ml.*.mfs,以便于在 master server 出问题的时候接替其进行工作

3、数据存储服务器 data servers (chunk servers ) :

  听从管理服务器调度,提供存储空间,并为客户提供数据传输.。 真正存储用户数据的服务器。存储文件时,首先把文件分成块,然后这些块在数据服务器 chunkserver之间复 制(复制份数可以手工指定,建议设置副本数为 3)。数据服务器可以是多个,并且数量越多,可使用的“磁盘空间”越大,可靠性也越高。

4、客户机挂载使用 client computers :

  客户端挂载远程mfs服务器共享出的存储并使用。  通过 fuse 内核接口挂载进程管理服务器上所管理的数据存储服务器共享出的硬盘。 共享的文件系统的用法和 nfs 相似。 使用 MFS 文件系统来存储和访问的主机称为 MFS 的客户端,成功挂接 MFS 文件系统以后,就可以像以前使用 NFS 一样共享这个虚拟性的存储了。

  1. 系统部署方案

 

 

2. 内部运行机制

       1:客户端请求访问存储,请求发送到了MFS Master

       2:MFS Master根据我们的请求,查询所需要的文件分布在那些服务器上

       3:客户端直接和存储服务器进行数据存储和读写

  3. 端口关系图

端口号:

9420  : MFS master和MFS chunck通信端口

9421  : MFS master和MFS Client端通信端口

9419  : MFS master和MFS metalogger端通信端口

9422  : MFS chunck  和MFS Client端通信端口

9425  : MFS master  web界面监听端口,查看整体运行状态

主机名 IP地址  系统  角色
master 192.168.1.220 CentOS Linux release 7.4.1708 (Core)  管理服务器
metalogger 192.168.1.221 CentOS Linux release 7.4.1708 (Core)  元数据日志服务器
chunk_server01 192.168.1.222 CentOS Linux release 7.4.1708 (Core)  数据存储服务器
chunk_server02 192.168.1.205 CentOS Linux release 7.4.1708 (Core)  数据存储服务器
node 192.168.1.227 CentOS Linux release 7.4.1708 (Core)  客户机挂载使用

 master服务器

[root@master ~]# tar xf moosefs-3.0.84-1.tar.gz
[root@master ~]# cd moosefs-3.0.84
[root@master moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
[root@master ~]# yum install rpm-build gcc gcc-c++ fuse-devel zlib-devel -y
[root@master moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
[root@master moosefs-3.0.84]# make && make install
[root@master var]# cd /usr/local/mfs/share/mfscgi
[root@master mfscgi]# cd ../../var
[root@master var]# ls 
mfs
/usr/local/mfs/var/mfs 存储云数据信息的持久化目录
[root@master mfs]# cd ../..
[root@master mfs]#  ls
bin  etc  sbin  share  var
[root@master mfs]# cd etc
[root@master etc]# cd mfs
[root@master mfs]# ls
mfschunkserver.cfg.sample  mfsexports.cfg.sample  mfshdd.cfg.sample  mfsmaster.cfg.sample  mfsmetalogger.cfg.sample  mfsmount.cfg.sample  mfstopology.cfg.sample
[root@master mfs]# chown -R mfs:mfs /usr/local/mfs
[root@master mfs]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@master mfs]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@master mfs]#  cp -a mfsmaster.cfg.sample mfsmaster.cfg
[root@master mfs]# cp -a mfsexports.cfg.sample mfsexports.cfg
[root@master mfs]# vi mfsexports.cfg
增加
192.168.1.0/24  .       rw,alldirs,maproot=0
mfsexports.cfg 文件每一条由三部分组成,
第一部分表示客户端的 IP 地址,
第二部分表示被挂接的目录,
第三部分表示客户端拥有的权限,下面对三给部分迚行解释
 
1.客户端 IP 地址
 *                       所有 IP 地址
 x.x.x.x                 单个 IP 地址
 x.x.x.x/m.m.m.m         IP 网络地址/子网掩码
 f.f.f.f-t.t.t.t               IP 段
2.被挂载的目录
  /                      表示 MooseFS 的根
  .                      表示 MFSMETA 文件系
3.客户端拥有的权限
  ro                     只读
  rw                     读写
  alldirs                  允许挂载任何指定的子目录
  maproot                映射为 root 用户还是指定的用户
  password               指定客户端密码
[root@master mfs]# cd ../../var/mfs/
[root@master mfs]# cp -a metadata.mfs.empty metadata.mfs
[root@master mfs]# mfsmaster start        #启动

[root@master mfs]# mfscgiserv start
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/local/mfs/share/mfscgi)

浏览器端访问

http://192.168.1.220:9425/mfs.cgi
Input your DNS master name: 192.168.1.220(主服务器的地址)    Try it!!!点击它。

metalogger服务器 

[root@metalogger ~]# tar xf moosefs-3.0.84-1.tar.gz 
[root@metalogger ~]# cd moosefs-3.0.84
[root@metalogger moosefs-3.0.84]#  useradd -s /sbin/nologin -M mfs
[root@metalogger moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
[root@metalogger moosefs-3.0.84]# make && make install
[root@metalogger moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs
[root@metalogger moosefs-3.0.84]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@metalogger moosefs-3.0.84]#  ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@metalogger moosefs-3.0.84]#  cd /usr/local/mfs/etc/mfs
[root@metalogger mfs]# cp -a mfsmetalogger.cfg.sample mfsmetalogger.cfg
[root@metalogger mfs]# vi mfsmetalogger.cfg
 39 META_DOWNLOAD_FREQ = 2
52 MASTER_HOST = 192.168.1.220
[root@metalogger mfs]#  mfsmetalogger start
[root@metalogger mfs]# netstat -antp |grep :9419
tcp        0      0 192.168.1.221:33614     192.168.1.220:9419      ESTABLISHED 22096/mfsmetalogger 

chunk_server02服务器

分区/dev/sdb

[root@chunk_server02 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x82b580f3 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):N
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): P
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):+5G   
Last 扇区, +扇区 or +size{K,M,G} (10485760-41943039,默认为 41943039):^C
[root@chunk_server02 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x5d8d656b 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):N
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): P
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G   
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):W
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@chunk_server02 ~]# partprobe /dev/sdb
[root@chunk_server02 ~]# fdisk -l

磁盘 /dev/sda:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000c4950

   设备 Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048      411647      204800   83  Linux
/dev/sda2          411648     2459647     1024000   82  Linux swap / Solaris
/dev/sda3         2459648    41943039    19741696   83  Linux

磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x5d8d656b

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    10487807     5242880   83  Linux
[root@chunk_server02 ~]# mkfs.ext4 /dev/sdb1
[root@chunk_server02 ~]# mkdir /mnt/mfs
[root@chunk_server02 ~]# mount -t ext4 /dev/sdb1 /mnt/mfs
[root@chunk_server02 ~]# echo "mount -t ext4 /dev/sdb1 /mnt/mfs" >> /etc/rc.local 
[root@chunk_server02 ~]#  useradd -s /sbin/nologin -M mfs
[root@chunk_server02 ~]# tar xf moosefs-3.0.84-1.tar.gz 
[root@chunk_server02 ~]# cd moosefs-3.0.84
[root@chunk_server02 moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs
[root@chunk_server02 moosefs-3.0.84]# make && make install
[root@chunk_server02 moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs
[root@chunk_server02 moosefs-3.0.84]# chown -R mfs:mfs /mnt/mfs
[root@chunk_server02 moosefs-3.0.84]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@chunk_server02 moosefs-3.0.84]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@chunk_server02 moosefs-3.0.84]#  cd /usr/local/mfs/etc/mfs
[root@chunk_server02 mfs]# cp -a mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk_server02 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.1.220
MASTER_PORT = 9420
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
[root@chunk_server02 mfs]# cp -a mfshdd.cfg.sample mfshdd.cfg
[root@chunk_server02 mfs]# vi mfshdd.cfg
/mnt/mfs
[root@chunk_server02 mfs]# mfschunkserver start

chunk_server01服务器

分区/dev/sdb

[root@chunk_server01 ~]# fdisk /dev/sdb
欢迎使用 fdisk (util-linux 2.23.2)。

更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。

Device does not contain a recognized partition table
使用磁盘标识符 0x1ae4b73a 创建新的 DOS 磁盘标签。

命令(输入 m 获取帮助):n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
分区号 (1-4,默认 1):1
起始 扇区 (2048-41943039,默认为 2048):
将使用默认值 2048
Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+5G
分区 1 已设置为 Linux 类型,大小设为 5 GiB

命令(输入 m 获取帮助):w  
The partition table has been altered!

Calling ioctl() to re-read partition table.
正在同步磁盘。
[root@chunk_server01 ~]# partprobe /dev/sdb
[root@chunk_server01 ~]#  mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
327680 inodes, 1310720 blocks
65536 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=1342177280
40 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Allocating group tables: 完成                            
正在写入inode表: 完成                            
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成 
[root@chunk_server01 ~]# mkdir /mnt/mfs
[root@chunk_server01 ~]# mount -t ext4 /dev/sdb1 /mnt/mfs
[root@chunk_server01 ~]# echo "mount -t ext4 /dev/sdb1 /mnt/mfs" >> /etc/rc.local 
[root@chunk_server01 ~]# useradd -s /sbin/nologin -M mfs
[root@chunk_server01 ~]# tar xf moosefs-3.0.84-1.tar.gz 
[root@chunk_server01 ~]# cd moosefs-3.0.84
[root@chunk_server01 moosefs-3.0.84]#  ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-default-group=mfs && make && make install
[root@chunk_server01 moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs
[root@chunk_server01 moosefs-3.0.84]# chown -R mfs:mfs /mnt/mfs
[root@chunk_server01 moosefs-3.0.84]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@chunk_server01 moosefs-3.0.84]#  ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@chunk_server01 moosefs-3.0.84]# cd /usr/local/mfs/etc/mfs
[root@chunk_server01 mfs]# cp -a mfschunkserver.cfg.sample mfschunkserver.cfg
[root@chunk_server01 mfs]# vi mfschunkserver.cfg
MASTER_HOST = 192.168.1.220
MASTER_PORT = 9420
HDD_CONF_FILENAME = /usr/local/mfs/etc/mfs/mfshdd.cfg
[root@chunk_server01 mfs]# cp -a mfshdd.cfg.sample mfshdd.cfg
[root@chunk_server01 mfs]# vi mfshdd.cfg
/mnt/mfs
[root@chunk_server01 mfs]# mfschunkserver start

node服务器

[root@node ~]# tar xf moosefs-3.0.84-1.tar.gz 
[root@node ~]# cd moosefs-3.0.84
[root@node moosefs-3.0.84]# useradd -s /sbin/nologin -M mfs
[root@node moosefs-3.0.84]# ./configure --prefix=/usr/local/mfs --with-default-user=mfs --with-defaul-group=mfs --disable-mfsmaster --disable-mfschunkservert && make && make install
[root@node moosefs-3.0.84]# chown -R mfs:mfs /usr/local/mfs
[root@node moosefs-3.0.84]# ln -s /usr/local/mfs/bin/* /usr/local/bin/
[root@node moosefs-3.0.84]# ln -s /usr/local/mfs/sbin/* /usr/local/sbin/
[root@node moosefs-3.0.84]# mkdir /mfs
[root@node moosefs-3.0.84]# chown -R mfs:mfs /mfs
[root@node moosefs-3.0.84]# mfsmount /mfs/ -H 192.168.1.220
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root

测试

[root@node moosefs-3.0.84]# cd /mfs/
[root@node mfs]# vi index.html
iiidjsldfjksdjf
[root@node mfs]# mfsfileinfo index.html 
index.html:
        chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
                copy 1: 192.168.1.205:9422 (status:VALID)
                copy 2: 192.168.1.222:9422 (status:VALID)

修改goal值

[root@node mfs]# mfssetgoal 1 index.html 
index.html: goal: 1
[root@node mfs]# mfsfileinfo index.html 
index.html:
        chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
                copy 1: 192.168.1.205:9422 (status:VALID)
[root@node mfs]# mfssetgoal 2 index.html      #还原成两份。
index.html: goal: 2
[root@node mfs]# mfsfileinfo index.html
index.html:
        chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
                copy 1: 192.168.1.205:9422 (status:VALID)
                copy 2: 192.168.1.222:9422 (status:VALID)
[root@node mfs]# mkdir abc  #快照
[root@node mfs]# chown mfs:mfs abc/
[root@node mfs]# mfsmakesnapshot index.html abc/
[root@node mfs]#  cd abc/
[root@node abc]# cat index.html 
iiidjsldfjksdjf

指针。
a=123 123是要存储在内存中的,a=123就是a是个指针指向123的内存地址,如果b=a,也b这个指针指向123的内存地址。没有任何指针指向123那就是垃圾数据会销毁。

[root@node abc]# mfsgettrashtime index.html 
index.html: 86400
[root@node abc]# cd ..
[root@node mfs]# vi 1.txt
1111111111111111111111111
[root@node mfs]# mfsgettrashtime 1.txt 
1.txt: 86400 (单位是秒,最低是0,)
[root@node mfs]# mfssettrashtime 60000 1.txt
1.txt: 60000
[root@node mfs]# rm -rf 1.txt
找回1.txt文件
[root@node mfs]# mkdir /back
[root@node mfs]# chown mfs:mfs /back
[root@node mfs]# mfsmount -m /back -H 192.168.1.220
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@node mfs]# cd /back
[root@node back]# ls
sustained  trash
[root@node back]# cd trash/
[root@node trash]# find . -name "*1.txt"
./00D/0000000D|1.txt
./011/00000011|1.txt
[root@node trash]# mv "00D/0000000D|1.txt" /back/trash/undel/

master主服务器的元数据

[root@master ~]# cd /usr/local/mfs/var/mfs/
        [root@localhost mfs]# ls
        changelog.0.mfs  changelog.1.mfs  changelog.2.mfs  changelog.3.mfs  metadata.mfs.back  metadata.mfs.back.1  stats.mfs    
        
        [root@master mfs]# ls 
        changelog.0.mfs  changelog.1.mfs  changelog.2.mfs  changelog.3.mfs  metadata.mfs.back  metadata.mfs.back.1  stats.mfs
        [root@master mfs]# rm -rf *
        [root@master mfs]# mfsmaster stop
        [root@master mfs]# mfsmaster start             #数据又回来了。

logserver服务器(有元数据的备份,如果master服务器丢失元数,可以从这里拷贝)

[root@metalogger mfs]# cd /usr/local/mfs/var/mfs/            
            [root@localhost mfs]# ls
            changelog_ml.0.mfs  changelog_ml_back.0.mfs  changelog_ml_back.1.mfs  metadata_ml.mfs.back  metadata_ml.mfs.back.1  metadata_ml.mfs.back.2  metadata_ml.mfs.back.3
        [root@metalogger mfs]# scp * root@192.168.1.202:/usr/local/mfs/var/mfs/
            The authenticity of host '192.168.1.202 (192.168.1.202)' can't be established.
            RSA key fingerprint is 84:11:67:b0:d1:38:26:f4:90:0a:aa:f2:3b:1f:e8:bc.
            Are you sure you want to continue connecting (yes/no)? yes
            Warning: Permanently added '192.168.1.202' (RSA) to the list of known hosts.
            root@192.168.1.202's password: 
            changelog_ml.0.mfs                                                                                                                    100%  380     0.4KB/s   00:00    
            changelog_ml_back.0.mfs                                                                                                               100%  478     0.5KB/s   00:00    
            changelog_ml_back.1.mfs                                                                                                               100% 3210     3.1KB/s   00:00    
            metadata_ml.mfs.back                                                                                                                  100% 4122     4.0KB/s   00:00    
            metadata_ml.mfs.back.1                                                                                                                100% 2915     2.9KB/s   00:00    
            metadata_ml.mfs.back.2                                                                                                                100% 2915     2.9KB/s   00:00    
            metadata_ml.mfs.back.3                                                                                                                100% 2915     2.9KB/s   00:00  
        

 

posted @ 2020-02-23 13:24  星火撩原  阅读(491)  评论(0编辑  收藏  举报