MooseFS是一個具備冗余容錯功能的分布式網絡文件系統,它將數據分別存放在多個物理服務器或單獨磁盤或分區上,確保一份數據有多個備份副本。對于訪問的客戶端或者用戶來說,整個分布式網絡文件系統集群看起來就像一個資源一樣。從其對文件操作的情況看,MooseFS就相當于一個類UNIX文件系統:
1、mfs是一個分層的目錄樹結構
2、存儲支持POSIX標準的文件屬性(權限,最后訪問和修改時間)
3、支持特殊的文件,如:塊設備,字符設備,管道和套接字,鏈接文件(符號鏈接和硬鏈接)
4、支持基于IP地址和密碼的方式訪問文件系統
1、高可靠性,每一份數據可以設置多個副本(多份數據),并可以存儲在不同的主機上
2、高可擴展性,可以很輕松的通過增加主機磁盤容量或增加主機數量來動態擴展整個文件系統的存儲量
3、高可容錯性,我們可以通過對mfs進行系統設置,實現當數據文件被刪除后的一段時間內,依然存放于主機的回收站中,以備誤刪恢復數據
4、高數據一致性,即便文件被寫入/訪問時,我們依然可以完成對文件的一致性快照
優點:
1、由于MFS是基于GPL發布的,因此完全免費,并且開發和社區都很活躍,資料也非常豐富
2、輕量、易部署、易配置、易維護
3、通用文件系統,不需要修改上層應用就可以使用(那些需要專門 API 的DFS確實有點麻煩)
4、擴容成本低、支持在線擴容,不影響業務,體系架構可伸縮性極強(官方的case可以擴到70臺了?。?/p>
5、體系架構高可用,所有組件無單點故障
6、文件對象高可用,可設置任意的文件冗余程度(提供比 Raid 10 更高的冗余級別)
7、提供系統負載,將數據讀寫分配到所有的服務器上,加速讀寫性能
8、提供諸多高級特性,比如類似Windows的回收站功能、類似JAVA語言的GC(垃圾回收)、快照功能等
9、MooseFS 是 Google Filesystem 的一個 c 實現
10、自帶 Web Gui 的監控接口
11、提高隨機讀或寫效率和海量小文件的讀寫效率(有待進一步證明)
缺點:
1、Master Server 本身的性能瓶頸。MFS的主備架構情況類似于MySQL的主從復制,從可以擴展,主卻不容易擴展。短期的對策就是按照業務來做切分。
2、隨著MFS體系架構中存儲文件的總數上升,Master Server對內存的需求量會不斷增大(MFS把文件系統的結構緩存到 Maset Server 的內存中)。根據官方提供的數據,8g對應2500kw的文件數,2億文件就得64GB內存。短期的對策也是按照業務來做切分。
3、Master server的單點解決方案的健壯性。目前官方自帶的是把數據信息從Master Server同步到Metalogger Server上,Master Server一旦出問題Metalogger Server可以恢復升級為Master Server,但是需要恢復時間。目前,也可以通過第三方的高可用方案(heartbeat+drbd+moosefs)來解決 Master Server 的單點問題。
4、Metalogger Server 復制元數據的間隔時間較長(可調整)
談及MooseFS的應用場景,其實就是去談分布式文件系統的應用場景。
1、大規模高并發的數據存儲及訪問(小文件、大文件),TFS適合小文件(<1M)
2、大規模的數據處理,如日志分析
針對 MooseFS 在全球的使用情況,我在國內的一篇論文上挖了一張圖。圖片如下,在該圖中標記為馴鹿的就是 Moosefs 的使用者所在區域。從圖中可以看出,它在中國、歐洲以及北美都擁有了大量的用戶,正是有了廣泛的用戶基礎,才能使得mfs特性能夠快速的迭代和進步。
整個架構中,主要有四個組件,分別是管理服務器 Master Server、備份服務器Metalogger Server、數據存儲服務器 Chunk Server 和 客戶端 Client。其中,管理服務器 Master Server 負責所有數據存儲服務器的數據存儲管理,響應客戶端文件的讀寫請求,收回文件空間以及恢復文件,多存儲節點之間的文件復制;元數據日志服務器 Metalogger Server,對 Master Server 服務器的變化日志文件進行備份,changelog_ml.*.mfs 是備份文件的類型,當 Master Server 出現故障時替換其繼續工作,避免 Master Server 的單點故障導致分布式文件系統的不能正常運行;數據存儲服務器chunkserver,服從 Master Server 的安排,定期向 Master Server 發送自己的狀態信息,除此之外,還能向客戶提供數據存儲空間,能夠向客戶傳輸數據;客戶端 Client,通過 FUSE 內核接口掛載到數據存儲服務器上,在客戶端看來使用數據存儲服務器上的文件系統和使用本地Unix文件系統是一樣的。
下面再針對這4個組件進行更詳細的介紹!
組件名稱 組件作用
管理服務器
Managing Server
簡稱Master Server
這個組件的角色是管理整個mfs文件系統的主服務器,除了分發用戶請求外,還用來存儲整個文件系統中的每個數據文件的metadata信息,metadata(元數據)信息包括文件(也可以是目錄、socket、管道、設備等)的大小、屬性、文件位置路徑等,以及文件空間的回收和恢復,控制多chunk server節點的數據拷貝。很類似lvs負載均衡主服務器,不同的是lvs僅僅根據算法分發請求,而master根據內存里的metadata信息來分發請求。這個master只能有一臺處于激活工作的狀態。
元數據備份服務器
Metadata backup servers
簡稱metalogger Server
這個組件的作用是備份管理服務器master的變化的metadata信息日志文件,文件類型為changelog_ml.*.mfs,以便于在主服務器出現問題的時候,可以經過簡單的操作即可讓新主服務器進行工作。這很類似Mysql的主從同步,只不過他不像mysql從庫那樣在本地應用數據,而只是接收主服務器上文件寫入時記錄的文件相關的metadata信息。這個backup可以有一臺或多臺,它很類似于lvs從負載均衡器。
數據存儲服務器組
Data Servers
簡稱Chunk Servers
這個組件就是真正存放數據文件實體的服務器了,這個角色可以有多臺不同的物理服務器或不同的磁盤及分區來充當,當配置數據的副本多于一份時,劇寫入到一個數據服務器后,會根據算法在其他數據服務器上進行同步備份。這個很像lvs集群的rs節點。
客戶機服務器組
Client
這個組件就是掛載并使用mfs文件系統的客戶端,當讀寫文件時,客戶端首先連接主管理服務器獲取數據的metadata信息,然后根據得到的metadata信息,訪問數據服務器讀取或寫入文件實體。mfs客戶端通過FUSE mechanism實現掛載MFS文件系統的。因此,只要系統支持FUSE,就可以作為客戶端訪問MFS整個文件系統。所謂的客戶端并不是網站用戶,而是前端訪問文件系統的應用服務器,如web
MooseFS是一個文件系統,因此其最主要的工作就是文件的讀寫流程,即 MooseFS的主要的兩大工作過程。
首先要了解的是它的讀過程。如下圖所示:
圖中 Master Server用三角形表示,Chunk Server用圓形表示,Client 用方形表示。整個讀過程有以下四個步驟:
1、首先client客戶端訪問主服務器master,獲取文件實體的位置等相關信息
2、主服務器master查詢緩存記錄,把文件實體的位置等相關信息發給client客戶端
3、Client客戶端根據拿到的信息去訪問對應的存儲實體數據的服務器(data servers或者 chunk servers)
4、存儲實體數據的服務器(data servers或者 chunk servers)把對應的數據返回給Client客戶端
從上圖,我們還可以看出,當多個MFS客戶端讀數據的時候,master服務器充當路由為這些客戶端分發指路的作用,而數據的返回時由不同的數據服務器直接返回給請求的客戶端,這樣的模式可以極大的減輕主服務器的系統及網絡瓶頸,增加了整個系統的吞吐,很像LVS的DR模式的負載均衡的分發和數據傳輸的情況。
相對于讀文件,MooseFS的寫文件流程較為復雜,如圖所示:
圖中 Master Server用三角形表示,Chunk Server用圓形表示,Client 用方形表示。
整個寫過程要分為下面八個步驟:
1、Client客戶端訪問主服務器master,請求寫入數據
2、主服務器master查詢緩存記錄,如果是新文件,則會聯系后面的數據服務器創建對應的chunk對象準備存放文件。
3、數據服務器返回創建對應的chunk對象成功給主服務器
4、主服務器master把文件實體的位置等相關信息發給client客戶端。
5、Client客戶端訪問對應的數據服務器寫數據
6、數據服務器之間進行數據同步,互相確認成功
7、數據服務器返回成功寫入信息給Client客戶端
8、Client客戶端回報給主服務器master寫入結束