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個部分組成:
- info
這個部分顯示了MFS的基本信息。 - Servers
列出現有的ChunkServer。 - Disks
列出每一台ChunkServer的磁盤目錄以及使用量 - Exports
列出共享的目錄,既可以被掛載的目錄 - mounts
顯示被掛載的情況。 - Openrations
顯示正在執行的操作。 - Master Charts
顯示Master server的操作情況,包括讀取,寫入,創建目錄,刪除目錄等消息。 - 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,輔助文件系統可以在如下兩個方面恢復丟失的數據:
- MFS卷上誤刪除了文件,而此文件又沒有過垃圾文件存放期。
- 為了釋放磁盤空間而刪除或者移動的文件,當需要恢復這些文件時,文件又沒有過垃圾文件的存放期。
要使用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了。
這里說說目錄繼承副本數量的問題:
- 如果改變一個已經存在的文件副本份數,那么文件的副本份數就會擴大或刪除,這個過程會有延遲的。
- 對於一個目錄設定“目標”,此目錄下新創建的文件或子目錄均會繼承此目錄的設定,但不會改變已經存在的文件以及目錄副本數量。
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
- 先找到被刪除的文件
[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
- 恢復文件
移動這個文件到文件所在目錄下的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可以實現這個快照功能,當有多個源文件時,他們的快照會被加入到同一個目標文件中,通過對比快照的測試,可以發現快照的本質:
- 一個MFS系統下的文件做快照后,查看兩個文件的塊信息,他們是同一個塊。接着,把原文件刪除,刪除源文件后(最初會留在回收站上,但過一段時間后回收站的文件也刪除了),快照文件仍然存儲,並且可以訪問。使用mfsfileinfo查看,發現還是原來的塊。
- 對一個文件做快照后,查看兩個文件的塊信息,發現是同一個塊。把原文件修改后,發現原文件的使用塊信息變了,即使用了一個新塊。而快照文件仍然使用原來的塊,保持文件內容不變。