【大話存儲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ā)起訪問。
-
非共享存儲集群
與共享存儲集群相反則是非共享存儲集群浑厚,每個(gè)節(jié)點(diǎn)都獨(dú)占一個(gè)LUN股耽。當(dāng)然集群也可以使用同一臺磁盤陣列,但是各自的存儲空間是之前劃分好的钳幅,只能自己訪問物蝙,別人不能訪問。
image.png
同樣我們也可以單獨(dú)剝離出元數(shù)據(jù)服務(wù)器敢艰,然后把后端主機(jī)并行化诬乞。
這樣的好處在于,客戶端從存儲節(jié)點(diǎn)讀取數(shù)據(jù)的時(shí)候盖矫,完全可以并行訪問丽惭。可以大大提升訪問效率辈双。
共享與非共享存儲集群對比如下:
-
讀寫數(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)上扇雕。
是否引入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
終上所述使碾,集群文件系統(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速度也不高忿项。
角色是否對等
可以根據(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)之間的溝通量就很大。
所有節(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ù)的角色繁调。
那么對稱集群文件系統(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ù)器的角色月培,所以性能更好嘁字。
是否對外提供服務(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)者,這就是自助型
那什么是服務(wù)型集群文件系統(tǒng)
,如下圖灭袁。
框內(nèi)是集群文件系統(tǒng)猬错,框外又增加了一排主機(jī),群外的客戶端主機(jī)通過某種協(xié)議來訪問集群中文件數(shù)據(jù)简卧。
集群中的服務(wù)節(jié)點(diǎn)不是數(shù)據(jù)的消費(fèi)者兔魂,只是服務(wù)者
為什么要使用服務(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
- 勤快人做法:讓每個(gè)節(jié)點(diǎn)都知道所有文件的位置幻林,在文件系統(tǒng)層進(jìn)行整合而不只是在表層路徑上進(jìn)行整合,即Single FileSystem Image音念。典型代表沪饺,CFS等大多數(shù)集群FS。
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
-
集群文件系統(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ù)丟失。
集群白魂、并行汽纤、分布式、共享文件系統(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)萧芙。
如下圖所示
可以看出一個(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地址等),