mfs分布式文件系統的配置
通過對mfs分布式文件系統中各個模塊的拆分組合,較為詳細且清晰的實現其配置
mfs分布式文件系統,所需主機:
管理服務器 managing server (master vm3)
元數據日志服務器 Metalogger server(Metalogger)(vm6)
數據存儲服務器 data servers (chunkservers) (兩臺vm5 vm6 做負載均衡)
客戶機掛載使用 client computers
1.生成 rpm,便于部署:
[root@vm3~]# yum install -y fuse-devel zlib-devel gcc rpm-build.x86_64
[root@vm3~]# mv mfs-1.6.27-5.tar.gz mfs-1.6.27.tar.gz
[root@vm3~]# rpmbuild -tb mfs-1.6.27-5.tar.gz
[root@vm3~]# cd rpmbuild/
[root@vm3rpmbuild]# ls
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
[root@vm3rpmbuild]# cd RPMS/x86_64/
[root@vm3x86_64]# ls
mfs-cgi-1.6.27-4.x86_64.rpm mfs-client-1.6.27-4.x86_64.rpm
mfs-cgiserv-1.6.27-4.x86_64.rpm mfs-master-1.6.27-4.x86_64.rpm
mfs-chunkserver-1.6.27-4.x86_64.rpm mfs-metalogger-1.6.27-4.x86_64.rpm
2.主控服務器 Master server 安裝:
[root@vm3x86_64]# rpm -ivh mfs-master-1.6.27-4.x86_64.rpm mfs-cgi
Preparing... ########################################### [100%]
1:mfs-cgi ########################################### [ 33%]
2:mfs-cgiserv ########################################### [ 67%]
3:mfs-master ########################################### [100%]
[root@vm3x86_64]# cd /etc/mfs/
[root@vm3mfs]# ls
mfsexports.cfg.dist mfsmaster.cfg.dist mfstopology.cfg.dist
[root@vm3mfs]# cp mfsexports.cfg.dist mfsexports.cfg
[root@vm3mfs]# cp mfsmaster.cfg.dist mfsmaster.cfg
[root@vm3mfs]# cp mfstopology.cfg.dist mfstopology.cfg
[root@vm3mfs]# vim mfsexports.cfg
# Allow "meta".
172.25.254.0/24 . rw 允許172.25.254.網段可寫
[root@vm3mfs]# vim /etc/hosts
172.25.254.3 vm3.example.com mfsmaster
[root@vm3mfs]# cd /var/lib/mfs/
[root@vm3mfs]# cp metadata.mfs.empty metadata.mfs
[root@vm3mfs]# chown nobody /var/lib/mfs/ -R
[root@vm3mfs]# mfsmaster start
[root@vm3mfs]# mfsmaster test
mfsmaster pid: 6643
[root@vm3mfs]# cd /usr/share/mfscgi/
[root@vm3mfscgi]# chmod +x .cgi
[root@vm3mfscgi]# mfscgiserv #啟動 CGI 監控服務
現在再通過瀏覽器訪問 http://172.25.254.3:9425/ 應該可以看見這個 MooseFS 系統的全部信息,包括主控 master 和存儲服務 chunkserver 。
3.配置數據存儲服務器 data servers (chunkservers)(vm5 vm6)
[root@vm3x86_64]# pwdcd
/root/rpmbuild/RPMS/x86_64
[root@vm3x86_64]# scp mfs-chunkserver-1.6.27-4.x86_64.rpm 172.25.254.5:
[root@vm3x86_64]# scp mfs-chunkserver-1.6.27-4.x86_64.rpm 172.25.254.6:
切換到vm5
[root@vm5~]# rpm -ivh mfs-chunkserver-1.6.27-4.x86_64.rpm
Preparing... ###########################################[100%]
1:mfs-chunkserver ########################################### [100%]
[root@vm5~]# cd /etc/mfs/
[root@vm5mfs]# ls
mfschunkserver.cfg.dist mfshdd.cfg.dist
[root@vm5mfs]# cp mfschunkserver.cfg.dist mfschunkserver.cfg
[root@vm5mfs]# cp mfshdd.cfg.dist mfshdd.cfg
[root@vm5mfs]# mkdir /var/lib/mfs
[root@vm5mfs]# chown nobody /var/lib/mfs/
[root@vm5mfs]# vim mfshdd.cfg
mount points of HDD drives
/mnt/hd1
/mnt/hd2
etc.
/mnt/chunk1
[root@vm5mfs]# mkdir /mnt/chunk1
[root@vm5mfs]# chown nobody /mnt/chunk1
[root@vm5mfs]# mfschunkserver
working directory: /var/lib/mfs
lockfile created and locked
initializing mfschunkserver modules ...
hdd space manager: path to scan: /mnt/chunk1/
hdd space manager: start background hdd scanning (searching for available chunks)
main server module: listen on *:9422
[root@vm5mfs]# vim /etc/hosts
加入172.25.254.3 mfsmaster
在vm6做類似操作:
[root@vm6mfs]# vim mfshdd.cfg
mount points of HDD drives
/mnt/hd1
/mnt/hd2
etc.
/mnt/chunk2
4.客戶端掛載讀取
[root@vm3x86_64]# scp mfs-client-1.6.27-4.x86_64.rpm 172.25.254.1:
[root@benberba ~]# rpm -ivh mfs-client-1.6.27-4.x86_64.rpm
Preparing... ########################################### [100%]
1:mfs-client ########################################### [100%]
[root@benberba ~]# cd /etc/mfs/
[root@benberba mfs]# ls
mfsmount.cfg.dist
[root@benberba mfs]# cp mfsmount.cfg.dist mfsmount.cfg
[root@benberba mfs]# mkdir /mnt/mfs
[root@benberba mfs]# vim mfsmount.cfg
mfsmaster=mfsmaster
/mnt/mfs
[root@benberba mfs]# vim /etc/hosts
172.25.254.3 mfsmaster
[root@benberba mfs]# mfsmount
mfsmaster accepted connection with parameters: read-write,restricted_ip ; root mapped to root:root
MFS 測試:
在 MFS 掛載點下創建兩個目錄,并設置其文件存儲份數
[root@benberba mfs]# cd /mnt/mfs/
[root@benberba mfs]# mkdir dir1
[root@benberba mfs]# mkdir dir2
[root@benberba mfs]# mfssetgoal -r 2 dir2 設置在 dir2 中文件存儲份數為兩個,默認是一個
[root@benberba mfs]# cp /etc/passwd dir1
[root@benberba mfs]# cp /etc/passwd dir2
查看文件信息
[root@benberba mfs]# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.254.6:9422
[root@benberba mfs]# mfsfileinfo dir2/passwd
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.254.5:9422
copy 2: 172.25.254.6:9422
關閉 mfschunkserver2 后再查看文件信息(即[root@vm6mfs]# mfschunkserver stop)
[root@benberba mfs]# mfsfileinfo dir1/passwd
dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
no valid copies !!!
[root@benberba mfs]# mfsfileinfo dir2/passwd
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.254:9422
啟動 mfschunkserver2 后,文件回復正常([root@vm6mfs]# mfschunkserver start)。
[root@benberba mfs]# mfsfileinfo dir2/passwd
dir2/passwd:
chunk 0: 0000000000000002_00000001 / (id:2 ver:1)
copy 1: 172.25.254.5:9422
copy 2: 172.25.254.6:9422
恢復誤刪文件
[root@benberba mfs]# rm -f dir1/passwd
[root@benberba mfs]# mfsgettrashtime dir1/
dir1/: 86400
文件刪除后存放在“ 垃圾箱”中的時間稱為隔離時間, 這個時間可以用 mfsgettrashtime 命令來查
看,用 mfssettrashtime 命令來設置,單位為秒,默認為 86400 秒。
[root@benberba mfs]# mkdir /mnt/mfsmeta
[root@benberba mfs]# mfsmount -m /mnt/mfsmeta/ -H mfsmaster
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@benberba mfs]# cd /mnt/mfsmeta/trash
[root@benberba trash]# ls
00000004|dir1|passwd undel
[root@benberba trash]# mv 00000004|dir1|passwd undel/
到 dir1 目錄中可以看到 passwd 文件恢復
[root@benberba ~]# mfsfileinfo /mnt/mfs/dir1/passwd
/mnt/mfs/dir1/passwd:
chunk 0: 0000000000000001_00000001 / (id:1 ver:1)
copy 1: 172.25.254.6:9422
在 MFSMETA 的目錄里,除了 trash 和 trash/undel 兩個目錄,還有第三個目錄 reserved,該目
錄內有已經刪除的文件,但卻被其他用戶一直打開著。在用戶關閉了這些被打開的文件后,
reserved 目錄中的文件將被刪除,文件的數據也將被立即刪除。此目錄不能進行操作 </p>
為了安全停止 MooseFS 集群,建議執行如下的步驟:
# umount -l /mnt/mfs #客戶端卸載 MooseFS 文件系統
# mfschunkserver stop #停止 chunk server 進程
# mfsmetalogger stop #停止 metalogger 進程
# mfsmaster stop #停止主控 master server 進程
安全的啟動 MooseFS 集群:
# mfsmaster start #啟動 master 進程
# mfschunkserver start #啟動 chunkserver 進程
# mfsmetalogger start #啟動 metalogger 進程
# mfsmount #客戶端掛載 MooseFS 文件系統
實際上無論如何順序啟動或關閉,未見任何異常,master 啟動后,metalogger、chunker、client
三個元素都能自動與 master 建立連接。
故障測試:
Client 客戶端斷電、斷網對 MFS 的體系不產生影響.
如果客戶端誤殺 killall -9 mfsmount 進程,需要先 umount /mnt/mfs,然后再 mfsmount。否則會
提示:/mnt/mfs: Transport endpoint is not connected
mfschunkserver:
斷網、殺掉 mfschunkserver 程序對 MFS 系統無影響。
斷電:
#無文件傳輸時,對兩個 chunker 都無影響;
#當有文件傳輸時,但是文件設置存儲一份時,對文件的存儲無影響。
#文件設置存儲兩份,數據傳輸過程中,關掉 chunker1,等待數據傳輸完畢后,啟動
chunker1.chunker1 啟動后,會自動從 chunker2 復制數據塊。整個過程中文件訪問不受影響。
#文件設置存儲兩份,數據傳輸過程中,關掉 chunker1,不等待數據傳輸完畢,開機啟動
chunker1.chunker1 啟動后,client 端會向 chunker1 傳輸數據,同時 chunker1 也從 chunker2 復
制缺失的塊。
只要不是兩個 chunker 服務器同時掛掉的話,就不會影響文件的傳輸,也不會影響服務的使用。
master 端:
斷網、殺掉 MFS 的 master 服務對 MFS 系統無影響。
斷電可能會出現以下的情況:
#當沒有文件傳輸時,可在服務器重啟之后,運行 mfsmetarestore –a 進行修復,之后執行
mfsmaster start 恢復 master 服務。
# mfsmetarestore -a
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
store metadata into file: /var/lib/mfs/metadata.mfs
# mfsmaster start
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
loading sessions ... ok
sessions file has been loaded
exports file has been loaded
mfstopology configuration file (/etc/mfstopology.cfg) not found - using defaults
loading metadata ...
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
all inodes: 5
directory inodes: 3
file inodes: 2
chunks: 2
metadata file has been loaded
stats file has been loaded
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
#當有文件傳輸時,可能會在/usr/local/mfs/sbin/mfsmetarestore –a 進行修復時可能會出現:
# mfsmetarestore -a
loading objects (files,directories,etc.) ... ok
loading names ... ok
loading deletion timestamps ... ok
loading chunks data ... ok
checking filesystem consistency ... ok
connecting files and chunks ... ok
?S:115: error: 32 (Data mismatch)
此時無法修復也無法啟動 master 服務,有個應急的辦法是將 metadata.mfs.back 復制成
metadata.mfs,然后再啟動 master。這樣將會丟失那些正在傳輸的數據。