• 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. 对一个文件做快照后,查看两个文件的块信息,发现是同一个块。把原文件修改后,发现原文件的使用块信息变了,即使用了一个新块。而快照文件仍然使用原来的块,保持文件内容不变。
  • 相关阅读:
    SVN使用教程总结
    SVN
    js中设置元素class的三种方法小结
    Javascript 删除tr 元素
    SQL Server执行计划的理解
    java多线程知识点汇总(四)多线程知识点脉络图
    hibernate将connection放进threadlocal里实现数据库连接池
    数据库连接池中是将connection放进threadlocal里的
    java jdbc深入理解(connection与threadlocal与数据库连接池和事务实)
    java项目怎样添加jar包依赖?
  • 原文地址:https://www.cnblogs.com/liaojiafa/p/6068533.html
Copyright © 2020-2023  润新知