moosefs理論linux
mfs的優點:web
1. Free(GPL)服務器
2. 通用文件系統,不須要修改上層應用就可使用網絡
3. 能夠在線擴容,體系架構可伸縮性極強架構
4. 部署簡單app
5. 高可用,可設置任意的文件冗餘程度(提供比 raid1+0 更高的冗餘級別,而絕對不會影響讀或寫的性能,只會加速!)分佈式
6. 可回收在指定時間內刪除的文件(「回收站」提供的是系統級別的服務,不怕誤操做了,提供相似 oralce 的閃回等高級 dbms 的即時回滾特性!)ide
7. 提供 netapp,emc,ibm 等商業存儲的 snapshot 特性。(能夠對整個文件甚至在正在寫入的文件建立文件的快照)性能
8. google filesystem 的一個 c 實現ui
9. 提供 web gui 監控接口
10. 提升隨機讀或寫的效率
11. 提升海量小文件的讀寫效率
MooseFS是一個分佈式文件系統
MooseFS文件系統結構包括如下四種角色:
1.管理服務器 managing server (master)
2.元數據日誌服務器 Metalogger server(Metalogger)
3.數據存儲服務器 data servers (chunkservers)
4.客戶機掛載使用 client computers
各類角色做用:
1. 管理服務器:負責各個數據存儲服務器的管理,文件讀寫調度,文件空間回收以及恢復.多節點拷貝。
2. 元數據日誌服務器: 負責備份 master 服務器的變化日誌文件,文件類型爲changelog_ml.*.mfs,以便於在 master server 出問題的時候接替其進行工做。
3. 數據存儲服務器:負責鏈接管理服務器,遵從管理服務器調度,提供存儲空間,併爲客戶提供數據傳輸。
4. 客戶端: 經過 fuse 內核接口掛接遠程管理服務器上所管理的數據存儲服務器,看起來共享的文件系統和本地 unix 文件系統使用同樣的效果。
MFS 讀寫原理:
原始的讀/寫速度很明顯是主要取決於所使用的硬盤的性能、網絡的容量和拓撲結構的,使用的硬盤和網絡的吞吐量越好,整個系統的性能也就會越好。
.mfsmaster.lock:文件記錄正在運行的 mfsmaster 的主進程
metadata.mfs, metadata.mfs.back MooseFS 文件系統的元數據 metadata 的鏡像
changelog.*.mfs:是 MooseFS 文件系統元數據的改變日誌(每個小時合併到 metadata.mfs中一次)
Metadata 文件的大小是取決於文件數的多少(而不是他們的大小)。changelog 日誌的大小是取決於每小時操做的數目,可是這個時間長度(默認是按小時)是可配置的。
修改 linux 下最大文件描述符的限制:
在進行大量小文件寫時,可能會出現了一個嚴重錯誤,有可能和操做系統文件描述符有關。操做系統默認文件描述符爲 1024. 1.6.26 版本默認爲 100000
建議上線時,master 和 chunker 修改文件描述符系統級限制:它是限制全部用戶打開文件描述符的總和,能夠經過修改內核參數來更改該限制:
# vi /etc/sysctl.conf 添加
fs.file-max=102400
若是此值默認夠大能夠不用更改
# sysctl -p
命令使其生效。
用戶級限制:只是修改用戶級的最大文件描述符限制,也就是說每個用戶登陸後執行的程序佔用文件描述符的總數不能超過這個限制。
# vi /etc/security/limits.conf
* - nofile 102400
保存退出後從新登陸,其最大文件描述符已經被永久更改了。
與 file-max 參數相對應的還有 file-nr,這個參數是隻讀的,能夠查看當前文件描述符的使用狀況。
# sysctl -a|grep file
fs.file-nr = 12800 0 782554
fs.file-max = 782554
在 kernel 2.6 以前的版本中,file-nr 中的值由三部分組成,分別爲:1.已經分配的文件句柄數,2.已經分配單沒有使用的文件句柄數,3.最大文件句柄數。但在 kernel 2.6 版本中第二項的值總爲0,這並非一個錯誤,它實際上意味着已經分配的文件句柄無一浪費的都已經被使用了
file-max 的值是 linux 內核能夠分配的最大文件句柄數。若是你看到了不少關於打開文件數已經達到了最大值的錯誤信息,你能夠試着增長該值的限制。file-max 的默認值大概是系統內存的 10%
(系統內存以 kb 計算)