1、簡介php
MooseFS(Moose File System,mfs)是一種分佈式文件系統,它將數據分佈在網絡中的不一樣服務器上,支持FUSE(用戶空間文件系統Filesystem in Userspace,簡稱FUSE),客戶端掛載後能夠做爲一個 普通的Unix 文件系統使用MooseFS。
MooseFS中共有四種角色: 主控服務器 master server、 主控備份服務器 metalogger server、 存儲塊服務器 chunkserver、 客戶端主機 client。
html
主控服務器 負責各個存儲服務器的管理、文件讀寫調度、文件空間回收以及恢復、多節點拷貝。
主控備份服務器 負責備份主控服務器的元數據、變化日誌文件,文件類型爲changelog_ml.*.mfs,以便在主控服務器出問題的時候能夠恢復。
存儲塊服務器 負責提供存儲空間,併爲客戶提供數據傳輸。
客戶端則經過fuse掛接主控服務器上所管理的存儲塊服務器,能夠像操做本地文件同樣操做MooseFS文件系統中的文件。sql
NFS雖然使用簡單,但當NFS客戶端訪問量大時,經過NFS方式共享一個服務器的存儲空間,使得NFS服務器不堪重負,而且執行讀寫都比較頻繁的操做會出現意外的錯誤,對於高可靠的集羣部署是有挑戰的。vim
分佈式文件系統服務器之間的數據訪問再也不是一對多的關係(1個NFS服務器,多個NFS客戶端),而是多對多的關係,這樣一來,性能大幅提高毫無問題。moosefs分佈式文件系統,實施起來簡單、不中止服務擴容、恢復服務容易,由於做爲共享存儲服務器是個不錯的選擇。瀏覽器
MooseFS 讀寫流程圖:安全
MFS的官方網站: http://www.moosefs.org/download.html 。 ruby
上面有詳細的MFS簡介和MooseFS分佈式文件系統安裝嚮導以及MFS。bash
先將 mfs-1.6.25-1.tar.gz 重命名爲 mfs-1.6.25.tar.gz
服務器
#yum install fuse-devel pkgconfig zlib-devel //build源碼包須要的依賴
網絡
#rpmbuild -ta mfs-1.6.25.tar.gz
會生成6個rpm二進制安裝包(其中debuginfo調試時使用):
也能夠經過tar zxvf mfs-1.6.25-1.tar.gz 解壓,使用./configure、make、make install安裝(具體參考 安裝嚮導 )。
(1) 安裝
#rpm -ivh mfs-master-1.6.25-1.x86_64.rpm //安裝
#rpm -ql mfs-master //查詢安裝的文件路徑,能夠查看全部的安裝文件,便於修改
/etc/mfsexports.cfg.dist /etc/mfsmaster.cfg.dist /etc/mfstopology.cfg.dist /usr/sbin/mfsmaster /usr/sbin/mfsmetadump /usr/sbin/mfsmetarestore /usr/share/doc/mfs-master-1.6.25/usr/share/doc/mfs-master-1.6.25/NEWS /usr/share/doc/mfs-master-1.6.25/README /usr/share/doc/mfs-master-1.6.25/UPGRADE /usr/share/man/man5/mfsexports.cfg.5.gz /usr/share/man/man5/mfsmaster.cfg.5.gz /usr/share/man/man5/mfstopology.cfg.5.gz /usr/share/man/man7/mfs.7.gz /usr/share/man/man7/moosefs.7.gz /usr/share/man/man8/mfsmaster.8.gz /usr/share/man/man8/mfsmetarestore.8.gz /var/lib/mfs /var/lib/mfs/metadata.mfs.empty
(2) 複製樣例文件,以獲得 master 所需的配置文件
#cp mfsmaster.cfg.dist mfsmaster.cfg
#cp mfstopology.cfg.dist mfstopology.cfg
#cp mfsexports.cfg.dist mfsexports.cfg
若是咱們打算更改這些配置文件中的某些項目的值,則須要打開特定配置文件相關文本行前的 註釋 , 而後修改跟隨其後的值。由於被註釋掉的行,便是 MooseFS 內置的缺省值。
Mfsmaster.cfg 配置文件包含主控服務器 master 相關的設置,想查看 該配置文件 更多信息使用 命令 man mfsmaster.cfg。
mfsexports.cfg 指定那些客戶端主機能夠遠程掛接 MooseFS 文件系統, 以及授予 掛接客戶端什麼樣的訪問權限。 例如 指定只有 192.168.40.x 網段的主機能夠以讀寫模式訪問 MooseFS 的整個共享結構資源(/),在 配置文件 mfsexports.cfg 文件的第二行改成或添加:
(注:能夠掛在根/目錄下的子目錄,配置文件加上192.168.40.0/24 /test rw,alldirs,maproot=0,password=test,注意test目錄是在根目錄已經建立好的子目錄,而且掛載時使用 mfsmount /mnt/client -H mfsmaster -o mfssubfolder=/test -p,不然會出現mfsmaster register error: Permission denied的錯誤。)
# Allow everything but "meta".#* / rw,alldirs,maproot=0192.168.40.0/24 / rw,alldirs,maproot=0 192.168.40.0/24 . rw
二進制文件 metadata 和文本文件 changelog 將被保存在目錄/var/lib/mfs, 安裝 master 時,會自動生成一個名爲 metadata.mfs.empty 的元數據文件 metadata,該文件是空的。MooseFS master 運必須有文件 metadata.mfs,這個文件是從 metadata.mfs.empty 更名而來。
# cd /var/lib/mfs
#cp metadata.mfs.empty metadata.mfs // MooseFS master 運行之後,metadata.mfs 文件大小將發生變,不會爲空文件。
(3) 綁定主機名 mfsmaster 與 ip (每一個節點都需 綁定 ) 修改/etc/hosts 文件,以綁定主機名 mfsmaster 與 ip 地址:
192.168.40.125 mfsmaster
(4)安裝 CGI
爲了監控 MooseFS 當前運行狀態,能夠安裝運行 CGI 監控服務 用瀏覽器查看整個MooseFS 的運行狀況。
#rpm -ivh mfs-cgi-1.6.25-1.x86_64.rpm
#rpm -ql mfs-cgi
(5)啓動
# /usr/sbin/mfsmaster start
會出現問題:
working directory: /var/lib/mfs can't create lockfile in working directory: EACCES (Permission denied)
主要是沒有設置 運行用戶
和運行組,添加用戶(安裝完成後配置文件沒有改動),也可使用
nobody:nobody。
# groupadd mfs // 添加 mfs 組
#useradd -g mfs mfs // 新增系統用戶mfs
#chown -R mfs.mfs /var/lib/mfs //設置文件所屬用戶和組(也能夠直接指定用戶和組,不須要從新建立)
#vim /etc/mfsmaster.cfg
WORKING_USER = mfs WORKING_GROUP = mfs# SYSLOG_IDENT = mfsmaster# LOCK_MEMORY = 0
而後正常啓動!
# /usr/sbin/mfscgiserv start
會打不開網頁,這是由於cgi文件沒有可執行權限
#chmod +x /usr/share/mfscgi/*.cgi
而後啓動 ,在瀏覽器地址欄輸入 http://192.168.40.125:9425 便可查看 master 的運行狀況(這時不能看見 chunk server 的數據 )。
(1) 安裝
安裝 備份服務器metalogger的主機在性能上應該比 master 強大(至少有更多的內存),一旦主控服務器 master 失效,只要導入 changelogs 到元數據文件,備份服務器 metalogger 將能接替發生故障的 master,行使管理服務器的職能。
若 備份服務器 單獨安裝,須要安裝fuse-devel和修改vim /etc/hosts添加192.168.40.125 mfsmaster。 添加mfs用戶和組,也可指定到其餘用戶,或使用nobody:nobody。
#rpm -ivh mfs-metalogger-1.6.25-1.x86_64.rpm
#rpm -ql mfs-metalogger
#cp mfsmetalogger.cfg.dist mfsmetalogger.cfg
#vim mfsmetalogger.cfg(不修改會出現Permission denied)
WORKING_USER = mfs WORKING_GROUP = mfs
接着運行備份服務 mfsmetaloger:
#usr/sbin/mfsmetalogger start
在生產環境裏應當設置自動啓動腳本,以便操做系統從新啓動時MooseFSmfsmetalogger 服務也能自動運行。
(1) 安裝
若在其餘主機上單獨安裝chunkserver須要安裝 fuse-devel,並添加mfs用戶和組(可指定到其餘用戶)
#rpm -ivh mfs-chunkserver-1.6.25-1.x86_64.rpm //安裝
#rpm -ql mfs-chunkserver //查詢安裝的文件路徑,能夠查看全部的安裝文件,便於修改
(2) 準備 chunk server 服務所需的配置文件
#cp mfschunkserver.cfg.dist mfschunkserver.cfg
#cp mfshdd.cfg.dist mfshdd.cfg
#vim /etc/ mfschunkserver.cfg (想了解配置文件mfschunkserver.cfg更詳細的信息,請查看手冊頁man mfschunkserver.cfg )
WORKING_USER = mfs WORKING_GROUP = mfs
(3)創建共享點
在配置文件 mfshdd.cfg 中 , 給出了用於客戶端掛接 MooseFS 分佈式文件系統根分區所 使用的共享空間位置。 建議在 chunk server 上劃分單獨的空間新建一個設備掛載點做爲儲存點專門給 MooseFS 使用 , 這樣作的好處是便於管理剩餘空間 。
此處 假定要使用兩個共享點/mnt/mfschunks1 和/mnt/mfschunks2 ,在 mfshdd.cfg 加入下面的文本行 :
# mount points of HDD drives##/mnt/hd1#/mnt/hd2#etc./mnt/mfschunks1 /mnt/mfschunks2
在啓動 chunk server 前,需確保用戶 mfs 有權限讀寫將要被掛接的分區(由於 chunk server 運行時要在此建立一個.lock 的文件)。不然出現如下錯誤:
hdd space manager: can't create lock file '/mnt/mfschunks1/.lock': EACCES (Permission denied) init: hdd space manager failed !!!
#chown -R mfs:mfs /mnt/mfschunks1
#chown -R mfs:mfs /mnt/mfschunks2
(注:如果單獨與 master 的機器,還需執行 chown -R mfs:mfs /var/lib/mfs和修改 /etc/hosts 添加 192.168.40.125 mfsmaster。 )
(4) 開始啓動 chunk server
#/usr/sbin/mfschunkserver start
再經過瀏覽器訪問 http://192.168.40.125:9425就能夠看到 MooseFS 系統的所有信息,包括主控 master 和存儲服務 chunkserver 。
(5)MooseFS chunk 以獨佔方式使用專門磁盤分區
在上述操做過程當中不須要這部分的內容,此部分是在實際應用環境下,將chunk server用專門磁盤分區做爲 設備掛載點,這樣作是不要的,便於管理剩餘空間,由於MooseFS 並不考慮其剩餘空間能被另做他用。
若是沒有單首創建文件系統的條件,能夠在文件中建立一個文件系統,在此準備兩個 2GB 的文件(文件位於目錄/var/lib/mfs/下,也能夠放在其餘目錄下),並在其上建立文件系統,把他們格式化爲 ext3,分別掛接在/mnt/mfschunks1 和/mnt/mfschunks2。
操做步驟: 掛接第一個文件系統
一、建立鏡像文件mfschunks1
#dd if=/dev/zero of= /var/lib/mfs/ mfschunks1 bs=1024 count=1 seek=$((2*1024*1024-1))
二、建立文件系統
##mkfs -t ext3 /var/lib/mfs/ mfschunks1
三、建立掛接點
#mkdir -p /mnt/mfschunks1
四、掛接文件系統
#mount -t ext3 -o loop /var/lib/mfs/ mfschunks1 /mnt/mfschunks1
掛接第二個文件系統的步驟與上面相同,# mount -t ext3 -o loop /var/lib/mfs/ mfschunks2 /mnt/mfschunks2
在啓動 chunk server 前,需確保用戶 mfs 有權限讀寫將要被掛接的分區(由於 chunk server 運行時要在此建立一個.lock 的文件):
#chown -R mfs:mfs /mnt/mfschunks1
#chown -R mfs:mfs /mnt/mfschunks2
爲了掛接基於 MooseFS 分佈式文件,客戶端主機必須安裝 FUSE 軟件包( fuse 版本號至少
2.6,推薦使用版本號大於 2.7.2 的 fuse),#yum install fuse。
安裝客戶端軟件 mfsmount:
#rpm -ivh mfs-client-1.6.25-1.x86_64.rpm
(客戶端若單獨安裝,須要安裝fuse-devel和修改vim /etc/hosts添加192.168.40.125 mfsmaster。)
#cp /etc/mfsmount.cfg.dist /etc/mfsmount.cfg
假定客戶端的掛接點是/mnt/mfs,將如下面的指令來使用 MooseFS 分佈式共享文件系統:
一、 建立掛接點
#mkdir -p /mnt/ mfs
二、開始掛接操做
#/usr/bin/mfsmount /mnt/ mfs -H mfsmaster
有時會出現mfsmaster register error: Permission denied:
是由於 mfsmaster的配置文件和掛載目錄 不一致的緣由, vim /etc/mfsexports.cfg
# Allow everything but "meta".#* / rw,alldirs,maproot=0192.168.40.0/24 /test rw,alldirs,maproot=0
master的掛載配置文件中 容許掛載的目錄是 /test ,若用戶# mfsmount /mnt -H mfsmaster (不加 -o mfssubfolder 默認是掛載/)掛載 根/目錄會掛載不上,能夠修改 mfsexports.cfg配置文件爲/,再進行掛在就沒問題了。
192.168.40.0/24 / rw,alldirs,maproot=0
# /usr/sbin/mfsmaster restart
有時掛載目錄有內容,提示error in fuse_mount,可使用 -o nonempty 選項掛載。
# mfsmount /mnt/mfs -H mfsmaster -o nonempty
三、掛載meta文件系統
首先保證 mfsexports.cfg 文件中加入:
# Allow "meta".* . rw
而後執行:
#mfsmount -m / mnt/mfs -H mfsmaster
能夠不掛載MFS META文件系統,掛載該系統主要是爲了恢復被誤刪除的文件。
四、查看分區
執行命令 df -h | grep mfs 檢查分區狀況:
mfsmaster:9421 102G 256K 102G 1% /mnt/mfs
(1)備份
#cd /mnt/mfs
#mkdir dir1
#mkdir dir2
默認mfs將儲存的文件只儲存在一個節點上(master選取的)。
設置儲存在儲存塊dir2上的文件儲存在兩個節點上,作一個備份,系統會自動將數據同步到選定的節點上,這樣達到裏備份的效果 。
因master和trunk服務器在同一臺機器上, 即使設定了 goal=2 來到達保存兩個副本但 看到的只是一個副本而已, 儘管有兩個trunk掛在點,但 它只是一個 chunk server。
設置文件副本數量,通常以3份爲佳。
#mfssetgoal -r 3 /mnt/mfs
#mfsgetgoal /mnt/mfs/
#/mnt/mfs : 3
(2)設置刪除文件的空間回收時間
#mfsgettrashtime dir2/passwd
dir2/passwd: 86400
#mfssettrashtime 300 /mnt/mfs
獲取刪除 dir2/passwd後在回收站中保存的時間,防止用戶誤刪,這個數字不能設置的過高也不能過低,通常設置爲300(5分鐘)。
(3)查看目錄信息
# mfsdirinfo -H /mnt/mfs
(4)數據恢復
二進制文件 metadata 和文本文件 changelog 將被保存在目錄/var/lib/mfs
執行數據恢復操做,其命令爲:mfsmetarestore -m metadata.mfs.back -o metadata.mfs changelog_ml.*.mfs 恢復成功後再執行啓動新的 master 服務操做。
(5) 中止 MooseFS
爲了安全中止 MooseFS 集羣, 建議執行以下的步驟:
在全部客戶端用 unmount 命令先卸載文件系統(本例將是: umount /mnt/mfs)
中止 chunk server 進程: /usr/sbin/mfschunkserver stop
中止 metalogger 進程: /usr/sbin/mfsmetalogger stop
中止主控 master server 進程: /usr/sbin/mfsmaster stop
(1)使用configre、make、make install的方式能夠參考官方文檔,具體參數和配置都給的很詳細, 官方網站 http://www.moosefs.org/download.html 。
(2) 集羣部署還須要進一步強化,數據恢復及其餘關於MooseFS的內容之後會更新。
(3)MooseFS 命令的使用方法: http://www.moosefs.org/reference-guide.html#using-moosefs 。
(4)上述的安裝包和參考文檔已上傳到csdn上,須要下載的能夠點擊 http://download.csdn.net/detail/taiyang1987912/8229595 。