首页 > 代码库 > 分布式系统四、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". * . rw1)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管理