1. 程式人生 > >MooseFS分散式檔案系統介紹

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檔案系統主要由四大元件構成,分別為管理伺服器、元資料日誌伺服器、資料儲存伺服器、客戶端,相關解釋如下:

  1. 管理伺服器(Master Server):這個元件的角色是管理整個mfs檔案系統的主伺服器,除了分發使用者請求外,還用來儲存整個檔案系統中的每個資料檔案的metadata資訊,metadata(元資料)資訊包括檔案(也可以是目錄、socket、管道、裝置等)的大小、屬性、檔案位置路徑等,以及檔案空間的回收和恢復,控制多chunk server節點的資料拷貝。很類似lvs負載均衡主伺服器,不同的是lvs僅僅根據演算法分發請求,而master根據記憶體裡的metadata資訊來分發請求。這個master只能有一臺處於啟用工作的狀態。
  2. 元資料日誌伺服器(metalogger Server):作用是備份管理伺服器master的變化的metadata資訊日誌檔案,檔案型別為changelog_ml.*.mfs,以便於在主伺服器出現問題的時候,可以經過簡單的操作即可讓新主伺服器進行工作。這很類似Mysql的主從同步,只不過他不像mysql從庫那樣在本地應用資料,而只是接收主伺服器上檔案寫入時記錄的檔案相關的metadata資訊。這個backup可以有一臺或多臺,它很類似於lvs從負載均衡器。
  3. 資料儲存伺服器(Chunk Servers):存放資料檔案實體的伺服器了,這個角色可以有多臺不同的物理伺服器或不同的磁碟及分割槽來充當,當配置資料的副本多於一份時,劇寫入到一個數據伺服器後,會根據演算法在其他資料伺服器上進行同步備份。
  4. 客戶端(Client):掛載並使用mfs檔案系統的客戶端,當讀寫檔案時,客戶端首先連線主管理伺服器獲取資料的metadata資訊,然後根據得到的metadata資訊,訪問資料伺服器讀取或寫入檔案實體。mfs客戶端通過FUSE mechanism實現掛載MFS檔案系統的。因此,只要系統支援FUSE,就可以作為客戶端訪問MFS整個檔案系統。所謂的客戶端並不是網站使用者,而是前端訪問檔案系統的應用伺服器,如web

四、工作方式

如下圖中 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伺服器充當路由為這些客戶端分發指路的作用,而資料的返回時由不同的資料伺服器直接返回給請求的客戶端,這樣的模式可以極大的減輕主伺服器的系統及網路瓶頸,增加了整個系統的吞吐。

MooseFS檔案系統寫過成比讀過成相對複雜的多,如下圖:

  1. Client客戶端訪問主伺服器master,請求寫入資料。
  2. 主伺服器master查詢快取記錄,如果是新檔案,則會聯絡後面的資料伺服器建立對應的chunk物件準備存放檔案。
  3. 資料伺服器返回建立對應的chunk物件成功給主伺服器。
  4. 主伺服器master把檔案實體的位置等相關資訊發給client客戶端。
  5. Client客戶端訪問對應的資料伺服器寫資料。
  6. 資料伺服器之間進行資料同步,互相確認成功。
  7. 資料伺服器返回成功寫入資訊給Client客戶端。
  8. Client客戶端回報給主伺服器master寫入結束。