MooseFs-分布式文件系统系列(三)之MFSclient端的使用

Web界面监控MFS状态

mfscgiserv 是用python写的一个web服务器,监听端口是9425,必须在master(管理服务器上)上启动

常用的参数如下:

参数 作用
-h help
-H 绑定的IP,默认为0.0.0.0
-P 绑定端口号,默认是9425
-R mfscgi的root路径,默认是/usr/local/mfs/share/mfscgi
-f 运行HTTP服务器,-f 表示在前台运行,-v表示请求的日志发往标准的错误设备

一般情况下不需要带任何参数启动即可。

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

然后在浏览器输入:http://masfterserver ip:9425就可以看到监控图了。

监控图有8个部分组成:

  1. info

    这个部分显示了MFS的基本信息。
  2. Servers

    列出现有的ChunkServer。
  3. Disks

    列出每一台ChunkServer的磁盘目录以及使用量
  4. Exports

    列出共享的目录,既可以被挂载的目录
  5. mounts

    显示被挂载的情况。
  6. Openrations

    显示正在执行的操作。
  7. Master Charts

    显示Master server的操作情况,包括读取,写入,创建目录,删除目录等消息。
  8. Server Charts

    显示ChunkServer的操作情况,数据传输率以及系统状态等信息。

客户端挂载文件系统

主要命令如下:

mfsmount -H [master] [-p port] [-S path] mountpoint

参数 作用
-H 管理服务器的IP地址
-P port 管理服务器端口,按照mfsmaster.cfg配置文件中的变量MATOCU_LISTEN_PORT的值填写,如果是默认端口则不需要指出。
-S path 指出挂载MFS目录的子目录,默认是/,即挂载整个MFS目录
mountpoint 指挂载到本地的哪个目录下

在启动管理服务器进程时,用了一个“-m” 或“-o mfsmaster”的选项,这样可以挂载一个辅助的文件系统mfsmeta,辅助文件系统可以在如下两个方面恢复丢失的数据:

  1. MFS卷上误删除了文件,而此文件又没有过垃圾文件存放期。
  2. 为了释放磁盘空间而删除或者移动的文件,当需要恢复这些文件时,文件又没有过垃圾文件的存放期。

要使用MFS辅助文件系统,可以执行如下指令:

mfsmount -m /mnt/mfsclient  -H mfsmaster

需要注意的是,如果决定了挂载mfsmeta,那么一定要在mfsmaster的mfsexport.cfg文件中添加下面这条记录:

*           .                   rw

原文件有此条目,只要将其前面的#去掉即可。

挂载文件系统就可以执行所所有标准的文件操作了。如创建,删除,复制,重命名文件等。MFS由于是一个网络文件系统,所以操作进度比本地的偏慢。

需要注意的是,每个文件都可以存储为多个副本,在这种情况下,每一个文件所占用的空间要比其他文件本身大的多,此外,被删除且在有效期内的文件都放在一个“垃圾箱”中,所以他们也占用的空间,其大小也依赖文件的分钟。。为防止删除被其他进程打开的文件,数据将一直被存储,直到文件被关闭。

MFS日常操作(都在client端下操作)

1. mfsgetgoal和mfssetgoal命令

目标(goal)是指文件被复制的份数,设定了复制的份数就可以通过mfsgetgoal命令来证实

[root@localhost mfs]# /usr/local/mfs/bin/mfsgetgoal /mnt/mfsclient/    # 这里是get
/mnt/mfsclient/: 2
[root@localhost mfs]# /usr/local/mfs/bin/mfssetgoal 3 /mnt/mfsclient/ # 这里是set
/mnt/mfsclient/: goal: 3
[root@localhost mfs]# /usr/local/mfs/bin/mfssetgoal -r 3 /mnt/mfsclient/ # -r 是递归,对整个树形目录进行递归操作
/mnt/mfsclient/:
inodes with goal changed: 0
inodes with goal not changed: 1
inodes with permission denied: 0
[root@localhost mfs]# /usr/local/mfs/bin/mfsgetgoal -r /mnt/mfsclient/
/mnt/mfsclient/:
directories with goal 3 : 1

需要注意的是,如果你的Chunkserver只有一台服务器,那么就设置为1即可,别设置为3,4或者其他超过1的,不然你写如一个东西,会卡死的。。。。。。。

2. mfscheckfile与mfsfileinfo命令

实际副本数量可以通过mfscheckfile和mfsfileinfo命令证实,如下:

[root@localhost mfs]# touch /mnt/mfsclient/test1          # 新添一个空文件
[root@localhost mfs]# bin/mfscheckfile /mnt/mfsclient/test1 # 虽然有文件(虽然没有设置为非零目标,the noo-zero goal),但是是一个空文件,所以mfscheckfile是为空的结果
/mnt/mfsclient/test1:
[root@localhost mfs]# bin/mfsfileinfo /mnt/mfsclient/test1
/mnt/mfsclient/test1:
no chunks - empty file
[root@localhost mfs]# echo "asdsasfasdfasdfasdf" >/mnt/mfsclient/test1
[root@localhost mfs]# bin/mfscheckfile /mnt/mfsclient/test1
/mnt/mfsclient/test1:
chunks with 1 copy: 1
[root@localhost mfs]# bin/mfsfileinfo /mnt/mfsclient/test1
/mnt/mfsclient/test1:
chunk 0: 0000000000000029_00000001 / (id:41 ver:1)
copy 1: 172.16.22.142:9422 (status:VALID) # 设置上我们刚才通过mfssetgoal为3,理论上是复制3份副本,但是这里的chunkserver只有1台,所以copy也就为1了。

这里说说目录继承副本数量的问题:

  1. 如果改变一个已经存在的文件副本份数,那么文件的副本份数就会扩大或删除,这个过程会有延迟的。
  2. 对于一个目录设定“目标”,此目录下新创建的文件或子目录均会继承此目录的设定,但不会改变已经存在的文件以及目录副本数量。

3. mfsdirinfo

整个目录树的内容需要通过一个功能增强、等同于“du -s”的命令mfsdirinfo来显示。mfsdirinfo可以显示MFS的具体信息。

[root@localhost mfs]# bin/mfsdirinfo /mnt/mfsclient/
/mnt/mfsclient/:
inodes: 2
directories: 1
files: 1
chunks: 1
length: 20
size: 73728
realsize: 221184
[root@localhost mfs]# bin/mfsdirinfo /mnt/mfsclient/test1
/mnt/mfsclient/test1:
inodes: 1
directories: 0
files: 1
chunks: 1
length: 20
size: 73728
realsize: 221184
  • length 表示文件大小的总和
  • size 表示块长度总和
  • realsize 表示磁盘空间的使用,包括所有的副本

4. 为垃圾箱设定隔离时间

删除的文件存放在“垃圾箱(trash bin)”的时间就是隔离时间(quarantine time),这个时间可以用mfsgettrashtime 来验证,也可以用mfssettrashtime来设置。设置的时间是按照小时计算,设置的单位是秒,不满一小时就按一小时计算,如下所示:

[root@localhost mfs]# bin/mfssettrashtime   5000 /mnt/mfsclient/test1    #5000秒大于1小时,不满2小时,按照2小时计算
/mnt/mfsclient/test1: 5000
[root@localhost mfs]# bin/mfsgettrashtime /mnt/mfsclient/test1
/mnt/mfsclient/test1: 7200
[root@localhost mfs]# bin/mfssettrashtime 8000 /mnt/mfsclient/test1 #8000秒大于2小时,不满3小时,按照3小时计算
/mnt/mfsclient/test1: 8000
[root@localhost mfs]# bin/mfsgettrashtime /mnt/mfsclient/test1
/mnt/mfsclient/test1: 10800

mfssettrashtime -r是对目录进行递归赋值的。为一个目录设定存放时间后,在此目录下新创建的文件和目录就可以继承这个设置了。数字0意味着一个文件被删除后,会立即删除,不可能再恢复。

删除的文件通过一个单独安装的mfsmeta辅助文件系统来恢复。这个文件系统包含了目录trash(含有仍然可以被还原的删除文件的信息)和目录trash/undel(用于获取文件)。只有管理员权限访问mfsmeta辅助文件系统(通常是root)。

下面来模拟下文件被删除后,如何恢复的:

Notice

在做这一步的时候,请先确认使用mfsmount -m参数挂载了mfsmeta。如

mfsmount -m /mnt/mfsmeta/ -H mfsmaster
  1. 先找到被删除的文件
[root@localhost mfs]# echo "asdfasdfnoijoiujro2er0" >/mnt/mfsclient/haha1    # 创建一个文件
[root@localhost mfs]# bin/mfsgettrashtime /mnt/mfsclient/haha1 # 确认回收站存放的时间为2小时
/mnt/mfsclient/haha1: 7200
[root@localhost mfs]# rm /mnt/mfsclient/haha1 #删除文件
rm: remove regular file `/mnt/mfsclient/haha1'? y
[root@localhost mfs]# find /mnt/mfsmeta/trash/ -name "*haha*"     #在回收站里面找到被删除的文件
/mnt/mfsmeta/trash/006/00000006|haha1

被删除的文件名在垃圾箱里面其实还是可以找到的,文件名是由一个8位16进制数的i-node和被删的文件名组成。在文件名和i-node之间不可以用"/",而是以“|” 替代。如果一个文件名的长度超过操作系统的限制(通常是255字符),那么超出部分将被删除。从挂载点起全部路径的文件名被删除的文件仍然可以被读写。

需要注意的是,被删除的文件在使用文件名(注意文件名是两部分),一定要用单引号引起来。如下所示:

[root@localhost mfs]# cat '/mnt/mfsmeta/trash/006/00000006|haha1'
haha1
  1. 恢复文件

    移动这个文件到文件所在目录下的undel下面,将会使原始的文件恢复到正确的MFS文件系统原来的路径下。如下所示:
[root@localhost mfs]# cd /mnt/mfsmeta/trash/006/        # 切换到被删文件下面
[root@localhost 006]# ls
00000006|haha1 undel
[root@localhost 006]# pwd
/mnt/mfsmeta/trash/006
[root@localhost 006]# mv 00000006\|haha1 ./undel/
[root@localhost 006]# ls /mnt/mfsclient/
haha1 test3
[root@localhost 006]# cat /mnt/mfsclient/haha1
asdfasdfnoijoiujro2er0

在恢复文件的时候,原来被删文件下面的目录下,不能有同名文件,不然恢复不成功。

从垃圾箱中删除文件的结构是释放之前它占用的空间(删除有延迟,因为数据是异步删除的)。在垃圾箱中删除文件后,就不能够再恢复了。

可以通过mfssetgoal命令来修改文件的副本数,也可以通过mfssettrashtime工具来改变文件存储在垃圾箱中的时间。

5. 快照功能

MFS系统可以利用mfsmakesnapshot工具给文件或者目录做快照(snapshot),如下所示:

[root@localhost ~]# /usr/local/mfs/bin/mfsmakesnapshot destination-file source-file

其中source是源文件路径或者目录,destination是快照文件路径或者目录,需要注意的是,destination 路径必须在MFS文件系统下面,即source与destination路径都必须在MFS体系下,不能将快照放到MFS文件系统之外的其他文件系统下。

mfsmakesnapshot是一次执行中整合了一个或者一组文件的副本,而且对这些文件的源文件进行任何修改都不会影响源文件的快照,就是说任何对源文件的操作,如写入操作,将会不修改副本。

mfsmakesnapshot可以实现这个快照功能,当有多个源文件时,他们的快照会被加入到同一个目标文件中,通过对比快照的测试,可以发现快照的本质:

  1. 一个MFS系统下的文件做快照后,查看两个文件的块信息,他们是同一个块。接着,把原文件删除,删除源文件后(最初会留在回收站上,但过一段时间后回收站的文件也删除了),快照文件仍然存储,并且可以访问。使用mfsfileinfo查看,发现还是原来的块。
  2. 对一个文件做快照后,查看两个文件的块信息,发现是同一个块。把原文件修改后,发现原文件的使用块信息变了,即使用了一个新块。而快照文件仍然使用原来的块,保持文件内容不变。
上一篇:【Python开发】Python中数据分析环境的搭建


下一篇:yii2.0中Rbac 怎么添加超加管理员