【大話存儲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ī)同時(shí)訪問某個(gè)大文件,比如3D渲染集群等宋舷。如果我們使用塊集群存儲系統(tǒng)绪撵,則會存在一個(gè)問題,需要在應(yīng)用程序上引入文件鎖祝蝠,而NAS的文件系統(tǒng)一般都自帶有文件鎖機(jī)制音诈,所以還不如把NAS存儲系統(tǒng)進(jìn)行集群化。

在談怎么樣把NAS系統(tǒng)進(jìn)行集群化之前绎狭,我們說說集群文件系統(tǒng)的架構(gòu)细溅。集群文件系統(tǒng)是個(gè)很寬泛的概念,分布式文件系統(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)都是共享使用后端存儲的,注意這里的共享不是說共享磁盤陣列邻遏,而是說可以共享訪問同一個(gè)LUN。

    image.png

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

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

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

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

    image.png

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

image.png
  • 非共享存儲集群

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


    image.png

同樣我們也可以單獨(dú)剝離出元數(shù)據(jù)服務(wù)器敢艰,然后把后端主機(jī)并行化诬乞。
這樣的好處在于,客戶端從存儲節(jié)點(diǎn)讀取數(shù)據(jù)的時(shí)候盖矫,完全可以并行訪問丽惭。可以大大提升訪問效率辈双。

image.png

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

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

    • 共享存儲集群:每個(gè)節(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)故障以后:共享存儲蝇完,一個(gè)節(jié)點(diǎn)故障,另外的節(jié)點(diǎn)可以直接接管矗蕊。非共享存儲短蜕,為了防止單點(diǎn)故障,需要將每個(gè)節(jié)點(diǎn)的數(shù)據(jù)鏡像一份到其他節(jié)點(diǎn)傻咖。

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

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

image.png

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

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

實(shí)際上可以在插入一個(gè)中間層洼裤,可以對后端文件以另一種形式進(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卡非常貴,如果每個(gè)客戶端安裝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)宣旱,每個(gè)節(jié)點(diǎn)都是MDS和IO節(jié)點(diǎn)仅父,這樣的話,一旦某個(gè)IO節(jié)點(diǎn)故障浑吟,則其他任何一個(gè)IO節(jié)點(diǎn)就可以接管故障節(jié)點(diǎn)的資源驾霜,容錯(cuò)率高了很多。

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

image.png

角色是否對等

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

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

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

image.png

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

那么非對稱式集群呢日川?

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

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

每個(gè)傻節(jié)點(diǎn)上需要安裝一個(gè)代理客戶端來于聰明節(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ù)器,不過我們可以引入多個(gè)元數(shù)據(jù)節(jié)點(diǎn)來均攤負(fù)載宾袜。

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

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

image.png

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

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

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

所以每個(gè)節(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ù)型集群呢?自助型不是挺好的嗎举娩?主要原因如下

  • 降低成本。自助型集群中每個(gè)節(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)一命名空間纹烹,有兩種方式

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

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

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

串行與并行集群

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

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

  • 并行訪問:

    客戶端最開始會掛載在某個(gè)節(jié)點(diǎn)上赦役,但是只是通過這個(gè)節(jié)點(diǎn)獲取元數(shù)據(jù)信息,客戶端可以并行的訪問從多個(gè)節(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ī)對某個(gè)文件訪問的時(shí)候會不會有沖突释移,還有就是每臺設(shè)備都會緩存數(shù)據(jù)叭披,會不會有緩存不一致的情況。

下面我們將一一講解

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

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

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

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

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

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

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

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

比如說客戶端看到路徑/cluster/data1僻爽,而這個(gè)路徑真實(shí)應(yīng)該在節(jié)點(diǎn)A上虫碉。不管向集群中哪個(gè)節(jié)點(diǎn)發(fā)出請求,所有的請求都應(yīng)該重定向到節(jié)點(diǎn)A來胸梆,收到請求的節(jié)點(diǎn)就相當(dāng)于一個(gè)代理而已敦捧。也就是說已經(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è)備有同一個(gè)路徑杰刽,而且對外可見菠发,那么客戶端可以掛在兩個(gè)不同的獨(dú)立存儲空間王滤,這樣當(dāng)然管理起來很麻煩。

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

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

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

    這種方式下悠抹,每個(gè)節(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)的邏輯,比如可以這樣黑忱,客戶端看來宴抚,某個(gè)文件在/fs/a上面,但是實(shí)際上有可能前半端在節(jié)點(diǎn)A杨何,后半段在節(jié)點(diǎn)B酱塔。

    因?yàn)槲募到y(tǒng)已經(jīng)“徹底”融合了,所以集群中的每個(gè)節(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),可能有多個(gè)應(yīng)用程序?qū)ν粋€(gè)文件進(jìn)行修改酱固,這樣極有可能出現(xiàn)數(shù)據(jù)不一致的情況械念,于是我們引入了,這樣一個(gè)文件在同一時(shí)刻只允許這個(gè)應(yīng)用程序修改运悲,其他應(yīng)用程序只能等待龄减。

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

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

當(dāng)然有棍潘,比如

  • 字節(jié)鎖:

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

  • 集群中的分布式鎖

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

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

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

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

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

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

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

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

緩存一致性

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

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

那寫緩存呢霎褐?

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

    最好不開寫緩存,也就是寫入的時(shí)候最好要直接寫到磁盤上再返回成功冻璃,就好比公用物品必須放回原處响谓,別人才能繼續(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)辨析

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

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

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

  • 并行文件系統(tǒng):可以提供并行訪問的集群文件系統(tǒng)径玖,一般需要在主機(jī)客戶端上安裝一個(gè)代理或者新的文件系統(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)建一個(gè)集群NAS童擎,希望他能對外提供文件訪問服務(wù)滴劲。

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

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

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

如下圖所示


image.png

可以看出一個(gè)集群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)一命名空間

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

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

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

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

    • 集群NAS可以隨時(shí)將負(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)系作者
  • 序言:七十年代末庇谆,一起剝皮案震驚了整個(gè)濱河市岳掐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌饭耳,老刑警劉巖串述,帶你破解...
    沈念sama閱讀 217,734評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寞肖,居然都是意外死亡纲酗,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,931評論 3 394
  • 文/潘曉璐 我一進(jìn)店門新蟆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來觅赊,“玉大人,你說我怎么就攤上這事琼稻∷甭荩” “怎么了?”我有些...
    開封第一講書人閱讀 164,133評論 0 354
  • 文/不壞的土叔 我叫張陵帕翻,是天一觀的道長鸠补。 經(jīng)常有香客問我,道長熊咽,這世上最難降的妖魔是什么莫鸭? 我笑而不...
    開封第一講書人閱讀 58,532評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮横殴,結(jié)果婚禮上被因,老公的妹妹穿的比我還像新娘。我一直安慰自己衫仑,他們只是感情好梨与,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,585評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著文狱,像睡著了一般粥鞋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瞄崇,一...
    開封第一講書人閱讀 51,462評論 1 302
  • 那天呻粹,我揣著相機(jī)與錄音壕曼,去河邊找鬼。 笑死等浊,一個(gè)胖子當(dāng)著我的面吹牛腮郊,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播筹燕,決...
    沈念sama閱讀 40,262評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼轧飞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了撒踪?” 一聲冷哼從身側(cè)響起过咬,我...
    開封第一講書人閱讀 39,153評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎制妄,沒想到半個(gè)月后掸绞,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,587評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忍捡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,792評論 3 336
  • 正文 我和宋清朗相戀三年集漾,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砸脊。...
    茶點(diǎn)故事閱讀 39,919評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纬霞,靈堂內(nèi)的尸體忽然破棺而出凌埂,到底是詐尸還是另有隱情,我是刑警寧澤诗芜,帶...
    沈念sama閱讀 35,635評論 5 345
  • 正文 年R本政府宣布瞳抓,位于F島的核電站,受9級特大地震影響伏恐,放射性物質(zhì)發(fā)生泄漏孩哑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,237評論 3 329
  • 文/蒙蒙 一翠桦、第九天 我趴在偏房一處隱蔽的房頂上張望横蜒。 院中可真熱鬧,春花似錦销凑、人聲如沸丛晌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,855評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澎蛛。三九已至,卻和暖如春蜕窿,著一層夾襖步出監(jiān)牢的瞬間谋逻,已是汗流浹背编兄。 一陣腳步聲響...
    開封第一講書人閱讀 32,983評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留几缭,地道東北人殖侵。 一個(gè)月前我還...
    沈念sama閱讀 48,048評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像荧恍,于是被迫代替她去往敵國和親瓷叫。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,864評論 2 354

推薦閱讀更多精彩內(nèi)容