【大話存儲II】學(xué)習(xí)筆記(15章),文件級集群系統(tǒng)

【大話存儲II】學(xué)習(xí)筆記(15章),塊級集群存儲系統(tǒng)里面分析的主要是塊集群系統(tǒng),同樣文件級存儲也可以集群化。

因?yàn)镹AS系統(tǒng)的前端網(wǎng)絡(luò)是以太網(wǎng),速度比較低,導(dǎo)致NAS主要用于一些非關(guān)鍵業(yè)務(wù)中,比如文件共享。但是一些特殊應(yīng)用也需要多主機(jī)同時訪問某個大文件,比如3D渲染集群等。如果我們使用塊集群存儲系統(tǒng),則會存在一個問題,需要在應(yīng)用程序上引入文件鎖,而NAS的文件系統(tǒng)一般都自帶有文件鎖機(jī)制,所以還不如把NAS存儲系統(tǒng)進(jìn)行集群化。

在談怎么樣把NAS系統(tǒng)進(jìn)行集群化之前,我們說說集群文件系統(tǒng)的架構(gòu)。集群文件系統(tǒng)是個很寬泛的概念,分布式文件系統(tǒng)、并行文件系統(tǒng)、共享文件系統(tǒng)統(tǒng)都可以稱為集群文件系統(tǒng)

集群文件系統(tǒng)

集群文件系統(tǒng),顧名思義,就是把提供文件存儲的設(shè)備進(jìn)行集群化。一般來說,我們可以使用一堆服務(wù)器來提供文件服務(wù)。

本章中,我們首先對集群文件系統(tǒng)架構(gòu)進(jìn)行分類,主要有如下幾種

  • 共享與非共享存儲型集群

  • 對稱與非對稱集群

  • 自助型與服務(wù)型集群

  • SPI與SFI型集群

  • 串行與并行集群

是否共享LUN

我們可以按照集群是否有共享LUN將架構(gòu)分為共享存儲集群和非共享存儲集群

  • 共享存儲集群

    集群的所有節(jié)點(diǎn)都是共享使用后端存儲的,注意這里的共享不是說共享磁盤陣列,而是說可以共享訪問同一個LUN。

    image.png

    這就引出另一個問題了,多主機(jī)同時讀寫同一個LUN里面的文件,如何保證數(shù)據(jù)一致性?

    無法保證數(shù)據(jù)一致性的原因在于存在多個獨(dú)立的文件系統(tǒng)邏輯,每個客戶端都要維護(hù)自己的文件系統(tǒng)緩存,而且它們之間不互相通信。

    我們可以直接把多余的文件系統(tǒng)實(shí)例去除掉,只保留一份文件系統(tǒng)邏輯,這就形成了共享式SAN文件系統(tǒng)了。

    下圖為傳統(tǒng)的架構(gòu)。多個主機(jī)共同訪問一個LUN的文件,會產(chǎn)生數(shù)據(jù)不一致。因?yàn)橹鳈C(jī)各自為政,任意一臺客戶端要訪問目標(biāo)文件的時候,會向自身內(nèi)存中的文件系統(tǒng)發(fā)起請求,從而執(zhí)行IO。

    image.png

    下圖是進(jìn)化后的架構(gòu),只需要有一個客戶端主機(jī)上保留一份文件系統(tǒng),也就是元數(shù)據(jù)服務(wù)器。所以客戶端要訪問文件的時候,需要先通過網(wǎng)絡(luò)向元數(shù)據(jù)服務(wù)器發(fā)出請求,然后自行向目標(biāo)發(fā)起訪問。

image.png
  • 非共享存儲集群

    與共享存儲集群相反則是非共享存儲集群,每個節(jié)點(diǎn)都獨(dú)占一個LUN。當(dāng)然集群也可以使用同一臺磁盤陣列,但是各自的存儲空間是之前劃分好的,只能自己訪問,別人不能訪問。


    image.png

同樣我們也可以單獨(dú)剝離出元數(shù)據(jù)服務(wù)器,然后把后端主機(jī)并行化。
這樣的好處在于,客戶端從存儲節(jié)點(diǎn)讀取數(shù)據(jù)的時候,完全可以并行訪問??梢源蟠筇嵘L問效率。

image.png

共享與非共享存儲集群對比如下:

  • 讀寫數(shù)據(jù)的過程:當(dāng)某節(jié)點(diǎn)需要訪問其他節(jié)點(diǎn)上的數(shù)據(jù)的時候,

    • 共享存儲集群:每個節(jié)點(diǎn)可以直接對后端存儲中的LUN進(jìn)行讀寫,前端傳輸?shù)闹挥性獢?shù)據(jù),而沒有實(shí)際數(shù)據(jù)流量。

    • 非共享存儲的集群文件系統(tǒng):如果要訪問非當(dāng)前節(jié)點(diǎn)的數(shù)據(jù),需要通過前端網(wǎng)絡(luò)進(jìn)行傳輸,速度較慢。

  • 緩存一致性:共享存儲需要考慮緩存一致性,一般來說需要把寫緩存給關(guān)了,非共享式不需要考慮。

  • 某節(jié)點(diǎn)故障以后:共享存儲,一個節(jié)點(diǎn)故障,另外的節(jié)點(diǎn)可以直接接管。非共享存儲,為了防止單點(diǎn)故障,需要將每個節(jié)點(diǎn)的數(shù)據(jù)鏡像一份到其他節(jié)點(diǎn)。

  • 是否需要使用SAN陣列:共享存儲必須使用SAN陣列,非共享式集群可以不使用SAN陣列,服務(wù)器節(jié)點(diǎn)的本地槽位多的話,可以使用本地磁盤,但是不可使用DAS磁盤箱。

非共享存儲型文件系統(tǒng)又可稱為“分布式文件系統(tǒng)”,即數(shù)據(jù)分布存放在集群中多個節(jié)點(diǎn)上。

image.png

是否引入IO節(jié)點(diǎn)

上一小節(jié)中講的架構(gòu)中,客戶端可以直接訪問到共享存儲。

實(shí)際上可以在插入一個中間層,可以對后端文件以另一種形式進(jìn)行輸出。

比如

  • 比如在LUN上層引入了對象存儲網(wǎng)關(guān),則就是對象存儲。

    需要客戶端需要使用支持OSD協(xié)議的代理,比如pNFS

  • 如果引入了私有設(shè)備,則需要使用相應(yīng)的代理。

  • 如果引入了NAS頭,則形成了集群NAS,對外只需要使用標(biāo)準(zhǔn)的NFS客戶端即可。

    典型代表是:Panasas , Lustre , Ibrix

image.png

終上所述,集群文件系統(tǒng)最后演化成了兩種:

  • 客戶端直接訪問后端SAN

  • 客戶端和后端FC SAN 之間引入IO節(jié)點(diǎn)的模式

這兩種方式各有其優(yōu)劣

  • 客戶端直接訪問SAN的模式,客戶端與后端的磁盤陣列沒有其他的處理模塊,IO效率最高。

    但是成本隨著客戶端的增加而增加,因?yàn)槟壳癋C HBA卡非常貴,如果每個客戶端安裝FC HBA卡,成本將非常高。此外,因?yàn)楹蠖薒UN都由元數(shù)據(jù)服務(wù)器來掛載,存在單點(diǎn)故障,一旦元數(shù)據(jù)服務(wù)器出問題了,則系統(tǒng)就癱瘓

  • 客戶端與SAN之間引入了IO節(jié)點(diǎn)的模式:

    客戶端可以使用便宜一點(diǎn)的以太網(wǎng)來進(jìn)行IO節(jié)點(diǎn)的訪問,另一方面如Ibrix這樣所有節(jié)點(diǎn)的角色對等的架構(gòu),每個節(jié)點(diǎn)都是MDS和IO節(jié)點(diǎn),這樣的話,一旦某個IO節(jié)點(diǎn)故障,則其他任何一個IO節(jié)點(diǎn)就可以接管故障節(jié)點(diǎn)的資源,容錯率高了很多。

    當(dāng)然有利必有弊,IO效率相對就比較低了,而且受以太網(wǎng)速率的限制,客戶端IO速度也不高。

image.png

角色是否對等

可以根據(jù)每個節(jié)點(diǎn)的角色是否對等分為對稱式和非對稱式文件系統(tǒng)。

所謂對稱式集群文件系統(tǒng)指的是集群中所有節(jié)點(diǎn)的角色和任務(wù)都相同,完全等價。

在對稱式集群中,所有節(jié)點(diǎn)都很聰明,每時每刻都能保持精確溝通與合作,共同掌管全局文件系統(tǒng)的元數(shù)據(jù)。每個節(jié)點(diǎn)要更新某元數(shù)據(jù)的時候,需要先將其鎖住,其他節(jié)點(diǎn)就必須等待,這樣節(jié)點(diǎn)之間的溝通量就很大。

image.png

所有節(jié)點(diǎn)在同一時刻均看到同一片景像。

那么非對稱式集群呢?

在非對稱集群中,只有少數(shù)節(jié)點(diǎn)(主備節(jié)點(diǎn))是聰明的,他們掌管著系統(tǒng)內(nèi)全局文件系統(tǒng)信息,其他節(jié)點(diǎn)不清楚。

當(dāng)其他節(jié)點(diǎn)要訪問某文件的時候,需要首先聯(lián)系這個聰明節(jié)點(diǎn),得到要訪問文件的具體信息(比如存放在哪個節(jié)點(diǎn)中的哪的LUN的什么地址里面。)

每個傻節(jié)點(diǎn)上需要安裝一個代理客戶端來于聰明節(jié)點(diǎn)通信,它獲得了文件的具體信息之后,才能讓主機(jī)從后端的LUN中拉取數(shù)據(jù)。

我們把聰明的節(jié)點(diǎn)叫Metadata Server, MDS或者M(jìn)DC,是系統(tǒng)中唯一掌握文件系統(tǒng)元數(shù)據(jù)的角色。

image.png

那么對稱集群文件系統(tǒng)與非對稱的典型代表是哪些?

  • 對稱式集群:Veritas ClusterFS , HP Ibrix

  • 非對稱式集群:中科藍(lán)鯨BWFS,EMC MPFS

顯然這兩種架構(gòu)各有優(yōu)劣勢。

  • 非對稱式集群易于實(shí)現(xiàn),溝通成本低,對應(yīng)的產(chǎn)品也多。

    客戶端只能通過元數(shù)據(jù)服務(wù)器進(jìn)行掛載,所以性能受限于元數(shù)據(jù)服務(wù)器,不過我們可以引入多個元數(shù)據(jù)節(jié)點(diǎn)來均攤負(fù)載。

  • 對稱式集群文件系統(tǒng):因?yàn)樗泄?jié)點(diǎn)的地位相同,所以掛載任何一個節(jié)點(diǎn)的目錄即可,但是節(jié)點(diǎn)之間構(gòu)成的復(fù)雜度高,不利于擴(kuò)展。

    當(dāng)節(jié)點(diǎn)少的時候,由于對稱式集群中每個節(jié)點(diǎn)都可以充當(dāng)元數(shù)據(jù)服務(wù)器的角色,所以性能更好。

image.png

是否對外提供服務(wù)

按照是否對外提供服務(wù)分為自助型和服務(wù)型

什么叫自助型集群?就是應(yīng)用是使用本地磁盤的,比如一個集群中每個節(jié)點(diǎn)都安裝了某種應(yīng)用,然后現(xiàn)在有共享系統(tǒng)內(nèi)所有文件的需求,就可以在應(yīng)用節(jié)點(diǎn)上直接部署集群文件系統(tǒng)。

所以每個節(jié)點(diǎn)不但是數(shù)據(jù)的生產(chǎn)者,還是底層文件的消費(fèi)者,這就是自助型

image.png

那什么是服務(wù)型集群文件系統(tǒng),如下圖。

框內(nèi)是集群文件系統(tǒng),框外又增加了一排主機(jī),群外的客戶端主機(jī)通過某種協(xié)議來訪問集群中文件數(shù)據(jù)。

集群中的服務(wù)節(jié)點(diǎn)不是數(shù)據(jù)的消費(fèi)者,只是服務(wù)者

image.png

為什么要使用服務(wù)型集群呢?自助型不是挺好的嗎?主要原因如下

  • 降低成本。自助型集群中每個節(jié)點(diǎn)都需要高速網(wǎng)卡,比如FC HBA卡,集群規(guī)模擴(kuò)大,則成本也會擴(kuò)大。

  • 可以接入更多的客戶端

    可以用較少的節(jié)點(diǎn)服務(wù)于更多的客戶端主機(jī)。而且內(nèi)部溝通信息量更小。


    image.png

統(tǒng)一路徑型與統(tǒng)一文件系統(tǒng)型集群

之前我們講過,為了實(shí)現(xiàn)集群的Single Name Space統(tǒng)一命名空間,有兩種方式

  • 懶人做法:既然每個節(jié)點(diǎn)都有各自的文件系統(tǒng),那么就直接把輸出路徑虛擬化一下,集中管理起來就OK。再向外輸出一個Single Path Image。只管路徑統(tǒng)一,放在那里不管。典型代表就是微軟的DFS
image.png
  • 勤快人做法:讓每個節(jié)點(diǎn)都知道所有文件的位置,在文件系統(tǒng)層進(jìn)行整合而不只是在表層路徑上進(jìn)行整合,即Single FileSystem Image。典型代表,CFS等大多數(shù)集群FS。
image.png

SFI的優(yōu)點(diǎn)在于可以將一個文件切分到各個節(jié)點(diǎn)中,這是SPI無法做到。

但是SFI的擴(kuò)展性能往往比較有限,SPI則可以整合大量的節(jié)點(diǎn)。這是因?yàn)镾FI的集群FS的節(jié)點(diǎn)之間需要同步復(fù)雜的狀態(tài),每個節(jié)點(diǎn)所維護(hù)的狀態(tài)機(jī)非常復(fù)雜,當(dāng)節(jié)點(diǎn)數(shù)量增加的時候,節(jié)點(diǎn)狀態(tài)機(jī)的協(xié)同加上網(wǎng)絡(luò)延遲,性能自然上不去。
而SPI模式下,節(jié)點(diǎn)相互獨(dú)立,同步的信息很少。。

串行與并行集群

對于服務(wù)型集群,可以提供兩種方式的對外訪問:

  • 串行的方式:掛載集群中的某個節(jié)點(diǎn)的目錄,然后所有的通信都通過這個節(jié)點(diǎn)執(zhí)行。

  • 并行訪問:

    客戶端最開始會掛載在某個節(jié)點(diǎn)上,但是只是通過這個節(jié)點(diǎn)獲取元數(shù)據(jù)信息,客戶端可以并行的訪問從多個節(jié)點(diǎn)中讀寫數(shù)據(jù)。

    • 對稱模式下的并行


      image.png
    • 非對稱模式下的并行


      image.png
image.png

集群文件系統(tǒng)中的關(guān)鍵問題

集群本質(zhì)是一堆服務(wù)器合作處理任務(wù),這一點(diǎn)集群塊存儲系統(tǒng)與集群文件存儲系統(tǒng)沒有區(qū)別。但是當(dāng)我們面對的不是單一節(jié)點(diǎn)以后,會多出很多的問題, 比如說能不能用統(tǒng)一的目錄對后端的文件進(jìn)行訪問,比如說多主機(jī)對某個文件訪問的時候會不會有沖突,還有就是每臺設(shè)備都會緩存數(shù)據(jù),會不會有緩存不一致的情況。

下面我們將一一講解

統(tǒng)一命名空間(Single Name Space)

如果我們要訪問某個文件,則需要知道文件的路徑,也就是說文件是在哪個目錄里面,比如windows下面的路徑"D:\data\file.txt",或者Linux下面的"/usr/someone/file.txt"。windows和Linux文件系統(tǒng)的設(shè)計(jì)方式不同,所以路徑看上去也不同。

  • Windows默認(rèn)為以各個分區(qū)做為入口,所以路徑開始會指明是在那個分區(qū)里面。

  • 而Linux是以全局為入口,所以開頭是根目錄"/",而各個分區(qū)都掛載到某個目錄下,比如分區(qū)sda2掛載到/home/mnt下面。那么如果我們進(jìn)入到/home/mnt,其實(shí)就相當(dāng)于進(jìn)入了sda2分區(qū)文件系統(tǒng)的根入口。同理Windows也可以把分區(qū)掛載到某個目錄下。

如果我們把一個目錄掛載到另一個目錄下面,這個被掛載的目錄就可以稱為虛擬目錄。也就是說通過虛擬目錄訪問到的不是原本屬于此目錄下的文件,而是掛載在其上的目錄樹。

所以虛擬目錄更應(yīng)該理解為一個路徑,它只是提供一個路牌,路牌上的路名不等于路的本身,只是一個名字而已。

現(xiàn)在我們來看一個集群環(huán)境下的情況。

每個節(jié)點(diǎn)都有各自的路徑,但是既然多節(jié)點(diǎn)組成了集群,對外應(yīng)該呈現(xiàn)為一套路徑。

比如說客戶端看到路徑/cluster/data1,而這個路徑真實(shí)應(yīng)該在節(jié)點(diǎn)A上。不管向集群中哪個節(jié)點(diǎn)發(fā)出請求,所有的請求都應(yīng)該重定向到節(jié)點(diǎn)A來,收到請求的節(jié)點(diǎn)就相當(dāng)于一個代理而已。也就是說已經(jīng)被某節(jié)點(diǎn)使用的路徑,不能再被其他節(jié)點(diǎn)所使用了。

這就是統(tǒng)一命名空間(Single Name Space):集群中的所有節(jié)點(diǎn)上供客戶端掛載的路徑不重復(fù),對外呈現(xiàn)為單一的NAS服務(wù)器。

這就是與非集群環(huán)境下最大區(qū)別。非集群下,兩臺NAS設(shè)備有同一個路徑,而且對外可見,那么客戶端可以掛在兩個不同的獨(dú)立存儲空間,這樣當(dāng)然管理起來很麻煩。

那么怎么實(shí)現(xiàn)統(tǒng)一命名空間呢?有兩種形式

  • 單一路徑影像(Single Path Image):

    節(jié)點(diǎn)只需要管理自己的文件系統(tǒng)空間,然后在上面加一個中間層,可以把多個文件系統(tǒng)虛擬為同一個空間。比如/a和/b虛擬化為一個/c,這種方式就是單一路徑鏡像。

    這種方式下,每個節(jié)點(diǎn)其實(shí)只能看到自己節(jié)點(diǎn)上的路徑,如果收到了訪問其他節(jié)點(diǎn)目錄的請求,應(yīng)該將請求重定向到另外的節(jié)點(diǎn)上,當(dāng)然處理的結(jié)果還是由收到請求的節(jié)點(diǎn)返回給客戶端,這樣做的目的是保證對客戶端的透明。

  • 單一文件系統(tǒng)影像(Single FileSystem Image)

    單一路徑影像只是在路徑上進(jìn)行了一層虛擬化,所以可以對外呈現(xiàn)出單一的虛擬目錄。而單一文件系統(tǒng)影像更徹底,它想將所有節(jié)點(diǎn)的文件系統(tǒng)進(jìn)行融合,所以它會在本地文件系統(tǒng)(如EXT3)上加了一層虛擬化邏輯,這樣就改變本地文件系統(tǒng)的邏輯,比如可以這樣,客戶端看來,某個文件在/fs/a上面,但是實(shí)際上有可能前半端在節(jié)點(diǎn)A,后半段在節(jié)點(diǎn)B。

    因?yàn)槲募到y(tǒng)已經(jīng)“徹底”融合了,所以集群中的每個節(jié)點(diǎn)都知道所有文件的存放位置和狀態(tài),所以這種模式下,收到客戶端IO請求的節(jié)點(diǎn)會對IO進(jìn)行解析,然后就知道數(shù)據(jù)應(yīng)該落到哪些節(jié)點(diǎn)上,最后把IO拆分后發(fā)到對應(yīng)的集群節(jié)點(diǎn)上進(jìn)行讀取或者寫入。而不是像單一路徑影像那樣將請求重定向到其他節(jié)點(diǎn)上。

總之單一路徑影像屬于松耦合,更利于節(jié)點(diǎn)的擴(kuò)充。而單一文件系統(tǒng)影像是把文件系統(tǒng)都融合了起來,屬于緊耦合,擴(kuò)展性不好,實(shí)現(xiàn)難度大。

集群中的分布式鎖機(jī)制

在單節(jié)點(diǎn)的的單一操作系統(tǒng)內(nèi),可能有多個應(yīng)用程序?qū)ν粋€文件進(jìn)行修改,這樣極有可能出現(xiàn)數(shù)據(jù)不一致的情況,于是我們引入了,這樣一個文件在同一時刻只允許這個應(yīng)用程序修改,其他應(yīng)用程序只能等待。

這樣又會出現(xiàn)一個問題,若干某個文件加鎖了,卻遲遲未被處理,其他應(yīng)用程序就只能等待,時間自然就白白浪費(fèi)了。

鎖也不是,不鎖也不是,那么有沒有兩全其美的方法呢?

當(dāng)然有,比如

  • 字節(jié)鎖:

    程序只是把某端或者某些字節(jié)加鎖了,所以多個程序可以并行的讀寫文件的不同部分。這樣鎖的粒度就降低了,可以并行的讀寫同一文件,性能自然得到提高。

  • 集群中的分布式鎖

    集群其實(shí)可以看作一臺大的獨(dú)立系統(tǒng),集群外的客戶端相當(dāng)于應(yīng)用程序,因?yàn)橛胁⑿校匀灰残枰i。

    但是集群是由多個節(jié)點(diǎn)組成的,維護(hù)鎖需要由哪些節(jié)點(diǎn)負(fù)責(zé)呢?一般有兩種方式

    • 集群中所有節(jié)點(diǎn)選一個節(jié)點(diǎn)負(fù)責(zé)鎖的維護(hù),這就是集中式鎖管理,用于非對稱式集群

    • 所有節(jié)點(diǎn)共同維護(hù)鎖,鎖的信息在節(jié)點(diǎn)上同步,這就是分布式鎖管理,用于對稱式集群。

  • 元數(shù)據(jù)鎖

    如果一個集群中,所有的節(jié)點(diǎn)的角色對等,而且共享存儲,那么此時所有的節(jié)點(diǎn)掌握著文件系統(tǒng)元數(shù)據(jù),而且是實(shí)時同步的。

    那么當(dāng)節(jié)點(diǎn)要為某個文件分配空間的時候,需要把相關(guān)的元數(shù)據(jù)鎖住。為什么呢?因?yàn)槿绻绘i住,如果此時其他節(jié)點(diǎn)也在分配空間,則兩個節(jié)點(diǎn)分配的空間可能有沖突。

    那么當(dāng)一個節(jié)點(diǎn)要分配數(shù)據(jù)了,可以利用分布式鎖機(jī)制通知其他節(jié)點(diǎn),位圖已經(jīng)由它掌控了。當(dāng)然分配完成之后,還要再與其他節(jié)點(diǎn)同步一下自己的元數(shù)據(jù)緩存。

緩存一致性

我們知道集群的節(jié)點(diǎn)會維護(hù)一個讀緩存,所以一個節(jié)點(diǎn)有可能緩存其他節(jié)點(diǎn)的某些內(nèi)容。那么就存在一種情況,某一時刻節(jié)點(diǎn)存儲的內(nèi)容被應(yīng)用修改了,但是這段內(nèi)容的讀緩存有可能在其他的節(jié)點(diǎn)上,如果此時有終端讀到了緩存里面的內(nèi)容,則出現(xiàn)與實(shí)際數(shù)據(jù)不一致的情況。

那么怎么辦?可以把讀緩存的數(shù)據(jù)作廢或者讀入新數(shù)據(jù)以更新,這就是寫即作廢機(jī)制,可以保證全局緩存一致性。

那寫緩存呢?

  • 對于有共享存儲的集群,

    最好不開寫緩存,也就是寫入的時候最好要直接寫到磁盤上再返回成功,就好比公用物品必須放回原處,別人才能繼續(xù)用,而不能只是放到自己的緩存。

    如果實(shí)在要使用寫緩存也可以,當(dāng)寫的數(shù)據(jù)放到了緩存里面以后,需要立刻通知到集群中其他節(jié)點(diǎn)。那么其他節(jié)點(diǎn)要對這段數(shù)據(jù)進(jìn)行操作的話,需要與此節(jié)點(diǎn)進(jìn)行聯(lián)系。不過這就需要花費(fèi)溝通成本來保證緩存一致性了。

  • 如果集群沒有共享存儲

    寫入的數(shù)據(jù)都緩存在本節(jié)點(diǎn)中,其他節(jié)點(diǎn)要訪問數(shù)據(jù)的話,必須聯(lián)系數(shù)據(jù)的擁有者,不存在不一致的問題。

  • 如果集群文件系統(tǒng)是對外提供服務(wù)的,那么寫緩存最好關(guān)閉,因?yàn)榧汗?jié)點(diǎn)沒有類似SAN磁盤陣列的掉電保護(hù)機(jī)制,一旦掉電,則數(shù)據(jù)丟失。

image.png

集群、并行、分布式、共享文件系統(tǒng)辨析

大家平時可能聽到多種叫法:集群文件系統(tǒng)、SAN共享文件系統(tǒng)、分布式文件系統(tǒng)、并行文件系統(tǒng)。這些概念之間是否有什么聯(lián)系呢?

  • SAN共享文件系統(tǒng):指的是共享存儲集群文件系統(tǒng)。又可簡稱為SAN文件系統(tǒng)

  • 分布式文件系統(tǒng):可以等價于非共享存儲集群文件系統(tǒng),也就是說同一個文件系統(tǒng)下的文件是存放在不同的節(jié)點(diǎn)里面

  • 并行文件系統(tǒng):可以提供并行訪問的集群文件系統(tǒng),一般需要在主機(jī)客戶端上安裝一個代理或者新的文件系統(tǒng)掛載器,專門實(shí)現(xiàn)并行訪問。

    分布式不一定代表著并行,但是并行一定是分布的。并行文件系統(tǒng)

  • 集群文件系統(tǒng):分布式文件系統(tǒng)、并行文件系統(tǒng)、共享文件系統(tǒng)統(tǒng)稱為集群文件系統(tǒng)。

    分布式共享式指的是數(shù)據(jù)分布的方式,而并行指的是用戶對數(shù)據(jù)的訪問方式。

集群NAS

【大話存儲】學(xué)習(xí)筆記(10~13章),NAS、IP SAN這一章中,我們講到了NFS/CIFS協(xié)議,它們是網(wǎng)絡(luò)文件訪問系統(tǒng),主要的作用是讓主機(jī)可以通過網(wǎng)絡(luò)的訪問NFS服務(wù)器上的文件,所以它其實(shí)不是管理文件與扇區(qū)的對應(yīng)關(guān)系的。

而FAT、NTFS是實(shí)實(shí)在在的文件系統(tǒng),是管理文件與塊的對應(yīng)關(guān)系的,我們稱為文件管理系統(tǒng)

那么現(xiàn)在我們要構(gòu)建一個集群NAS,希望他能對外提供文件訪問服務(wù)。

  • 最底層仍然使用NTFS、EXT3等文件管理系統(tǒng),主要來管理文件與塊的對應(yīng)關(guān)系,

  • 然后在上面增加一層集群文件系統(tǒng),主要用來管理集群的元數(shù)據(jù)信息

  • 再包裹一層NFS就可以對外提供文件服務(wù)了,形成了分布式并行文件系統(tǒng)。

如下圖所示


image.png

可以看出一個集群NAS系統(tǒng)其實(shí)可以分為三層架構(gòu)

  • 第一層:底層存儲空間層,可以是Share Everything(共享型)或者Share Nothing(非共享型)

  • 第二層:集群文件系統(tǒng)層,它建立在共享型或者非共享型存儲空間之上

    • 如果底層存儲是共享型的話,一般文件系統(tǒng)層都使用Single Filesystem Image。

    • 如果底層存儲使用非共享型,則既可使用Single Path Image ,又可使用Single Filesytem Image模式。

  • 第三層:NAS協(xié)議輸出層,可以有四種訪問模式:傳統(tǒng)CIFS,傳統(tǒng)NFS,pNFS并行客戶端,并行或者串行訪問。

總結(jié)一下,將集群文件系統(tǒng)中的文件用NAS協(xié)議輸出,就是集群NAS。它可以對外提供統(tǒng)一的命名空間,以及統(tǒng)一管理,若是出現(xiàn)了故障,還可以進(jìn)行故障的切換,在線平穩(wěn)的遷移等。

所以集群NAS不是簡單的NAS設(shè)備的堆砌,它可以更加的靈活,比如

  • 集群NAS有統(tǒng)一命名空間

    比如某個應(yīng)用程序需要在一個目錄下放幾十萬個小文件,如果要把這么多文件放到傳統(tǒng)的NAS的同一目錄下,性能相當(dāng)?shù)牡汀?/p>

    如果我們把文件分散到不同的目錄呢,雖然可以并發(fā)讀取小文件,但是每個文件存放的路徑必須對主機(jī)可見,麻煩的事就來了,我們必須得修改應(yīng)用程序來適應(yīng)這么多目錄。

    此時集群NAS的統(tǒng)一命名空間就非常有用了,我們之前說過,統(tǒng)一命名空間指的是對外呈現(xiàn)統(tǒng)一的虛擬目錄,屏蔽了底層的細(xì)節(jié)。具體做法是將文件系統(tǒng)承載于多個Segment,每個Segment又分配到不同的Segment Server上,這樣主機(jī)只需要掛載一個目錄,而且還不影響性能。

  • 統(tǒng)一管理、故障切換、在線遷移。如果集群NAS設(shè)備之間共享存儲則

    • 集群NAS可以隨時將負(fù)載過高的節(jié)點(diǎn)上的Segment遷移到負(fù)載低的,因?yàn)檫@些Segment Server之間共享存儲,所以不涉及到數(shù)據(jù)移動的過程。

    • 獨(dú)立的NAS Server發(fā)生故障,所管理的數(shù)據(jù)就無法訪問了,但是集群NAS因?yàn)楣蚕泶鎯?,所以在某?jié)點(diǎn)故障之后,可以由正常節(jié)點(diǎn)進(jìn)行接管(后端Segment以及IP地址等),

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容