首页 > 代码库 > 分布式系统四、MooseFS管理

分布式系统四、MooseFS管理

一、goal(副本)

      副本,在MFS中也被称为目标(Goal),它是指文件被复制的份数,设定目标值后可以通过mfsgetgoal命令来证实,也可以通过mfssetgoal命令来改变设定。

[root@Node1 ~]# cd /mnt
[root@Node1 mnt]# ls
Test
[root@Node1 mnt]# mfsgetgoal Test      #默认没有副本
Test: 1
[root@Node1 mnt]# mfssetgoal 3 Test    #设置3个副本
Test: 3
[root@Node1 mnt]# mfsgetgoal Test   
Test: 3
[root@Node1 mnt]# mfs
mfsappendchunks   mfsfilepaths      mfsmakesnapshot   mfsseteattr
mfscheckfile      mfsfilerepair     mfsmount          mfssetgoal
mfsdeleattr       mfsgeteattr       mfsrgetgoal       mfssetquota
mfsdelquota       mfsgetgoal        mfsrgettrashtime  mfssettrashtime
mfsdirinfo        mfsgetquota       mfsrsetgoal       mfstools
mfsfileinfo       mfsgettrashtime   mfsrsettrashtime  
[root@Node1 mnt]# mfscheckfile Test
Test:
 chunks with 2 copies:            1    #只有2个存储块
[root@Node1 mnt]# mfsfileinfo Test
Test:
	chunk 0: 0000000000000003_00000001 / (id:3 ver:1)
		copy 1: 192.168.10.3:9422
		copy 2: 192.168.10.4:9422
[root@Node1 mnt]# mfsdirinfo Test
Test:
 inodes:                          1
  directories:                    0
  files:                          1
 chunks:                          1
 length:                          6
 size:                        70656
 realsize:                   211968

注意:

       当你指定的副本数大于chunk的数目时,会按照实际chunk的数目来保存副本数。

因为一个chunk不存放重复的文件,还有当所有的组件被安装到同一个物理主机的时候,即便设定了goal=2 来到达保存两个副本的目的,但你可能看到的只是一个副本而已,这是合理的,尽管有两个磁盘,但它只是一个chunk server 啊!

     拷贝份数尽量和chunkserver这个服务的数量保持一致,比较易于管理,数据额安全性也得到保障。

[root@Node1 mnt]# mkdir src
[root@Node1 mnt]# mfsgetgoal src
src=http://www.mamicode.com/‘#/‘" / (id:4 ver:1)
		copy 1: 192.168.10.3:9422
		copy 2: 192.168.10.4:9422
[root@Node1 src]# mfsdirinfo a
a:
 inodes:                          1
  directories:                    0
  files:                          1
 chunks:                          1
 length:                          6
 size:                        70656
 realsize:                   353280
[root@Node1 src]# mfsgetgoal a
a: 5

二、回收

      一个删除的文件能够存放在一个“垃圾箱”的时间就是一个隔离时间,这个时间可以用 mfsgettrashtime 命令来验证,也可以用 mfssettrashtime 命令来设置。

例如:

[root@Node1 mnt]# echo 111 >test1
[root@Node1 mnt]# 
[root@Node1 mnt]# mfsgettrashtime test1
test1: 86400                     #垃圾箱文件保留期默认是1天,86400秒 
[root@Node1 mnt]# mfssettrashtime 300 test1
test1: 300
[root@Node1 mnt]# mfsgettrashtime test1
test1: 300
[root@Node1 mnt]#

这些工具也有个递归选项-r,可以对整个目录树操作,例如:

[root@Node1 mnt]# mfsgettrashtime src
src=http://www.mamicode.com/‘#/‘" /pre>

       时间的单位是秒(有用的值有:1小时是3600秒,24 – 86400秒,1 – 604800秒)。就像文件被存储的份数一样, 为一个目录 设定存放时间是要被新创建的文件和目录所继承的。数字0意味着一个文件被删除后(不会存放在垃圾箱里), 将立即被彻底删除,在想回收是不可能的
       恢复垃圾箱里文件可以通过一个单独安装 MFSMETA 文件系统。特别是它包含目录 / trash (包含任然可以被还原的被删除文件的信息)和 / trash/undel (用于获取文件)。只有管理员有权限访问MFSMETA(用户的uid 0,通常是root)。

       在开始mfsmount进程时,用一个-m或-o mfsmeta的选项,这样可以挂接一个辅助的文件系统MFSMETA,这么做的目的是对于意外的从MooseFS卷上删除文件或者是为了释放磁盘空间而移动的文件

例如:

[root@Node1 ~]# mkdir /mfsmetas
[root@Node1 ~]# mfsmount /mfsmetas -H 192.168.10.2 -m
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@Node1 ~]# ls /mnt
src  Test  test1
[root@Node1 ~]# ls /mfsmetas/
sustained  trash

注意: 
       需要注意的是,如果要决定挂载mfsmeta,那么一定要在 mfsmaster 的 mfsexports.cfg 文件中有如下条目否则会报错(默认是有的):

# Allow "meta".
*                       .       rw

    1)mfsmeta的挂载目录不需要执行chown –R mfs.mfs
    2)  在这个目录下进行恢复意外删除文件的时候,必须使用root账户进行操作 
    3)   原来的位置下不能有一个已存在的与被删文件同名的文件,否则恢复不会成功。

    4)/mfsmetas/sustained  该目录内有已经删除的文件,但却有一直打开着。在用户关闭了这些被打开的文件后,目录中的文件将被删除,文件的数据也将被立即删除。在sustained目录中文件的命名方法同trash目录中的一样,但是不能有其他功能的操作。

     5) 从“垃圾箱”中删除文件结果是释放之前被它站用的空间(删除有延迟,数据被异步删除)。在这种被从“垃圾箱”删除的情况下,该文件是不可能恢复了。


恢复流程:
  1)/mfsmetas/sustained、/mfsmetas/trash 出现这两个目录
  2)有/mfsmetas/trash/undel的目录,还有一些被删除的以8位16进制命名的目录,并且以"|"作为目录符号,再加上被删除文件名字。(如果文件名字大于系统支持的255最大长度时,将从左到右进行裁剪,直到满足255)
规则:00000009|1,1代表删除的文件。
0000002E|123|tst 代表123目录下tst文件,如果123目录被一起删除,
恢复的时候123这个目录也会被一同恢复出来。
  3)如果想恢复文件,把00000009|1该文件移动到/mnt/mfsmeta/trash/undel下,文件即可恢复。

例如:

[root@Node1 ~]# cd /mnt
[root@Node1 mnt]# ls
src  Test  test1
[root@Node1 mnt]# touch xj
[root@Node1 mnt]# touch xxj
[root@Node1 mnt]# mfsgettrashtime xj
xj: 86400
[root@Node1 mnt]# mfssettrashtime 180 xxj
xxj: 180
[root@Node1 mnt]# mfsgettrashtime xxj
xxj: 180
[root@Node1 mnt]# ls /mfsmetas/trash/
00000002|Test   00000005|111|Test  00000007|test4  undel
00000003|test1  00000006|test2     0000000C|test1
[root@Node1 mnt]# ls /mfsmetas/trash/undel/

[root@Node1 mnt]# ls
src  Test  test1  xj  xxj
[root@Node1 mnt]# rm xj xxj
rm:是否删除普通空文件 "xj"?y
rm:是否删除普通空文件 "xxj"?y
[root@Node1 mnt]# ls
src  Test  test1
[root@Node1 mnt]# cd /mfsmetas/trash/
[root@Node1 trash]# ls
00000002|Test   00000005|111|Test  00000007|test4  0000000E|xj   undel
00000003|test1  00000006|test2     0000000C|test1  0000000F|xxj
[root@Node1 trash]# mfsgettrashtime 0000000E\|xj 
0000000E|xj: 86400
[root@Node1 trash]# mfsgettrashtime 0000000F\|xxj
0000000F|xxj: 180
[root@Node1 trash]# mfsgetgoal 0000000F\|xxj
0000000F|xxj: 1
[root@Node1 trash]# mfsgetgoal 00000002\|Test 
00000002|Test: 2
[root@Node1 trash]# mfsfileinfo 00000002\|Test 
00000002|Test:
	chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
		copy 1: 192.168.10.3:9422
		copy 2: 192.168.10.4:9422
[root@Node1 trash]# date
2016年 09月 23日 星期五 15:24:47 CST
[root@Node1 trash]# ll
总用量 1
-rw-r--r-- 1 root root 6 9月  23 12:33 00000002|Test
-rw-r--r-- 1 root root 0 9月  23 13:04 00000003|test1
-rw-r--r-- 1 root root 6 9月  23 13:28 00000005|111|Test
-rw-r--r-- 1 root root 0 9月  23 13:48 00000006|test2
-rw-r--r-- 1 root root 0 9月  23 13:50 00000007|test4
-rw-r--r-- 1 root root 0 9月  23 14:34 0000000C|test1
-rw-r--r-- 1 root root 0 9月  23 15:18 0000000E|xj
-rw-r--r-- 1 root root 0 9月  23 15:19 0000000F|xxj      #时间已经 过了3分钟怎么还在这垃圾箱里?
d-w------- 2 root root 0 9月  23 15:25 undel
[root@Node1 trash]# ls undel/
[root@Node1 trash]# ls /mnt
src  Test  test1
[root@Node1 trash]# cp 0000000E\|xj undel/
cp: 无法创建普通文件"undel/0000000E|xj": 函数未实现
[root@Node1 trash]# mv 0000000E\|xj undel/
[root@Node1 trash]# ls /mnt
src  Test  test1  xj
[root@Node1 trash]# ls
00000002|Test   00000005|111|Test  00000007|test4  0000000F|xxj
00000003|test1  00000006|test2     0000000C|test1  undel
[root@Node1 trash]# ls                         #过了段时间再看是没有了,这还会延时啊
00000002|Test   00000005|111|Test  00000007|test4  undel
00000003|test1  00000006|test2     0000000C|test1


本文出自 “xiexiaojun” 博客,请务必保留此出处http://xiexiaojun.blog.51cto.com/2305291/1855860

分布式系统四、MooseFS管理