MooseFS的簡(jiǎn)介、部署及應(yīng)用
mooseFS簡(jiǎn)介
MooseFS正式的推出是在2008-05-30,到2009-10-12為止,最新的版本是1.5.12。
mooseFS是一款網(wǎng)絡(luò)分布式文件系統(tǒng)。它把數(shù)據(jù)分散在多臺(tái)服務(wù)器上,但對(duì)于用戶(hù)來(lái)講,看到的只是一個(gè)源。MFS也像其他類(lèi)unix文件系統(tǒng)一樣,包含了層級(jí)結(jié)構(gòu)(目錄樹(shù)),存儲(chǔ)著文件屬性(權(quán)限,最后訪問(wèn)和修改時(shí)間),可以創(chuàng)建特殊的文件(塊設(shè)備,字符設(shè)備,管道,套接字),符號(hào)鏈接,硬鏈接。
mooseFS系統(tǒng)的組成
1.master(元數(shù)據(jù)服務(wù)器)
master負(fù)責(zé)在整個(gè)系統(tǒng)中管理數(shù)據(jù)。是整個(gè)系統(tǒng)的維護(hù)者。但是它有個(gè)弱點(diǎn)就是master只有一個(gè)!也就是說(shuō)如果master壞掉,整個(gè)系統(tǒng)將停止工作!不過(guò)這算不上致命弱點(diǎn),因?yàn)槲覀冏龊脭?shù)據(jù)備份以后,恢復(fù)master是很簡(jiǎn)單的事。
2.chunkserver(數(shù)據(jù)存儲(chǔ)服務(wù)器)
chunkserver是mfs系統(tǒng)中的數(shù)據(jù)存儲(chǔ)者。真正的用戶(hù)數(shù)據(jù)按照算法被分成chunk,并分發(fā)到各個(gè)chunkserver上。這樣就保證了數(shù)據(jù)的安全性。
3.client
凡是使用mfs文件系統(tǒng)的機(jī)器都可以被稱(chēng)為client。client是mfs系統(tǒng)的使用者。當(dāng)client把mfs文件系統(tǒng)掛載到本機(jī)以后,它可以像使用一個(gè)普通的磁盤(pán)分區(qū)一樣,來(lái)使用mfs。#p#
試驗(yàn)環(huán)境
本文只介紹moosefs的部署與應(yīng)用,出于試驗(yàn)的目的,并沒(méi)有考慮性能因素,因此所有的服務(wù)器均使用虛擬機(jī)來(lái)實(shí)現(xiàn)。以后有機(jī)會(huì)做單獨(dú)的物理服務(wù)器,然后對(duì)其性能進(jìn)行測(cè)試。
拓?fù)鋱D
備注:
(1) chunkserver1-4 均添加了一塊虛擬的磁盤(pán)sda(磁盤(pán)空間一定要大于1G,我這里設(shè)置了4G),掛載到系統(tǒng)的/data下。所有服務(wù)器均升級(jí)內(nèi)核為2.6.18-164本版,為什么要升級(jí)內(nèi)核,下文會(huì)有介紹。
(2) 所有服務(wù)器均安裝了完整版的mfs組件
安裝與配置
安裝mfs的前提條件
由于mfs的客戶(hù)端程序也就是加載mfs磁盤(pán)系統(tǒng)的命令是使用fuse編寫(xiě)的,因此只要是想掛載mfs的服務(wù)器,必要的前提條件就是先安裝fuse,這樣編譯mfs的時(shí)候才能順利通過(guò)。另外一點(diǎn)需要注意:linux 2.6.18-164.e15 版本的linux內(nèi)核中已經(jīng)內(nèi)置了fuse模塊。但在該版本之前的linux內(nèi)核中是不包含這個(gè)模塊的。另fuse 從2.8.0-pre1 版本的源碼包中去掉了fuse系統(tǒng)模塊的源碼部分,原因就是上一點(diǎn)提到的。這樣我們?cè)诰幾g安裝當(dāng)前最新版本的fuse(2.8以上版本) 且正在使用的linux內(nèi)核版本低于2.6.18-164.e15版本,則系統(tǒng)中是不包含fuse模塊的。
解決的方法:
1、升級(jí)系統(tǒng)內(nèi)核為2.6.18-164版本
為了方便起見(jiàn)直接利用yum升級(jí)系統(tǒng)內(nèi)核即可。yum install kernel
安裝成功后需重啟系統(tǒng)
2、使用fuse 2.7x版本編譯安裝
該版本的fuse中包含了linux內(nèi)核需要的fuse模塊,配置編譯選項(xiàng)時(shí)指定 –enable-kernel-module 選項(xiàng),make的時(shí)候就會(huì)編譯相應(yīng)的fuse模塊,make intall會(huì)將fuse.ko復(fù)制到 /lib/modules/`uname -r`/kernel/fs/fuse/ 目錄下 安裝后利用
- # modprobe -l | grep fuse
- /lib/modules/2.6.18-128.el5xen/kernel/fs/fuse/fuse.ko
查看是否正常安裝
3、利用yum安裝當(dāng)前內(nèi)核版本的fuse模塊
- yum install -y dkms-fuse dkms
安裝fuse
如果只編譯元數(shù)據(jù)服務(wù)端或數(shù)據(jù)存儲(chǔ)服務(wù)端的話是沒(méi)有必要安裝fuse的。只有mfsmount需要fuse支持(編譯時(shí)需要fuse的開(kāi)發(fā)包,使用mfsmount掛載時(shí)需要fuse.ko系統(tǒng)模塊)。可以使用源碼或yum兩種方式安裝fuse
1、源碼安裝
- # wget http://ncu.dl.sourceforge.net/project/fuse/fuse-2.X/2.8.1/fuse-2.8.1.tar.gz
- # tar -xvzf fuse-2.8.1.tar.gz
- # cd fuse-2.8.1
- # ./configure –prefix=/usr/ –libdir=/usr/lib64
- # make && make install
由于我系統(tǒng)為64位,因此在編譯fuse時(shí)將lib目錄定為/usr/lib64。這樣在下面編譯安裝mfs時(shí)就不會(huì)因?yàn)檎也坏絝use的lib文件報(bào)錯(cuò)了。
2、yum安裝
- # yum install -y fuse fuse-devel
安裝mfs
- # useradd mfs -s /sbin/nologin
- # ./configure –prefix=/usr/local/mfs –with-default-user=mfs –with-default-group=mfs –enable-mfsmount
- # make && make install
查看安裝后目錄結(jié)構(gòu)
- # ll /usr/local/mfs/
- total 20
- drwxr-xr-x 2 root root 4096 Oct 14 15:14 bin
- drwxr-xr-x 2 root root 4096 Oct 14 12:13 etc
- drwxr-xr-x 2 root root 4096 Oct 14 15:14 sbin
- drwxr-xr-x 3 root root 4096 Oct 14 12:13 share
- drwxr-xr-x 3 root root 4096 Oct 14 12:13 var
bin – 客戶(hù)端工具
etc – 元數(shù)據(jù)服務(wù)器,數(shù)據(jù)存儲(chǔ)服務(wù)器的配置文件都放在該目錄中
sbin – 元數(shù)據(jù)服務(wù)器端程序mfsmaster、數(shù)據(jù)存儲(chǔ)服務(wù)器端服務(wù)程序mfschunkserver
share – 文檔
var – 元數(shù)據(jù)目錄(可在配置文件中自定義到其他目錄)
配置master(元數(shù)據(jù)服務(wù)器)
IP:192.168.108.108
- [root@master~]#vi/usr/local/mfs/etc/mfsmaster.cfg
- #WORKING_USER=mfs
- #WORKING_GROUP=mfs
- #LOCK_FILE=/var/run/mfs/mfsmaster.pid
- #DATA_PATH=/usr/local/mfs/var/mfs
- #SYSLOG_IDENT=mfsmaster
- #BACK_LOGS=50
- #REPLICATIONS_DELAY_INIT=300
- #REPLICATIONS_DELAY_DISCONNECT=3600
- MATOCS_LISTEN_HOST=192.168.108.108
- #MATOCS_LISTEN_PORT=9420
- #MATOCU_LISTEN_HOST=*
- #MATOCU_LISTEN_PORT=9421
- #CHUNKS_LOOP_TIME=300
- #CHUNKS_DEL_LIMIT=100
- #CHUNKS_REP_LIMIT=15
注:這個(gè)配置文件中所有注掉的設(shè)置都是默認(rèn)的配置。在這里我只更改了MATOCS_LISTEN_HOST的值,也就是將它修改為本機(jī)的ip地址:192.168.108.108 。如果又需要還可以修改DATA_PATH的設(shè)置將元數(shù)據(jù)目錄存儲(chǔ)到其他的分區(qū)或磁盤(pán)。其他的參數(shù)都很簡(jiǎn)單根據(jù)需要調(diào)整即可。
master會(huì)打開(kāi)9420端口等待 mfschunkserver 連接
啟動(dòng)mfsmaster
- [root@master~]#/usr/local/mfs/sbin/mfsmaster
- [root@master~]#ps-ef|grepmfsmaster|grep-vgrep
- mfs101321017:37?00:00:00/usr/local/mfs/sbin/mfsmaster
- [root@master~]#netstat-tulnp|grepmfsmaster
- tcp00192.168.108.108:94200.0.0.0:*LISTEN10132/mfsmaster
- tcp000.0.0.0:94210.0.0.0:*LISTEN10132/mfsmaster
查看系統(tǒng)日志
- [root@master~]#tail-f/var/log/messages
- Oct1417:37:35mastermfsmaster:config:usingdefaultvalueforoption‘SYSLOG_IDENT’–‘mfsmaster’
- Oct1417:37:35mastermfsmaster[10130]:config:usingdefaultvalueforoption‘WORKING_USER’–‘mfs’
- Oct1417:37:35mastermfsmaster[10130]:config:usingdefaultvalueforoption‘WORKING_GROUP’–‘mfs’
- …
- Oct1417:37:35mastermfsmaster[10132]:config:usingdefaultvalueforoption‘CHUNKS_LOOP_TIME’–’300′
# 以上日志內(nèi)容省略的很多,主要是程序讀取配置的過(guò)程。
# 下面的部分為檢查元數(shù)據(jù)和檢查數(shù)據(jù)存儲(chǔ)服務(wù)器的情況(每1分鐘檢查一次)。
# 由于我這里還沒(méi)有啟動(dòng)chunkservers 因此在chunkservers status:的顯示結(jié)果為空。total: usedspace: 的結(jié)果也為空。
- Oct1417:38:00mastermfsmaster[10132]:inodes:45
- Oct1417:38:00mastermfsmaster[10132]:dirnodes:3
- Oct1417:38:00mastermfsmaster[10132]:filenodes:42
- Oct1417:38:00mastermfsmaster[10132]:chunks:14
- Oct1417:38:00mastermfsmaster[10132]:chunkstodelete:0
- Oct1417:38:00mastermfsmaster[10132]:chunkserversstatus:
- Oct1417:38:00mastermfsmaster[10132]:total:usedspace:0(0GB),totalspace:0(0GB),usage:0.00%
設(shè)置服務(wù)隨系統(tǒng)啟動(dòng)
- [root@master~]#echo“/usr/local/mfs/sbin/mfsmaster”>>/etc/rc.local
配置chunkserver(數(shù)據(jù)存儲(chǔ)服務(wù)器)
IP:192.168.108.161~164
- [root@chunkserver-1~]#vi/usr/local/mfs/etc/mfschunkserver.cfg
- #WORKING_USER=mfs
- #WORKING_GROUP=mfs
- #DATA_PATH=/usr/local/mfs/var/mfs
- #LOCK_FILE=/var/run/mfs/mfschunkserver.pid
- #SYSLOG_IDENT=mfschunkserver
- #BACK_LOGS=50
- #MASTER_RECONNECTION_DELAY=30
- MASTER_HOST=192.168.108.108
- #MASTER_PORT=9420
- #MASTER_TIMEOUT=60
- #CSSERV_LISTEN_HOST=*
- #CSSERV_LISTEN_PORT=9422
- #CSSERV_TIMEOUT=60
- #CSTOCS_TIMEOUT=60
- #HDD_CONF_FILENAME=/usr/local/mfs/etc/mfshdd.cfg
配置存儲(chǔ)分區(qū)
- [root@chunkserver-1~]#vi/usr/local/mfs/etc/mfshdd.cfg
- 刪除
- /mnt/hd1
- /mnt/hd2
- /mnt/hd3
- /mnt/hd4
添加獨(dú)立的分區(qū)
/data
修改分區(qū)所有者為mfs
- [root@chunkserver-1~]#chownmfs.mfs/data
注:mfschunkserver 服務(wù)器的主配置很簡(jiǎn)單,沒(méi)有特殊要求只需要修改MASTER_HOST的地址即可。存儲(chǔ)分區(qū)的配置選擇一個(gè)獨(dú)立的磁盤(pán)分區(qū)(分區(qū)必須大于1G)。
啟動(dòng)mfschunkserver
- [root@chunkserver-1~]#/usr/local/mfs/sbin/mfschunkserver
- [root@chunkserver-1~]#netstat-an|grep9420
- tcp00192.168.108.161:15099192.168.108.108:9420ESTABLISHED
同時(shí)查看系統(tǒng)日志
- Oct1417:53:45vm_web_1mfschunkserver[1992]:connecting…
- Oct1417:53:45vm_web_1mfschunkserver[1992]:connectedtoMaster
說(shuō)明已經(jīng)和master服務(wù)器成功連接
再查看master的日志查看
- Oct1417:59:00experimentmfsmaster[10132]:server1(192.168.108.161):usedspace:560484352(0GB),totalspace:4226125824(3GB),usage:13.26%
- Oct1417:59:00experimentmfsmaster[10132]:total:usedspace:560484352(0GB),totalspace:4226125824(3GB),usage:13.26%
同樣也說(shuō)明有一臺(tái) chunkserver 與自己連接,并給出了使用空間和剩余磁盤(pán)空間
剩余的3臺(tái)mfschunkserver利用同樣的方法配置好后啟動(dòng)mfschunkserver程序,這時(shí)候再查看master系統(tǒng)日志:
- Oct1615:27:00experimentmfsmaster[10132]:inodes:9
- Oct1615:27:00experimentmfsmaster[10132]:dirnodes:1
- Oct1615:27:00experimentmfsmaster[10132]:filenodes:8
- Oct1615:27:00experimentmfsmaster[10132]:chunks:18
- Oct1615:27:00experimentmfsmaster[10132]:chunkstodelete:0
- Oct1615:27:00experimentmfsmaster[10132]:chunkserversstatus:
- Oct1615:27:00experimentmfsmaster[10132]:server1(192.168.108.162):usedspace:924282880(0GB),totalspace:4226125824(3GB),usage:21.87%
- Oct1615:27:00experimentmfsmaster[10132]:server2(192.168.108.164):usedspace:924282880(0GB),totalspace:4226125824(3GB),usage:21.87%
- Oct1615:27:00experimentmfsmaster[10132]:server3(192.168.108.163):usedspace:924282880(0GB),totalspace:4226125824(3GB),usage:21.87%
- Oct1615:27:00experimentmfsmaster[10132]:server4(192.168.108.161):usedspace:924028928(0GB),totalspace:4226125824(3GB),usage:21.86%
- Oct1615:27:00experimentmfsmaster[10132]:total:usedspace:3696877568(3GB),totalspace:16904503296(15GB),usage:21.87%
這里可以看到有4臺(tái)chunkserver已經(jīng)連接到了master#p#
客戶(hù)端掛載與工具使用
192.168.108.109
掛載MFS
mfsmount
- [root@client~]#mkdir/mnt/mfs
- [root@client~]#mfsmount-h192.168.108.108
- *mfsmount默認(rèn)情況下將分區(qū)加載到/mnt/mfs目錄下。如果想加載到其他目錄請(qǐng)利用-w參數(shù)。
- mfsmount–help
- usage:/usr/local/mfs/bin/mfsmount[-r][-m][-c][-v0..2][-hmasterhost][-pmasterport][-lpath][-wmountpoint]
- r:readonlymode
- m:mountmetadata
- c:allowusingcache
- v:verboselevel
- defaults:
- h:mfsmaster
- p:9421
- l:/
- w:/mnt/mfs
修改MFS文件刪除延遲時(shí)間
- mfsrsettrashtime
- [root@client~]#mfsrsettrashtime100/mnt/mfs/
- /mnt/mfs/:
- inodeswithtrashtimechanged:1(1)
- inodeswithtrashtimenotchanged:0(0)
- inodeswithpermissiondenied:0(0)
查看MFS文件刪除延遲時(shí)間
- mfsrgettrashtime
- #mfsrgettrashtime/mnt/mfs/
- /mnt/mfs/:
- directorieswithtrashtime100:1(1)
- mfssettrashtime
- [root@client~]#mfssettrashtime60/mnt/mfs/
- /mnt/mfs/:60
- mfsgettrashtime
- [root@client~]#mfsgettrashtime/mnt/mfs/
- /mnt/mfs/:60
- 設(shè)置文件保存份數(shù)
- mfssetgoal
- [root@client~]#mfssetgoal4/mnt/mfs/
- /mnt/mfs/:4
- 查看文件保存保存數(shù)
- mfsgetgoal
- [root@client~]#mfsgetgoal/mnt/mfs/
- /mnt/mfs/:4
- mfsrsetgoal
- [root@client~]#mfsrsetgoal3/mnt/mfs/
- /mnt/mfs/:
- inodeswithgoalchanged:1(1)
- inodeswithgoalnotchanged:0(0)
- inodeswithpermissiondenied:0(0)
- mfsrgetgoal
- [root@client~]#mfsrgetgoal/mnt/mfs/
- /mnt/mfs/:
- directorieswithgoal3:1(1)
文件(文件夾)的查看(檢查)命令
- 先生成1個(gè)10M的文件
- [root@client~]#ddif=/dev/zeroof=filebs=1Mcount=10
- [root@client~]#cpfile/mnt/mfs
- 文件信息查看
- mfsfileinfo
- [root@client~]#mfsfileinfo/mnt/mfs/file
- /mnt/mfs/file:
- chunk0:0000000000000001_00000001/(id:1ver:1)
- copy1:192.168.108.161:9422
- copy2:192.168.108.162:9422
- copy3:192.168.108.163:9422
- 文件檢查
- mfscheckfile
- [root@client~]#mfscheckfile/mnt/mfs/file
- /mnt/mfs/file:
- 3copies:1chunks
目錄信息查看
mfsdirinfo
- [root@client~]#rm/mnt/mfs/file
- [root@client~]#mkdir/mnt/mfs/newdir
- [root@client~]#cpfile/mnt/mfs/newdir
- [root@client~]#mfsdirinfo/mnt/mfs/newdir
- /mnt/mfs/newdir/:
- inodes:2(2)//inode個(gè)數(shù),1個(gè)目錄,1個(gè)文件
- directories:1(1)//1個(gè)目錄
- files:1(1)//1個(gè)文件
- goodfiles:1(1)//正常文件個(gè)數(shù)
- undergoalfiles:0(0)
- missingfiles:0(0)
- chunks:1(1)
- goodchunks:1(1)
- undergoalchunks:0(0)
- missingchunks:0(0)
- length:10M(10485760)
- size:10M(10490880)//這里是文件大小
- hddusage:30M(31472640)//由于我設(shè)置文件份數(shù)為3,因此這里為3*100M
- [root@client~]#cp/data/filenewdir/file_2
- /mnt/mfs/newdir/:
- inodes:3(3)
- directories:1(1)
- files:2(2)
- goodfiles:2(2)
- undergoalfiles:0(0)
- missingfiles:0(0)
- chunks:2(2)
- goodchunks:2(2)
- undergoalchunks:0(0)
- missingchunks:0(0)
- length:20M(20971520)
- size:20M(20981760)
- hddusage:60M(62945280)
創(chuàng)建文件快照
mfssnapshot
- [root@client/mnt/mfs/newdir]#mfssnapshotmysnapshotfile
- [root@client/mnt/mfs/newdir]#ll
- total30720
- -rw-r–r–1rootroot10485760Oct1616:43file
- -rw-r–r–1rootroot10485760Oct1616:44file_2
- -rw-r–r–1rootroot10485760Oct1616:58mysnapshot
- [root@monitor/mnt/mfs/newdir]#mfsfileinfomysnapshot
- mysnapshot:
- chunk0:0000000000000003_00000001/(id:3ver:1)
- copy1:192.168.108.161:9422
- copy2:192.168.108.162:9422
- copy3:192.168.108.163:9422
- [root@monitor/mnt/mfs/newdir]#mfsfileinfofile
- file:
- chunk0:0000000000000003_00000001/(id:3ver:1)
- copy1:192.168.108.161:9422
- copy2:192.168.108.162:9422
- copy3:192.168.108.163:9422
通過(guò)mfsfileinfo命令可以查看創(chuàng)建出來(lái)的文件快照,它只占用了一個(gè)inode,并不占用磁盤(pán)空間,就像ln命令創(chuàng)建硬鏈接類(lèi)似。但mfsdirinfo的顯示似乎有些問(wèn)題:
- [root@monitor/mnt/mfs/newdir]#mfsdirinfo/mnt/mfs/newdir/
- /mnt/mfs/newdir/:
- inodes:4(4)
- directories:1(1)
- files:3(3)
- goodfiles:3(3)
- undergoalfiles:0(0)
- missingfiles:0(0)
- chunks:3(3)
- goodchunks:3(3)
- undergoalchunks:0(0)
- missingchunks:0(0)
- length:30M(31457280)
- size:30M(31472640)
- hddusage:90M(94417920)
利用mfsdirinfo查看目錄信息發(fā)現(xiàn)剛剛創(chuàng)建的快照文件也占用了與原文件相同大小的磁盤(pán)空間。但實(shí)際情況真的如此嗎?
查看master的系統(tǒng)日志
- Oct1617:14:00experimentmfsmaster[24445]:inodes:5
- Oct1617:14:00experimentmfsmaster[24445]:dirnodes:2
- Oct1617:14:00experimentmfsmaster[24445]:filenodes:3
- Oct1617:14:00experimentmfsmaster[24445]:chunks:2
- Oct1617:14:00experimentmfsmaster[24445]:chunkstodelete:0
通過(guò)日志的chunks: 2 可知有2個(gè)chunks 剛剛mfsfineinfo查看文件得知file文件占用1個(gè)chunks那么2個(gè)chunks 說(shuō)明有2個(gè)文件。再往上看一行filenodes: 3 說(shuō)明文件inode數(shù)為3 說(shuō)明有3個(gè)文件,這正是2個(gè)文件+1個(gè)快照文件。
查看各個(gè)mfschunkserver的mfs文件
通過(guò)查看master日志和查看各個(gè)數(shù)據(jù)存儲(chǔ)服務(wù)器上的mfs文件,驗(yàn)證了我們剛才用mfsfileinfo的檢查結(jié)果!文件快照,它只占用了一個(gè)inode,并不占用磁盤(pán)空間,就像ln命令創(chuàng)建硬鏈接類(lèi)似。