您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關MooseFS是什么及如何進行部署應用,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
mooseFS簡介
MooseFS正式的推出是在2008-05-30,到2009-10-12為止,最新的版本是1.5.12。
mooseFS是一款網絡分布式文件系統。它把數據分散在多臺服務器上,但對于用戶來講,看到的只是一個源。MFS也像其他類unix文件系統一樣,包含了層級結構(目錄樹),存儲著文件屬性(權限,最后訪問和修改時間),可以創建特殊的文件(塊設備,字符設備,管道,套接字),符號鏈接,硬鏈接。
mooseFS系統的組成
1.master(元數據服務器)
master負責在整個系統中管理數據。是整個系統的維護者。但是它有個弱點就是master只有一個!也就是說如果master壞掉,整個系統將停止工作!不過這算不上致命弱點,因為我們做好數據備份以后,恢復master是很簡單的事。
2.chunkserver(數據存儲服務器)
chunkserver是mfs系統中的數據存儲者。真正的用戶數據按照算法被分成chunk,并分發到各個chunkserver上。這樣就保證了數據的安全性。
3.client
凡是使用mfs文件系統的機器都可以被稱為client。client是mfs系統的使用者。當client把mfs文件系統掛載到本機以后,它可以像使用一個普通的磁盤分區一樣,來使用mfs。
試驗環境
本文只介紹moosefs的部署與應用,出于試驗的目的,并沒有考慮性能因素,因此所有的服務器均使用虛擬機來實現。以后有機會做單獨的物理服務器,然后對其性能進行測試。
拓撲圖
備注:
(1) chunkserver1-4 均添加了一塊虛擬的磁盤sda(磁盤空間一定要大于1G,我這里設置了4G),掛載到系統的/data下。所有服務器均升級內核為2.6.18-164本版,為什么要升級內核,下文會有介紹。
(2) 所有服務器均安裝了完整版的mfs組件
安裝與配置
安裝mfs的前提條件
由于mfs的客戶端程序也就是加載mfs磁盤系統的命令是使用fuse編寫的,因此只要是想掛載mfs的服務器,必要的前提條件就是先安裝fuse,這樣編譯mfs的時候才能順利通過。另外一點需要注意:linux 2.6.18-164.e15 版本的linux內核中已經內置了fuse模塊。但在該版本之前的linux內核中是不包含這個模塊的。另fuse 從2.8.0-pre1 版本的源碼包中去掉了fuse系統模塊的源碼部分,原因就是上一點提到的。這樣我們在編譯安裝當前最新版本的fuse(2.8以上版本) 且正在使用的linux內核版本低于2.6.18-164.e15版本,則系統中是不包含fuse模塊的。
解決的方法:
1、升級系統內核為2.6.18-164版本
為了方便起見直接利用yum升級系統內核即可。yum install kernel
安裝成功后需重啟系統
2、使用fuse 2.7x版本編譯安裝
該版本的fuse中包含了linux內核需要的fuse模塊,配置編譯選項時指定 –enable-kernel-module 選項,make的時候就會編譯相應的fuse模塊,make intall會將fuse.ko復制到 /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安裝當前內核版本的fuse模塊
yum install -y dkms-fuse dkms
安裝fuse
如果只編譯元數據服務端或數據存儲服務端的話是沒有必要安裝fuse的。只有mfsmount需要fuse支持(編譯時需要fuse的開發包,使用mfsmount掛載時需要fuse.ko系統模塊)。可以使用源碼或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
由于我系統為64位,因此在編譯fuse時將lib目錄定為/usr/lib64。這樣在下面編譯安裝mfs時就不會因為找不到fuse的lib文件報錯了。
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
查看安裝后目錄結構
# 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 – 客戶端工具
etc – 元數據服務器,數據存儲服務器的配置文件都放在該目錄中
sbin – 元數據服務器端程序mfsmaster、數據存儲服務器端服務程序mfschunkserver
share – 文檔
var – 元數據目錄(可在配置文件中自定義到其他目錄)
配置master(元數據服務器)
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
注:這個配置文件中所有注掉的設置都是默認的配置。在這里我只更改了MATOCS_LISTEN_HOST的值,也就是將它修改為本機的ip地址:192.168.108.108 。如果又需要還可以修改DATA_PATH的設置將元數據目錄存儲到其他的分區或磁盤。其他的參數都很簡單根據需要調整即可。
master會打開9420端口等待 mfschunkserver 連接
啟動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
查看系統日志
[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′
# 以上日志內容省略的很多,主要是程序讀取配置的過程。
# 下面的部分為檢查元數據和檢查數據存儲服務器的情況(每1分鐘檢查一次)。
# 由于我這里還沒有啟動chunkservers 因此在chunkservers status:的顯示結果為空。total: usedspace: 的結果也為空。
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%
設置服務隨系統啟動
[root@master~]#echo“/usr/local/mfs/sbin/mfsmaster”>>/etc/rc.local
配置chunkserver(數據存儲服務器)
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
配置存儲分區
[root@chunkserver-1~]#vi/usr/local/mfs/etc/mfshdd.cfg 刪除 /mnt/hd1 /mnt/hd2 /mnt/hd3 /mnt/hd4
添加獨立的分區
/data
修改分區所有者為mfs
[root@chunkserver-1~]#chownmfs.mfs/data
注:mfschunkserver 服務器的主配置很簡單,沒有特殊要求只需要修改MASTER_HOST的地址即可。存儲分區的配置選擇一個獨立的磁盤分區(分區必須大于1G)。
啟動mfschunkserver
[root@chunkserver-1~]#/usr/local/mfs/sbin/mfschunkserver [root@chunkserver-1~]#netstat-an|grep9420 tcp00192.168.108.161:15099192.168.108.108:9420ESTABLISHED
同時查看系統日志
Oct1417:53:45vm_web_1mfschunkserver[1992]:connecting… Oct1417:53:45vm_web_1mfschunkserver[1992]:connectedtoMaster
說明已經和master服務器成功連接
再查看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%
同樣也說明有一臺 chunkserver 與自己連接,并給出了使用空間和剩余磁盤空間
剩余的3臺mfschunkserver利用同樣的方法配置好后啟動mfschunkserver程序,這時候再查看master系統日志:
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臺chunkserver已經連接到了master
客戶端掛載與工具使用
192.168.108.109
掛載MFS
mfsmount
[root@client~]#mkdir/mnt/mfs [root@client~]#mfsmount-h292.168.108.108 *mfsmount默認情況下將分區加載到/mnt/mfs目錄下。如果想加載到其他目錄請利用-w參數。 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文件刪除延遲時間
mfsrsettrashtime [root@client~]#mfsrsettrashtime100/mnt/mfs/ /mnt/mfs/: inodeswithtrashtimechanged:1(1) inodeswithtrashtimenotchanged:0(0) inodeswithpermissiondenied:0(0)
查看MFS文件刪除延遲時間
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
設置文件保存份數 mfssetgoal [root@client~]#mfssetgoal4/mnt/mfs/ /mnt/mfs/:4 查看文件保存保存數 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個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個數,1個目錄,1個文件 directories:1(1)//1個目錄 files:1(1)//1個文件 goodfiles:1(1)//正常文件個數 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)//由于我設置文件份數為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)
創建文件快照
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
通過mfsfileinfo命令可以查看創建出來的文件快照,它只占用了一個inode,并不占用磁盤空間,就像ln命令創建硬鏈接類似。但mfsdirinfo的顯示似乎有些問題:
[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查看目錄信息發現剛剛創建的快照文件也占用了與原文件相同大小的磁盤空間。但實際情況真的如此嗎?
查看master的系統日志
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
通過日志的chunks: 2 可知有2個chunks 剛剛mfsfineinfo查看文件得知file文件占用1個chunks那么2個chunks 說明有2個文件。再往上看一行filenodes: 3 說明文件inode數為3 說明有3個文件,這正是2個文件+1個快照文件。
查看各個mfschunkserver的mfs文件
通過查看master日志和查看各個數據存儲服務器上的mfs文件,驗證了我們剛才用mfsfileinfo的檢查結果!文件快照,它只占用了一個inode,并不占用磁盤空間,就像ln命令創建硬鏈接類似。
關于MooseFS是什么及如何進行部署應用就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。