分布式文件系统之MooseFS----管理优化
? ? ? ?接著上篇博文,上篇博文是講如何部署 MooseFS 的,部署完畢之后就要涉及到后續(xù)的使用了。在使用過程中,肯定會(huì)遇到一些故障和性能瓶頸。此時(shí),我們就需要去操心 MooseFS 的管理、維護(hù)和優(yōu)化工作了。
? ? ? ?本篇就圍繞上面提到的三個(gè)方面,介紹 MooseFS 更深入的一些知識(shí)。
一、高級(jí)功能
1、副本
? ? ? ?副本,在MFS中也被稱為目標(biāo)(Goal),它是指文件被復(fù)制的份數(shù),設(shè)定目標(biāo)值后可以通過mfsgetgoal命令來證實(shí),也可以通過mfssetgoal命令來改變?cè)O(shè)定。
| 1 2 3 4 5 6 7 8 9 10 11 | [root@mfs-client?~]#?cd?/mfsdata/ [root@mfs-client?mfsdata]#?dd?if=/dev/zero?of=/mfsdata/test.file?bs=1M?count=200? 200+0?records?in? 200+0?records?out? 209715200?bytes?(210?MB)?copied,?9.1094?s,?23.0?MB/s? [root@mfs-client?mfsdata]#?mfsgetgoal?test.file? test.file:?1? [root@mfs-client?mfsdata]#?mfssetgoal?3?test.file? test.file:?3? [root@mfs-client?mfsdata]#?mfsgetgoal?test.file? test.file:?3 |
補(bǔ)充:
用mfsgetgoal –r和mfssetgoal –r同樣的操作可以對(duì)整個(gè)樹形目錄遞歸操作
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@mfs-client?mfsdata]#?mkdir?dir/dir1/dir2/dir3?-p? [root@mfs-client?mfsdata]#?touch?dir/file1? [root@mfs-client?mfsdata]#?touch?dir/dir1/file2? [root@mfs-client?mfsdata]#?touch?dir/dir1/dir2/file3 [root@mfs-client?mfsdata]#?mfsgetgoal?-r?dir? dir:? files?with?goal?1?:?3? directories?with?goal?1?:?4 [root@mfs-client?mfsdata]#?mfssetgoal?-r?3?dir? dir:? inodes?with?goal?changed:?7? inodes?with?goal?not?changed:?0? inodes?with?permission?denied:?0 |
? ? ? ?實(shí)際的拷貝份數(shù)可以通過mfscheckfile 和 mfsfileinfo 命令來證實(shí),例如:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@mfs-client?mfsdata]#?mfscheckfile?test.file? test.file:? chunks?with?1?copy:?4? [root@mfs-client?mfsdata]#?mfsfileinfo?test.file? test.file:? chunk?0:?00000000000000D2_00000001?/?(id:210?ver:1)? copy?1:?172.16.100.6:9422? chunk?1:?00000000000000D3_00000001?/?(id:211?ver:1)? copy?1:?172.16.100.7:9422? chunk?2:?00000000000000D4_00000001?/?(id:212?ver:1)? copy?1:?172.16.100.6:9422? chunk?3:?00000000000000D5_00000001?/?(id:213?ver:1)? copy?1:?172.16.100.7:9422 |
? ? ? ?需要注意的是,一個(gè)包含數(shù)據(jù)的零長(zhǎng)度的文件,盡管沒有設(shè)置為非零的目標(biāo)(the non-zero goal),但是在使用命令查詢時(shí)將返回一個(gè)空值
| 1 2 3 4 5 | [root@mfs-client?mfsdata]#?touch?a? [root@mfs-client?mfsdata]#?mfscheckfile?a? a:? [root@mfs-client?mfsdata]#?mfsfileinfo?a? a: |
2、回收
? ? ? ?一個(gè)刪除文件能夠存放在一個(gè)“垃圾箱”的時(shí)間就是一個(gè)隔離時(shí)間,這個(gè)時(shí)間可以用 mfsgettrashtime 命令來驗(yàn)證,也可以用 mfssettrashtime 命令來設(shè)置。例如:
| 1 2 3 4 5 6 | [root@mfs-client?mfsdata]#?mfsgettrashtime?test.file? test.file:?86400 [root@mfs-client?mfsdata]#?mfssettrashtime?0?test.file? test.file:?0 $?mfsgettrashtime?/mnt/mfs-test/test1 /mnt/mfs-test/test1:?0 |
這些工具也有個(gè)遞歸選項(xiàng)-r,可以對(duì)整個(gè)目錄樹操作,例如:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@mfs-client?mfsdata]#?mfsgettrashtime?-r?dir? dir:? files?with?trashtime?86400?:?3? directories?with?trashtime?86400?:?4? [root@mfs-client?mfsdata]#?mfssettrashtime?-r?0?dir? dir:? inodes?with?trashtime?changed:?7? inodes?with?trashtime?not?changed:?0? inodes?with?permission?denied:?0? [root@mfs-client?mfsdata]#?mfsgettrashtime?-r?dir? dir:? files?with?trashtime?0?:?3? directories?with?trashtime?0?:?4 |
? ? ? ?時(shí)間的單位是秒(有用的值有:1小時(shí)是3600秒,24 – 86400秒,1 – 604800秒)。就像文件被存儲(chǔ)的份數(shù)一樣, 為一個(gè)目錄 設(shè)定存放時(shí)間是要被新創(chuàng)建的文件和目錄所繼承的。數(shù)字0意味著一個(gè)文件被刪除后, 將立即被徹底刪除,在想回收是不可能的
? ? ? ?刪除文件可以通過一個(gè)單獨(dú)安裝 MFSMETA 文件系統(tǒng)。特別是它包含目錄 / trash (包含任然可以被還原的被刪除文件的信息)和 / trash/undel (用于獲取文件)。只有管理員有權(quán)限訪問MFSMETA(用戶的uid 0,通常是root)。
? ? ? ?在開始mfsmount進(jìn)程時(shí),用一個(gè)-m或-o mfsmeta的選項(xiàng),這樣可以掛接一個(gè)輔助的文件系統(tǒng)MFSMETA,這么做的目的是對(duì)于意外的從MooseFS卷上刪除文件或者是為了釋放磁盤空間而移動(dòng)的文件而又此文件又過去了垃圾文件存放期的恢復(fù),例如:
| 1 | mfsmount?-m?/mnt/mfsmeta |
需要注意的是,如果要決定掛載mfsmeta,那么一定要在 mfsmaster 的 mfsexports.cfg 文件中加入如下條目:
| 1 | *???????????????????????.???????rw |
原文件中有此條目,只要將其前的#去掉就可以了。
否則,你再進(jìn)行掛載mfsmeta的時(shí)候,會(huì)報(bào)如下錯(cuò)誤:
| 1 | mfsmaster?register?error:?Permission?denied |
下面將演示此操作:
| 1 2 | $?mfssettrashtime?3600?/mnt/mfs-test/test1 /mnt/mfs-test/test1:?3600 |
? ? ? ?從“垃圾箱”中刪除文件結(jié)果是釋放之前被它站用的空間(刪除有延遲,數(shù)據(jù)被異步刪除)。在這種被從“垃圾箱”刪除的情況下,該文件是不可能恢復(fù)了。
? ? ? ?可以通過mfssetgoal工具來改變文件的拷貝數(shù),也可以通過mfssettrashtime工具來改變存儲(chǔ)在“垃圾箱”中的時(shí)間。
? ? ? ?在 MFSMETA 的目錄里,除了trash和trash/undel兩個(gè)目錄外,還有第三個(gè)目錄reserved,該目錄內(nèi)有已經(jīng)刪除的文件,但卻有一直打開著。在用戶關(guān)閉了這些被打開的文件后,reserved目錄中的文件將被刪除,文件的數(shù)據(jù)也將被立即刪除。在reserved目錄中文件的命名方法同trash目錄中的一樣,但是不能有其他功能的操作。
3、快照
? ? ? ?MooseFS系統(tǒng)的另一個(gè)特征是利用mfsmakesnapshot工具給文件或者是目錄樹做快照,例如:
| 1 | $?mfsmakesnapshot?source?...?destination |
? ? ? ?Mfsmakesnapshot 是在一次執(zhí)行中整合了一個(gè)或是一組文件的拷貝,而且任何修改這些文件的源文件都不會(huì)影響到源文件的快照, 就是說任何對(duì)源文件的操作,例如寫入源文件,將不會(huì)修改副本(或反之亦然)。
? ? ? ?文件快照可以用mfsappendchunks,就像MooseFS1.5中的mfssnapshot一樣,,作為選擇,二者都可以用。例如:
| 1 | $?mfsappendchunks?destination-file?source-file?... |
? ? ? ?當(dāng)有多個(gè)源文件時(shí),它們的快照被加入到同一個(gè)目標(biāo)文件中(每個(gè)chunk的最大量是chunk)。五、額外的屬性文件或目錄的額外的屬性(noowner, noattrcache, noentrycache),可以被mfsgeteattr,mfsseteattr,mfsdeleattr工具檢查,設(shè)置,刪除,其行為類似mfsgetgoal/mfssetgoal or或者是mfsgettrashtime/mfssettrashtime,詳細(xì)可見命令手冊(cè)。
二、綜合測(cè)試
1、破壞性測(cè)試
?a、模擬MFS各角色宕機(jī)測(cè)試
?b、mfs 災(zāi)難與恢復(fù)各種場(chǎng)景測(cè)試
2、性能測(cè)試
? ? ? ?針對(duì) MooseFS 的性能測(cè)試,我這邊也沒有詳細(xì)去做。通過偉大的互聯(lián)網(wǎng),我找到了幾位前輩,針對(duì) MooseFS 所做的詳細(xì)性能測(cè)試,這里我就貼出來展示一下。
1、基準(zhǔn)測(cè)試情況:
隨機(jī)讀
隨機(jī)寫
順序讀
順序?qū)?/span>
小文件性能測(cè)試情況:
? ? ? ? 如果想看更多有關(guān) MooseFS 性能方面的測(cè)試報(bào)告,可以去參考如下鏈接:
? ? ? ? http://blog.liuts.com/post/203/? ? ? ? ??MooseFS性能圖表[原創(chuàng)]
三、監(jiān)控
1、mfs內(nèi)置的監(jiān)控工具mfscgiserv
? ? ? ?針對(duì) Moosefs 每個(gè)組件的監(jiān)控,Moosefs自帶了一個(gè)監(jiān)控工具 mfscgiserv,它是一個(gè) python 編寫的 web 監(jiān)控頁(yè)面,監(jiān)聽端口為9425。該監(jiān)控頁(yè)面為我們提供了 Master Server、Metalogger Server、Chunk Servers以及所有Client掛載的狀態(tài)信息及相關(guān)性能指標(biāo)圖示。
? ? ? ?在我們安裝好 Master Server 時(shí),它就已經(jīng)默認(rèn)安裝上了,我們可以在/usr/local/mfs/share/mfscgi/ ?目錄下看到這個(gè)監(jiān)控頁(yè)面的文件。
| 1 2 3 4 5 6 7 8 9 | [root@mfs-master-1?mfs]#?ll?/usr/local/mfs/share/mfscgi/?????????#?這個(gè)?mfscgi?目錄里面存放的是master圖形監(jiān)控界面的程序 total?136? -rwxr-xr-x.?1?root?root?1881?Dec?29?00:10?chart.cgi? -rw-r--r--.?1?root?root?270?Dec?29?00:10?err.gif? -rw-r--r--.?1?root?root?562?Dec?29?00:10?favicon.ico? -rw-r--r--.?1?root?root?510?Dec?29?00:10?index.html? -rw-r--r--.?1?root?root?3555?Dec?29?00:10?logomini.png? -rwxr-xr-x.?1?root?root?107456?Dec?29?00:10?mfs.cgi? -rw-r--r--.?1?root?root?5845?Dec?29?00:10?mfs.css |
? ? ? ?我們可以通過執(zhí)行如下命令啟動(dòng)該監(jiān)控程序。
| 1 | /moosefs_install_path/sbin/mfscgiserv?start |
? ? ? ?啟動(dòng)完畢之后,我們可以通過訪問http://IP:9425來訪問該監(jiān)控頁(yè)面。
? ? ? ?下面,我列出啟動(dòng) mfscgiserv 監(jiān)控工具的操作:
| 1 2 3 4 5 6 7 8 9 10 11 12 | [root@mfs-master-1?mfs]#?/usr/local/mfs/sbin/mfscgiserv?start???#?啟動(dòng)mfs圖形控制臺(tái)? lockfile?created?and?locked? starting?simple?cgi?server?(host:?any?,?port:?9425?,?rootpath:?/usr/local/mfs-1.6.27/share/mfscgi) [root@mfs-master-1?mfs]#?netstat?-lantup|grep?9425? tcp?0?0?0.0.0.0:9425?0.0.0.0:*?LISTEN?7940/python? tcp?0?0?172.16.100.1:9425?172.16.100.100:50693?ESTABLISHED?7940/python? tcp?0?0?172.16.100.1:9425?172.16.100.100:50692?ESTABLISHED?7940/python? [root@mfs-master-1?mfs]#?lsof?-i?tcp:9425? COMMAND?PID?USER?FD?TYPE?DEVICE?SIZE/OFF?NODE?NAME? python?7940?root?3u?IPv4?27066?0t0?TCP?*:9425?(LISTEN)? python?7940?root?7u?IPv4?27136?0t0?TCP?172.16.100.1:9425->172.16.100.100:50693?(ESTABLISHED)? python?7940?root?8u?IPv4?27124?0t0?TCP?172.16.100.1:9425->172.16.100.100:50692?(ESTABLISHED) |
下面是訪問的頁(yè)面:
2、使用zabbix監(jiān)控mfs
1、監(jiān)控要點(diǎn)
? ? ? ? 根據(jù) MooseFS 中各個(gè)組件的特點(diǎn),我們所需要監(jiān)控的要點(diǎn)主要有如下幾點(diǎn):
? ? ? ? a、Master Server的9420、9421端口,Chunk Server 的9422端口
? ? ? ? b、Chunk Server 的磁盤空間
2、實(shí)施步驟
? ? ? ? 通過在各個(gè)組件的對(duì)應(yīng)服務(wù)器上部署好zabbix監(jiān)控的代理端,然后分別添加端口監(jiān)控和磁盤監(jiān)控即可!
? ? ? ? 操作過程略!
八、維護(hù)
1、常用管理命令
| 1 2 3 4 5 6 7 8 | mfsgetgoal??????????????#?獲取mfs目錄、文件的副本數(shù) mfssetgoal??????????????#?設(shè)置mfs目錄、文件的副本數(shù) mfscheckfile????????????#?查看副本數(shù)簡(jiǎn)單 mfsfileinfo?????????????#?查看詳細(xì)的副本數(shù),chunks/分片 mfsdirinfo??????????????#?以數(shù)量的方法顯示mfsfileinfo mfsgettrashtime?????????#?獲取垃圾箱的定隔時(shí)間 mfssettrashtime?????????#?設(shè)置垃圾箱的定隔時(shí)間(和memcached類) mfsmakesnapshot?????????#?快照 |
2、可能存在的問題
A、mfscgiserv的訪問安全問題
? ? ? ?mfscgiserv只是一個(gè)非常簡(jiǎn)單的HTTP服務(wù)器,只用來編寫運(yùn)行MooseFS CGI腳本。它不支持任何的附加功能,比如HTTP認(rèn)證。如果公司出于對(duì)監(jiān)控界面的安全訪問需求,我們可以使用功能豐富的HTTP服務(wù)器,比如apache、nginx等。在使用這些更強(qiáng)大的HTTP服務(wù)器時(shí),我們只需要將CGI和其它數(shù)據(jù)文件(index.html、mfs.cgi、chart.cgi、mfs.css、logomini.png、err.gif)存放到選擇的站點(diǎn)根目錄下。我們可以創(chuàng)建一個(gè)新的虛擬機(jī),來設(shè)定特定的主機(jī)名和端口來進(jìn)行訪問。
B、Master Server 的單點(diǎn)問題
? ? ? ?Master server的單點(diǎn)問題,在前面介紹 MooseFS 的優(yōu)缺點(diǎn)時(shí)已經(jīng)提到過了。由于官方提供的解決方案,在恢復(fù)的時(shí)候還是需要一定時(shí)間的,因此我們建議使用第三方的高可用方案(heartbeat+drbd+moosefs)來解決 Master Server 的單點(diǎn)問題。
3、性能瓶頸的解決辦法
? ? ? ?由于 MooseFS 的高可擴(kuò)展性,因此我們可以很輕松的通過增加 Chunk Server 的磁盤容量或增加 Chunk Server 的數(shù)量來動(dòng)態(tài)擴(kuò)展整個(gè)文件系統(tǒng)的存儲(chǔ)量和吞吐量,這些操作絲毫不會(huì)影響到在線業(yè)務(wù)。
4、安全開啟/停止MFS集群
1、啟動(dòng) MooseFS 集群
安全的啟動(dòng) MooseFS 集群(避免任何讀或?qū)懙腻e(cuò)誤數(shù)據(jù)或類似的問題)的步驟如下:
? ? ? ?1、啟動(dòng) mfsmaster 進(jìn)程
? ? ? ?2、啟動(dòng)所有的 mfschunkserver 進(jìn)程
? ? ? ?3、啟動(dòng) mfsmetalogger 進(jìn)程(如果配置了mfsmetalogger)
? ? ? ?4、當(dāng)所有的 chunkservers 連接到 MooseFS master 后,任何數(shù)目的客戶端可以利用 mfsmount 去掛載被 export 的文件系統(tǒng)。(可以通過檢查 master 的日志或是 CGI 監(jiān)控頁(yè)面來查看是否所有的chunkserver 被連接)。
2、停止 MooseFS 集群
安全的停止 MooseFS 集群的步驟如下:
? ? ? ?1、在所有的客戶端卸載MooseFS 文件系統(tǒng)(用umount命令或者是其它等效的命令)
? ? ? ?2、用?mfschunkserver –s命令停止chunkserver進(jìn)程
? ? ? ?3、用 mfsmetalogger –s命令停止metalogger進(jìn)程
? ? ? ?4、用 mfsmaster –s命令停止master進(jìn)程
5、增加塊設(shè)備(會(huì)自動(dòng)平均)
? ? ? ? 針對(duì)增加塊設(shè)備的情況,其實(shí)就是說針對(duì)chunk server 有變化(增加或減少)的情況。
? ? ? ? 為了增加一個(gè)案例說明,這里就以 UC 在使用 MooseFS 中遇到的一個(gè)問題為案例,講解新增加 chunk server 時(shí),MooseFS集群發(fā)生的變化,其實(shí)也就是 Master Server 發(fā)生的變化。
? ? ? ? UC在使用 MooseFS 集群的過程中,有次一臺(tái) Chunk Server 掛了,于是就涉及到了后期的恢復(fù)問題。在問題Chunk Server修復(fù)之后,就從新加入到了集群當(dāng)中。此時(shí),新增加的 chunk server 啟動(dòng)之后會(huì)向 Master 匯報(bào) Chunk 的信息,Master接收到 Chunk 信息之后會(huì)逐個(gè)檢查 Chunk_id是否存在。如果不存在,就表示該chunk_id其實(shí)已經(jīng)刪除了(chunk_id過期),然后會(huì)調(diào)用chunk_new()創(chuàng)建該chunk,并設(shè)置lockedio屬性為7天后。這些操作都是屬于內(nèi)存操作,并且Master是單線程的進(jìn)程,并不存在全局鎖,因此不會(huì)導(dǎo)致 Master 阻塞無響應(yīng)。因此,針對(duì)增加chunk server的情況,是不會(huì)對(duì)MooseFS集群產(chǎn)生什么大的影響的。
? ? ? ? 以上就是新增加 Chunk Server 后的,MooseFS 集群中 Master Server 的變化。而針對(duì)各個(gè)Chunk Server,Master Server會(huì)重新去調(diào)整塊文件的磁盤空間,然后全部重新動(dòng)態(tài)分配塊文件。如果遇到空間不夠的磁盤,Master Server會(huì)自動(dòng)調(diào)整塊文件的分布,從不夠的磁盤里動(dòng)態(tài)的把塊服務(wù)移動(dòng)到有大的磁盤塊服務(wù)器里
? ? ? ? 當(dāng)然,如果按照上面的情況這次就不會(huì)是故障了,因此并不會(huì)對(duì) MooseFS 集群產(chǎn)生什么大的影響。由于他們當(dāng)時(shí)因?yàn)橘Y源緊張,就把 Master Server 放到了虛擬機(jī)上,而虛擬機(jī)的磁盤是掛載的iscsi磁盤。并且他們的MooseFS使用的版本并不是最新的1.6.27,而是1.6.19。在1.6.19版本中,會(huì)把chunk的匯報(bào)過程寫入磁盤,這樣就導(dǎo)致了幾十萬條的磁盤寫入,由于磁盤是前面提到的網(wǎng)絡(luò)盤,就最終釀成了 Master Server 恢復(fù)時(shí)無響應(yīng)幾十分鐘。
? ? ? ? ?因此,我們?cè)谏a(chǎn)環(huán)境中,針對(duì)Master Server的選型一定不能使用虛擬機(jī),而是使用大內(nèi)存量的物理機(jī)。
本文轉(zhuǎn)自 aaao 51CTO博客,原文鏈接:http://blog.51cto.com/nolinux/1602616,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的分布式文件系统之MooseFS----管理优化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: gzip,bzip2压缩工具及tar打包
- 下一篇: Everything you need