MooseFS分布式文件系統介紹
一、簡介
MooseFS是一個具備冗余容錯功能的分布式網絡文件系統,它將數據分別存放在多個物理服務器或單獨磁盤或分區上,確保一份數據有多個備份副本。對於訪問的客戶端或者用戶來說,整個分布式網絡文件系統集群看起來就像一個資源一樣。從其對文件操作的情況看,MooseFS就相當於一個類UNIX文件系統。
二、適用場景
MooseFS是一款相對小眾的分布式文件系統,不需要修改上層應用接口即可直接使用,支持FUSE的操作方式,部署簡單並提供Web界面的方式進行管理與監控,同其他分布式操作系統一樣,支持在線擴容,並進行橫向擴展。MooseFS還具有可找回誤操作刪除的文件,相當於一個回收站,方便業務進行定制;同時MooseFS對於海量小文件的讀寫要比大文件讀寫的效率高的多。但MooseFS的缺點同樣明顯,MFS的主備架構情況類似於MySQL的主從復制,從可以擴展,主卻不容易擴展。短期的對策就是按照業務來做切分,隨著MFS體系架構中存儲文件的總數上升,Master Server對內存的需求量會不斷增大。並且對於其單點問題官方自帶的是把數據信息從Master Server同步到Metalogger Server上,Master Server一旦出問題Metalogger Server可以恢復升級為Master Server,但是需要恢復時間。目前,也可以通過第三方的高可用方案(heartbeat+drbd+moosefs)來解決 Master Server 的單點問題。
三、四大組件
MooseFS文件系統主要由四大組件構成,分別為管理服務器、元數據日誌服務器、數據存儲服務器、客戶端,相關解釋如下:
- 管理服務器(Master Server):這個組件的角色是管理整個mfs文件系統的主服務器,除了分發用戶請求外,還用來存儲整個文件系統中的每個數據文件的metadata信息,metadata(元數據)信息包括文件(也可以是目錄、socket、管道、設備等)的大小、屬性、文件位置路徑等,以及文件空間的回收和恢復,控制多chunk server節點的數據拷貝。很類似lvs負載均衡主服務器,不同的是lvs僅僅根據算法分發請求,而master根據內存裏的metadata信息來分發請求。這個master只能有一臺處於激活工作的狀態。
- 元數據日誌服務器(metalogger Server):作用是備份管理服務器master的變化的metadata信息日誌文件,文件類型為changelog_ml.*.mfs,以便於在主服務器出現問題的時候,可以經過簡單的操作即可讓新主服務器進行工作。這很類似Mysql的主從同步,只不過他不像mysql從庫那樣在本地應用數據,而只是接收主服務器上文件寫入時記錄的文件相關的metadata信息。這個backup可以有一臺或多臺,它很類似於lvs從負載均衡器。
- 數據存儲服務器(Chunk Servers):存放數據文件實體的服務器了,這個角色可以有多臺不同的物理服務器或不同的磁盤及分區來充當,當配置數據的副本多於一份時,劇寫入到一個數據服務器後,會根據算法在其他數據服務器上進行同步備份。
- 客戶端(Client):掛載並使用mfs文件系統的客戶端,當讀寫文件時,客戶端首先連接主管理服務器獲取數據的metadata信息,然後根據得到的metadata信息,訪問數據服務器讀取或寫入文件實體。mfs客戶端通過FUSE mechanism實現掛載MFS文件系統的。因此,只要系統支持FUSE,就可以作為客戶端訪問MFS整個文件系統。所謂的客戶端並不是網站用戶,而是前端訪問文件系統的應用服務器,如web
四、工作方式
如下圖中 Master Server用三角形表示,Chunk Server用圓形表示,Client 用方形表示。整個讀過程有以下四個步驟:
- 首先client客戶端訪問主服務器master,獲取文件實體的位置等相關信息。
- 主服務器master查詢緩存記錄,把文件實體的位置等相關信息發給client客戶端。
- Client客戶端根據拿到的信息去訪問對應的存儲實體數據的服務器(data servers或者chunk servers)。
- 存儲實體數據的服務器(data servers或者chunk servers)把對應的數據返回給Client客戶端。
我們還可以看出,當多個MFS客戶端讀數據的時候,master服務器充當路由為這些客戶端分發指路的作用,而數據的返回時由不同的數據服務器直接返回給請求的客戶端,這樣的模式可以極大的減輕主服務器的系統及網絡瓶頸,增加了整個系統的吞吐。
MooseFS文件系統寫過成比讀過成相對復雜的多,如下圖:
- Client客戶端訪問主服務器master,請求寫入數據。
- 主服務器master查詢緩存記錄,如果是新文件,則會聯系後面的數據服務器創建對應的chunk對象準備存放文件。
- 數據服務器返回創建對應的chunk對象成功給主服務器。
- 主服務器master把文件實體的位置等相關信息發給client客戶端。
- Client客戶端訪問對應的數據服務器寫數據。
- 數據服務器之間進行數據同步,互相確認成功。
- 數據服務器返回成功寫入信息給Client客戶端。
- Client客戶端回報給主服務器master寫入結束。
MooseFS分布式文件系統介紹