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. 對一個文件做快照后,查看兩個文件的塊信息,發現是同一個塊。把原文件修改后,發現原文件的使用塊信息變了,即使用了一個新塊。而快照文件仍然使用原來的塊,保持文件內容不變。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM