1. 程式人生 > >分散式檔案系統概述

分散式檔案系統概述

分散式檔案系統簡介

檔案系統是在物理儲存和檔案操作之間的抽象層,使得檔案管理,儲存管理更加方便。分散式檔案系統,使得檔案系統容易擴容,方便配置,方便共享和管理。當然具體解釋就是檔案系統管理的物理儲存資源不一定直接連線在本地節點上,而是通過計算機網路與節點相連,也就是叢集檔案系統,可以支援大數量的節點以及PB級的資料儲存。

常見的專有的分散式檔案系統比如GFS、HDFS(模仿GFS)、PanFS、Lustre,MogileFS、FastDFS等等。

通用的檔案系統比如NFS、AFS。

一般來說,分散式檔案系統有以下特點:

  • 可以組建包含大量廉價伺服器的海量儲存系統。
  • 通過內部的冗餘複製,保證檔案的可以用性,在海量儲存系統中,容錯能力非常重要
  • 可擴充套件性強,增加儲存節點和追蹤器都比較容易
  • 在對個檔案副本之間就進行負載均衡,可以通過橫向擴充套件來確保效能的提升
  • 進行特定的索引檔案計算

普通的儲存方法

Rsync、DAS(IDE/SATA/SAS/SCSI等塊)、NAS(NFS、CIFS、SAMBA等檔案系統)、SAN(FibreChannel, iSCSI, FoE儲存網路塊),Openfiler、FreeNas(ZFS快照複製)。由於生產環境中往往由於對儲存資料量很大,而SAN儲存價格又比較昂貴。

分散式儲存方法

常見的分散式檔案系統有FastDFS,GFS、HDFS、Ceph 、GridFS 、mogileFS、TFS等。各自適用於不同的領域。它們都不是系統級的分散式檔案系統,而是應用級的分散式檔案儲存服務。

NFS

NFS 是Network File System的縮寫,即網路檔案系統。一種使用於分散式檔案系統的協定,由Sun公司開發,於1984年向外公佈。功能是通過網路讓不同的機器、不同的作業系統能夠彼此分享個別的資料,讓應用程式在客戶端通過網路訪問位於伺服器磁碟中的資料,是在類Unix系統間實現磁碟檔案共享的一種方法。

NFS 的基本原則是“容許不同的客戶端及服務端通過一組RPC分享相同的檔案系統”,它是獨立於作業系統,容許不同硬體及作業系統的系統共同進行檔案的分享。

nfsd:它是基本的NFS守護程序,主要功能是管理客戶端是否能夠登入伺服器;mountd:它是RPC安裝守護程序,主要功能是管理NFS的檔案系統。當客戶端順利通過nfsd登入NFS伺服器後,在使用NFS服務所提供的檔案前,還必須通過檔案使用許可權的驗證。它會讀取NFS的配置檔案/etc/exports來對比客戶端許可權;idmapd:主要功能是進行埠對映工作。當客戶端嘗試連線並使用RPC伺服器提供的服務(如NFS服務)時,rpcbind會將所管理的與服務對應的埠提供給客戶端,從而使客戶可以通過該埠向伺服器請求服務。

使用NFS mount到了客戶端之後,客戶端訪問遠端檔案就像訪問本地檔案一樣。mount之後,路徑訪問每次只能訪問當前目錄,需要一次RPC,所以使用者端最好進行快取。為什麼不能直接把整個目錄全部返回,因為伺服器不知道使用者端在該目錄下的檔案有沒有mount別的檔案系統,這樣貿然返回全部,很浪費資源,而且客戶端不一定用得到。當然也存在有時候需要返回全部的情況,但是NFS v4.2才有,目前該版本還在開發中。

在NFSv3維護快取一致性的時候,採用的是30s原則。使用了一個叫做租約的東西。AFS是讀取最近關閉的版本的資料。Unix是能夠獲得最近多有的寫操作;HTTP:沒有進行一致性操作,每次讀取資料,都要判斷是否是最新的資料。在30s內伺服器不會做出改變,客戶端使用write-through 快取,並且再超過30s以後檢查快取。客戶端提供會話和快取,伺服器做了一個本地伺服器能夠做的一切。(屬於無狀態快取,stateless)

有無狀態的儲存(伺服器需要儲存客戶端狀態麼?)

  • 無狀態:簡單,更快速,容易從崩潰之後恢復;不會有因為追蹤狀態而消耗資源的問題;
  • 有狀態:更快,可能。能夠提供更好的語義操作。

客戶端訪問分散式檔案時需要handle,這個handle來自於伺服器,有inode number,還有根據當前inode隨機生成的數字。

多伺服器儲存

如果只有一個伺服器來響應請求的話,那麼負載過大,這個伺服器會變成瓶頸。考慮到負載均衡和排程更新,可以使用多伺服器。

NFSv3中,每個伺服器都存了不同的檔案,並且都有自己的NFS名稱空間。具體怎麼掛載就是客戶端的事情。每次使用者端訪問一個檔案,需要遍歷名稱空間來找到mount的節點。負載均衡方面系統管理員手動地將檔案子樹賦給另外一個。

pNFS

直接送到儲存媒介而不需要通過檔案系統。

Storage Devices是儲存檔案實際資料的裝置,由一臺或者多臺資料伺服器構成。當Clients獲得了檔案的layout後,就可以直接向Storage Devices傳送資料了。由於Storage Devices包含多臺資料伺服器 Clients可以同時執行多個I/O請求,從而提升了系統吞吐量。pNFS只是Clients和Server之間的通訊協議,Clients和Storage Devices傳輸資料時需要使用專門的儲存協議。目前RFC定義了三種儲存協議:file layout(RFC5661)、block layout(RFC5663)、object layout(RFC5664)

Server是支援pNFS特性的一臺NFS伺服器,Server中儲存了檔案的佈局結構(layout)。檔案佈局是對檔案在Storage Devices中儲存方式的一種說明,Clients在讀寫資料前需要先向Server請求檔案的layout,通過layout,Clients就可以知道檔案儲存在哪個Storage Device中了,以及是如何儲存的。讀寫操作完成後,Clients需要將layout返還給Server。如果是寫操作,Clients可能會修改layout,寫操作完成後需要更新Server中的layout。

AFS

客戶端獲取整個檔案並從伺服器獲得回撥函式,在v3版本的時候是使用64KB的chunk,當然也支援整個檔案。伺服器使用回調當資料發生了變化。客戶端使用write-back整個檔案關閉的時候。(cache+callback)

AFS中,伺服器也是服務獨立的檔案集合,但是在名稱空間上只有一個。AFS內部會進行連線,幫客戶找到檔案在的伺服器volumn,而不需要使用者進行。遍歷名稱空間,就可以找到對應的volumn進行管理。在負載均衡上面,使用輪流改變volumn來獲得。

PFS(parallel file system)

GPFS

IBM GPFS檔案系統是一種專門為群集環境設計的高效能、可擴充套件的並行檔案系統。GPFS可以在群集中的多個節點間實現對共享檔案系統中檔案的快速存取操作,並提供穩定的故障恢復和容錯機制。主要就是HPC,超算進行。

解決metadata伺服器瓶頸的方法:IBM GPFS並行檔案系統與其它並行檔案系統之間最大的區別在於GPFS不需要專用的元資料(Meta Data)管理伺服器,所有元資料分散在磁碟陣列中,並可以由任何I/O節點管理。這樣的設計避免了並行檔案系統中最可能產生效能瓶頸的因素——Meta Data Server。

在檔案系統層面,每個GPFS叢集中可以建立最多256個檔案系統,每個檔案系統都對應多個管理伺服器(可以由任何I/O節點承擔)。當任何一個檔案系統管理伺服器宕機時,都會有另外一個伺服器自動接替其工作,保證並行檔案系統的高可用性。

GFS

Goolge的法寶:GFS、BigTable、Chubby、MapReduce。

首先來說一下GFS和NFS、AFS的區別:NFS、GFS都是Remote Access Model,需要用RPC進行,每次對檔案的修改立馬會反饋給伺服器。AFS使用的是Upload/ Download Model,拷貝檔案到本地,只有關閉本地檔案的時候才會把所有的更新返回,同時使用了callback函式,只有callback說本地快取有效才能使用。

GFS用單一主控機+多臺工作機的模式,由一臺主控機(Master)儲存系統全部元資料,並實現資料的分佈、複製、備份決策,主控機還實現了元資料的checkpoint和操作日誌記錄及回放功能。工作機儲存資料,並根據主控機的指令進行資料儲存、資料遷移和資料計算等。其次,GFS通過資料分塊和複製(多副本,一般是3)來提供更高的可靠性和更高的效能。當其中一個副本不可用時,系統都提供副本自動複製功能。同時,針對資料讀多於寫的特點,讀服務被分配到多個副本所在機器,提供了系統的整體效能。最後,GFS提供了一個樹結構的檔案系統,實現了類似與Linux下的檔案複製、改名、移動、建立、刪除操作以及簡單的許可權管理等。

GFS簡介

GFS針對應用是大檔案,連續讀,不修改,高併發。

  • chunkserver提供儲存。GFS會將檔案劃分為定長資料塊,每個資料塊都有一個全域性唯一不可變的id(chunk_handle),資料塊以普通Linux檔案的形式儲存在chunkserver上,出於可靠性考慮,每個資料塊會儲存多個副本,分佈在不同chunkserver。
  • GFS master就是GFS的元資料伺服器,負責維護檔案系統的元資料,包括名稱空間、訪問控制、檔案-塊對映、塊地址等,以及控制系統級活動,如垃圾回收、負載均衡等。

BigTable

Bigtable是一個為管理大規模結構化資料而設計的分散式儲存系統,可以擴充套件到PB級資料和上千臺伺服器。本質上說,Bigtable是一個鍵值(key-value)對映。按作者的說法,Bigtable是一個稀疏的,分散式的,持久化的,多維的排序對映。稀疏的意思是行列時間戳的維度可以不一樣,分散式是以為BigTable本身就是建立在GFS上,持久化就是它在GFS上建立可以保持資料的穩定性。用GFS來儲存日誌和資料檔案;按SSTable檔案格式儲存資料;用Chubby管理元資料。主伺服器負責將片分配給片伺服器,監控片伺服器的新增和刪除,平衡片伺服器的負載,處理表和列族的建立等。注意,主伺服器不儲存任何片,不提供任何資料服務,也不提供片的定位資訊。

客戶端需要讀寫資料時,直接與片伺服器聯絡。因為客戶端並不需要從主伺服器獲取片的位置資訊,所以大多數客戶端從來不需要訪問主伺服器,主伺服器的負載一般很輕。

MapReduce

可以看我的部落格關於Hadoop的東西,在how to write fast code 專欄裡面,還有程式碼實現或者參考文獻10,這裡面的解釋還不錯。

Chubby

Consensus:在一個分散式系統中,有一組的Process,它們需要確 定一個Value。於是每個Process都提出了一個Value,consensus就是指只有其中的一個Value能夠被選中作為最後確定的值,並且 當這個值被選出來以後,所有的Process都需要被通知到。

在GFS中,進行資料傳遞的時候,Master需要選擇一個chunkserver作為臨時的Master響應客戶端的請求,這個就是一個consensus的問題。

Chubby是一個 lock service,一個針對鬆耦合的分散式系統的lock service。所謂lock service,就是這個service能夠提供開發人員經常用的“鎖”,“解鎖”功能。通過Chubby,一個分散式系統中的上千個client都能夠 對於某項資源進行“加鎖”,“解鎖”。
那麼,Chubby是怎樣實現這樣的“鎖”功能的?就是通過檔案。Chubby中的“鎖”就是檔案,在上例 中,建立檔案其實就是進行“加鎖”操作,建立檔案成功的那個server其實就是搶佔到了“鎖”。使用者通過開啟、關閉和讀取檔案,獲取共享鎖或者獨佔鎖; 並且通過通訊機制,向用戶傳送更新資訊。

資料備份

可以看我之前的部落格。

參考連結:
1、分散式檔案系統簡介:

2、各種分散式檔案系統簡介:

3、NFS與GFS的區別:

4、NFS的簡介:

5、pNFS的介紹:

6、GFS與NFS的區別:

7、GFS、HDFS、Blob File System架構對比:

8、BigTable:

9、GFS:

10、MapReduce:

11、Google Cluster:

12、Chubby:

13、GPFS:

14、並行檔案系統簡介: