一、MFS 特性:
1. Free(GPL)
2. 通用文件系統,不需要修改上層應用就可以使用
3. 可以在線擴容,體系架構可伸縮性極強。
4. 部署簡單。
5. 高可用,可設置任意的文件冗餘程度(提供比 raid1+0 更高的冗餘級別,而絕對不會影響讀或寫的性能,只會加速)
6. 可回收在指定時間內刪除的文件( “ 回收站 ” 提供的是系統級別的服務,不怕誤操作了,提供類似 oralce 的閃回等高級 dbms 的即時回滾特性)
7. 提供 netapp,emc,ibm 等商業存儲的 snapshot 特性。(可以對整個文件甚至在正在寫入的文件創建文件的快照)
8. google filesystem 的一個 c 實現。
9. 提供 web gui 監控接口。
10. 提高隨機讀或寫的效率。
11. 提高海量小文件的讀寫效率。
可能的瓶頸:
1. master 本身的性能瓶頸。mfs 系統 master 存在單點故障如何解決?
moosefs+drbd+heartbeat來保證 master 單點問題?不過在使用過程中不可能完全不關機和間歇性的網絡中斷!
2. 體系架構存儲文件總數的可遇見的上限。(mfs 把文件系統的結構緩存到 master 的內存中,文件越多,master 的內存消耗越大,8g 對應 2500w 的文件數,2 億文件就得 64GB 內存 )。
master 服務器 CPU 負載取決於操作的次數,內存的使用取決於文件和文件夾的個數。
二、MFS 文件系統結構:
包含 4 種角色:
管理服務器 managing server (master)
元數據日誌服務器 Metalogger server(Metalogger)
數據存儲服務器 data servers (chunkservers)
客戶機掛載使用 client computers
各種角色作用:
1. 管理服務器:負責各個數據存儲服務器的管理,文件讀寫調度,文件空間回收以及恢復,多節點拷
貝。
2. 元數據日誌服務器: 負責備份 master 服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs,以便於在 master server 出問題的時候接替其進行工作。
3. 數據存儲服務器:負責連接管理服務器,聽從管理服務器調度,提供存儲空間,併爲客戶提供數據傳輸。
4. 客戶端:通過 fuse 內核接口掛接遠程管理服務器上所管理的數據存儲服務器,看起來共享的文件系統和本地 unix 文件系統使用一樣的效果。
原始的讀/寫速度很明顯是主要取決於所使用的硬盤的性能、網絡的容量和拓撲結構的,使用的硬
盤和網絡的吞吐量越好,整個系統的性能也就會越好。
三、MFS部署:
實驗環境: 172.25.44.1 server1.example.com Master
172.25.44.2 server2.example.com Chunkserver
172.25.44.3 server3.example.com Chunkserver
172.25.44.4 server4.example.com Client
iptables selinux disabled
(1)Master安裝與配置:
[root@server1 ~]# yum install -y rpm-build
[root@server1 ~]# rpmbuild -tb moosefs-3.0.80-1.tar.gz
error: File /root/moosefs-3.0.80.tar.gz: No such file or directory
[root@server1 ~]# ln -s moosefs-3.0.80-1.tar.gz moosefs-3.0.80.tar.gz
[root@server1 ~]# rpmbuild -tb moosefs-3.0.80.tar.gz
error: Failed build dependencies:
fuse-devel is needed by moosefs-3.0.80-1.x86_64
zlib-devel is needed by moosefs-3.0.80-1.x86_64
libpcap-devel is needed by moosefs-3.0.80-1.x86_64
注意:需要解決的依賴性有fuse-devel zlib-devel libpcap-devel gcc ,沒有安裝包的需要自己去官網下載。解決依賴性後執行:
[root@server1 ~]# rpmbuild -tb moosefs-3.0.80.tar.gz ##進行rpmbuild編譯
[root@server1 ~]# cd rpmbuild/RPMS/x86_64/
[root@server1 x86_64]# yum install moosefs-cgi-3.0.80-1.x86_64.rpm moosefs-cgiserv- 3.0.80-1.x86_64.rpm moosefs-master-3.0.80-1.x86_64.rpm moosefs-cli-3.0.80-1.x86_64.rpm moosefs-netdump-3.0.80-1.x86_64.rpm -y
[root@server1 x86_64]# rpm -ql moosefs-cgi
/usr/share/doc/moosefs-cgi-3.0.80
/usr/share/doc/moosefs-cgi-3.0.80/NEWS
/usr/share/doc/moosefs-cgi-3.0.80/README
/usr/share/mfscgi
/usr/share/mfscgi/acidtab.js
/usr/share/mfscgi/chart.cgi
/usr/share/mfscgi/err.gif
/usr/share/mfscgi/favicon.ico
/usr/share/mfscgi/index.html
/usr/share/mfscgi/logomini.png
/usr/share/mfscgi/mfs.cgi
/usr/share/mfscgi/mfs.css
[root@server1 x86_64]# ll /usr/share/mfscgi/*.cgi
-rwxr-xr-x 1 root root 2542 Sep 18 00:01 /usr/share/mfscgi/chart.cgi
-rwxr-xr-x 1 root root 318727 Sep 18 00:01 /usr/share/mfscgi/mfs.cgi
注意:*.cgi要加執行權限
啓動服務:(注意:不是在/etc/init.d下啓動)
[root@server1 x86_64]# mfsmaster
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
initializing mfsmaster modules ...
exports file has been loaded
topology file has been loaded
loading metadata ...
metadata file has been loaded
no charts data file - initializing empty charts
master <-> metaloggers module: listen on *:9419
master <-> chunkservers module: listen on *:9420
main master server module: listen on *:9421
mfsmaster daemon initialized properly
[root@server1 x86_64]# mfscgiserv
lockfile created and locked
starting simple cgi server (host: any , port: 9425 , rootpath: /usr/share/mfscgi)
訪問:
訪問172.25.44.1:9425
加解析:
再次訪問:
(2)Chunkserver設置:
安裝軟件:
[root@server2 ~]# yum install -y *
修改配置文件:
[root@server2 ~]# vim /etc/mfs/mfshdd.cfg
[root@server2 ~]# mkdir /mnt/chunk1 #設置共享點
啓動服務:
[root@server2 ~]# mfschunkserver
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
setting glibc malloc arena max to 8
setting glibc malloc arena test to 1
initializing mfschunkserver modules ...
hdd space manager: can't create lock file '/mnt/chunk1/.lock': EACCES (Permission denied)
hdd space manager: no hdd space defined in /etc/mfs/mfshdd.cfg file
init: hdd space manager failed !!!
error occurred during initialization - exiting
權限限制,在啓動chunk server前,需確保用戶mfs有權限讀寫將要被掛載的分區
[root@server2 ~]# chown mfs.mfs /mnt/chunk1/
[root@server2 ~]# mfschunkserver
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
setting glibc malloc arena max to 8
setting glibc malloc arena test to 1
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
master connection module: can't resolve master host/port (mfsmaster:9420)
init: master connection module failed !!!
error occurred during initialization - exiting
[root@server2 ~]# mfschunkserver
open files limit has been set to: 16384
working directory: /var/lib/mfs
lockfile created and locked
setting glibc malloc arena max to 8
setting glibc malloc arena test to 1
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
no charts data file - initializing empty charts
mfschunkserver daemon initialized properly
在另外一個Chunkserver做相同的操作(只改變共享點/mnt/chunk2)
訪問:
(3)Client端設置:
解析,在Master後面加上mfsmaster
[root@server4 ~]# yum install -y moosefs-client-3.0.80-1.x86_64.rpm
[root@server4 ~]# vim /etc/mfs/mfsmount.cfg #設置掛載點
/mnt/mfs
[root@server4 ~]# mkdir /mnt/mfs #創建掛載點
[root@server4 ~]# mfsmount #掛載
mfsmaster accepted connection with parameters: read-write,restricted_ip,admin ; root mapped to root:root
[root@server4 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 6.7G 880M 5.5G 14% /
tmpfs 499M 0 499M 0% /dev/shm
/dev/sda1 485M 33M 427M 8% /boot
mfsmaster:9421 13G 2.3G 11G 18% /mnt/mfs
刷新網頁:
測試:
在/mnt/mfs創建兩個目錄,並設置其文件存儲份數。
[root@server4 ~]# cd /mnt/mfs/
[root@server4 mfs]# mkdir dir1 dir2
設置文件存儲份數,dir1爲2,dir2爲1
拷貝文件,查看信息:
關閉一個chunkserver(172.25.44.3)後,查看信息:
chunkserver重新啓動後,恢復正常:
恢復垃圾箱文件:
誤刪:
[root@server4 mfs]# rm -fr /mnt/mfs/dir2/fstab
[root@server4 mfs]# mfsgettrashtime dir2 #查看垃圾箱中文件的保留時間
dir2: 86400 ##86400s=1day
[root@server4 mfs]# mkdir /mnt/mfsdeta #創建目錄
[root@server4 ~]# ll -d /mnt/mfsdeta/
drwxr-xr-x 2 root root 4096 Sep 19 18:40 /mnt/mfsdeta/
[root@server4 ~]# mfsmount -m /mnt/mfsdeta/ #掛載
mfsmaster accepted connection with parameters: read-write,restricted_ip
[root@server4 ~]# cd /mnt/mfsdeta/
[root@server4 mfsdeta]# ls
sustained trash
[root@server4 mfsdeta]# cd trash/
[root@server4 trash]# find -type f
./006/00000006|dir2|fstab
[root@server4 trash]# mv ./006/00000006\|dir2\|fstab undel/ #恢復誤刪文件
[root@server4 trash]# ls /mnt/mfs/dir2/
fstab