Moosefs管理小技巧分享
之前寫過一個(gè)初步介紹Moosefs基本概念的文章,僅是簡單測試之后,對mfs的一些理解和認(rèn)識(shí)。最近在實(shí)際環(huán)境中部署了一套MooseFS系統(tǒng),用于備份和其他之用,在這個(gè)過程中又遇到了些問題,于是又重新找來文檔復(fù)習(xí)理解了一遍,又加深了對MFS的了解,下面是這次學(xué)習(xí)的點(diǎn)點(diǎn)收獲和大家分享下。
1. 掛載目錄管理
Moosefs系統(tǒng)支持客戶端根據(jù)需要掛載對應(yīng)子目錄;默認(rèn)不指定-S的話會(huì)掛載到根目錄(/)下,當(dāng)通過df –sh查看空間使用used顯示的是當(dāng)前整個(gè)mfs系統(tǒng)的硬盤使用情況;而掛載子目錄則只會(huì)看到目錄的使用情況。具體操作如下:
- Shell> mfsmount /mnt –H mfsmaster — 掛載到根目錄(/)下
- Shell> mkdir –p /mnt/subdir
- Shell> umount /mnt
- Shell> mfsmount /mnt –H mfsmaster –S /subdir — 掛載到子目錄(/subdir)下
在Moosefs的管理中,可以找一臺(tái)機(jī)器作為管理型的client端,在配置文件mfsexports.cfg中限制只有該臺(tái)機(jī)器可以掛載到根目錄下,同時(shí)也可限制只有該臺(tái)機(jī)器可以掛載metadata目錄(恢復(fù)誤刪除時(shí)可用到),而其他普通client端,則根據(jù)不同業(yè)務(wù)的需要讓管理client端為其創(chuàng)建獨(dú)立用途的目錄,分別掛載到對應(yīng)的子目錄下,這樣就可以細(xì)化管理控制權(quán)限。Mfsexports.cfg的配置如下:
- # managing client
- 192.168.0.2 / rw,alldirs,maproot=0
- 192.168.0.2 . rw
- # for db backup sub-folder
- 192.168.0.20 /backup/db rw.maproot=0
- # for image sub-folder
- 192.168.0.30 /app/image rw.maproot=0
2. 客戶端重啟后自動(dòng)掛載mfs目錄
- Shell> vi /etc/rc.local
- /sbin/modprobe fuse
- /usr/bin/mfsmount /mnt1 -H mfsmaster -S /backup/db
- /usr/bin/mfsmount /mnt2 -H mfsmaster -S /app/image
Moosefs官方網(wǎng)頁上有提到,1.6.x以上的版本還可以通過/etc/fstab的方式,系統(tǒng)重啟后自動(dòng)掛載mfs文件系統(tǒng),測試之后,并沒有成功,原因是FUSE模塊沒有加載到內(nèi)核,所以,我覺得用/etc/fstab,F(xiàn)USE模塊需要事先將其編譯進(jìn)系統(tǒng)內(nèi)核中才行。fstab的配置如下:
- Shell> vi /etc/fstab
- mfsmount /mnt fuse mfsmaster=MASTER_IP,mfsport=9421,_netdev 0 0 (重啟系統(tǒng)后掛載MFS的根目錄)
- mfsmount /mnt fuse mfstermaster=MASTER_IP,mfsport=9421,mfssubfolder=/subdir,_netdev 0 0(重啟系統(tǒng)后掛載MFS的子目錄)
采用fstab配置文件掛載方式可以通過如下命令,測試是否配置正確:
- Shell> mount –a –t fuse
3. FUSE的安裝問題
FUSE模塊是mfsmount客戶端所依賴的模塊,我們所作的操作,先由FUSE接收,然后通過mfsmount進(jìn)程與mfsmaster聯(lián)系,***應(yīng)用到chunkserver上。FUSE(Filesystem in Userspace)叫作用戶態(tài)文件系統(tǒng),它提供了一個(gè)框架,讓我們開發(fā)的文件系統(tǒng)在用戶態(tài)下運(yùn)行操作,減少了開發(fā)文件系統(tǒng)與內(nèi)核模塊之間的過多接觸,了解后知道原來偉大的ZFS就是FUSE的。在Moosefs的文檔中,提到Linux內(nèi)核2.6.14以后的版本中都將支持FUSE模塊,也就是說在系統(tǒng)目錄/lib/modules/`uname -r`/kernel/fs/下會(huì)有一個(gè)fuse的子目錄,里面會(huì)包含一個(gè)fuse.ko的文件。當(dāng)我們編譯安裝好fuse后,執(zhí)行modprobe fuse命令,就可以動(dòng)態(tài)將FUSE模塊加載進(jìn)內(nèi)核,有時(shí)候會(huì)出現(xiàn)找不到該模塊的提示,那就是在/lib/modules/`uname -r`/kernel/fs/目錄下沒有fuse這個(gè)子目錄,缺少那個(gè)ko文件。本人安裝時(shí)就遇到了,內(nèi)核為2.6.18-92.el5,沒有fuse子目錄。當(dāng)時(shí)使用的fuse-2.8.5,默認(rèn)編譯安裝也沒有生成這個(gè)文件;后來韓老師幫我找問題,他用2.7.4版本默認(rèn)編譯安裝(沒添加任何configure選項(xiàng))后,modprobe便可以成功加載fuse模塊,這時(shí)fuse那個(gè)子目錄也被創(chuàng)建,網(wǎng)上有看到說需要加這個(gè)編譯項(xiàng)–enable-kernel-module。
4. Moosefs可以節(jié)省空間
不小心發(fā)現(xiàn)拷貝到mfs目錄下的文件大小比ext3下的小了很多,開始以為是少同步了一些文件,于是又將mfs下的所有文件拷回到ext3下,發(fā)現(xiàn)大小和之前的一致,于是,隱約感覺到mfs難道可以節(jié)省空間。測試后發(fā)現(xiàn),mfs對小文件(我用的是8K左右的)存儲(chǔ)空間的節(jié)省非常明顯,可以節(jié)省一半的空間,之后我又拷被了一個(gè)1.7G文件到mfs下,大小為1.6G。