glusterfs架構(gòu)和原理

分布式存儲已經(jīng)研究很多年,但直到近年來婆瓜,伴隨著谷歌笑陈、亞馬遜和阿里等互聯(lián)網(wǎng)公司云計算和大數(shù)據(jù)應(yīng)用的興起际度,它才大規(guī)模應(yīng)用到工程實(shí)踐中。如谷歌的分布式文件系統(tǒng)GFS涵妥、分布式表格系統(tǒng)google Bigtable乖菱,亞馬遜的對象存儲AWS,阿里的TFS等都是很好的代表,同時也催生了一大批優(yōu)秀的開源分布式存儲系統(tǒng)窒所,包括ceph鹉勒、swift、Lustre和glusterfs等吵取。

分布式存儲系統(tǒng)

分布式存儲按其存儲接口分為三種:文件存儲禽额、塊存儲和對象存儲。

文件存儲

通常支持POSIX接口(如glusterfs海渊,但GFS绵疲、HDFS是非POSIX接口的)哲鸳,可以像普通文件系統(tǒng)(如ext4)那樣訪問臣疑,但又比普通文件系統(tǒng)多了并行化訪問的能力和冗余機(jī)制。主要的分布式文件存儲系統(tǒng)有TFS徙菠、cephfs讯沈、glusterfs和HDFS等。主要存儲非結(jié)構(gòu)化數(shù)據(jù)婿奔,如普通文件缺狠、圖片、音視頻等萍摊〖非眩可以采用NFS和CIFS等協(xié)議訪問,共享方便冰木。NAS是文件存儲類型穷劈。

塊存儲

這種接口通常以QEMU Driver或者Kernel Module的方式存在,主要通過qemu或iscsi協(xié)議訪問踊沸。主要的塊存儲系統(tǒng)有ceph塊存儲歇终、sheepdog等。主要用來存儲結(jié)構(gòu)化數(shù)據(jù)逼龟,如數(shù)據(jù)庫數(shù)據(jù)评凝。數(shù)據(jù)共享不方便。DAS和SAN都是塊存儲類型腺律。

對象存儲

對象存儲系統(tǒng)綜合了NAS和SAN的優(yōu)點(diǎn)奕短,同時具有SAN的高速直接訪問和NAS的數(shù)據(jù)共享等優(yōu)勢。以對象作為基本的存儲單元匀钧,向外提供RESTful數(shù)據(jù)讀寫接口翎碑,常以網(wǎng)絡(luò)服務(wù)的形式提供數(shù)據(jù)訪問。主要的對象存儲系統(tǒng)有AWS榴捡、swift和ceph對象存儲杈女。主要用來存儲非結(jié)構(gòu)化數(shù)據(jù)。

Glusterfs

Glusterfs是一個開源分布式文件系統(tǒng),具有強(qiáng)大的橫向擴(kuò)展能力达椰,可支持?jǐn)?shù)PB存儲容量和數(shù)千客戶端翰蠢,通過Infiniband RDMA 或Tcp/Ip 方式將許多廉價的x86 主機(jī),通過網(wǎng)絡(luò)互聯(lián)成一個并行的網(wǎng)絡(luò)文件系統(tǒng)啰劲。具有可擴(kuò)展性梁沧、高性能、高可用性等特點(diǎn)蝇裤。

GlusterFS采用可堆疊的用戶空間設(shè)計廷支,如圖所示:

image

glusterfs堆棧式結(jié)構(gòu)

Glusterfs是根據(jù)fuse提供的接口實(shí)現(xiàn)的一個用戶態(tài)的文件系統(tǒng),主要包括gluster栓辜、glusterd恋拍、glusterfs和glusterfsd四大模塊組成:

  • gluster:是cli命令執(zhí)行工具,主要功能是解析命令行參數(shù)藕甩,然后把命令發(fā)送給glusterd模塊執(zhí)行施敢。
  • glusterd:是一個管理模塊,處理gluster發(fā)過來的命令狭莱,處理集群管理僵娃、存儲池管理、brick管理腋妙、負(fù)載均衡默怨、快照管理等。集群信息骤素、存儲池信息和快照信息等都是以配置文件的形式存放在服務(wù)器中匙睹,當(dāng)客戶端掛載存儲時,glusterd會把存儲池的配置文件發(fā)送給客戶端谆甜。
  • glusterfsd:是服務(wù)端模塊垃僚,存儲池中的每個brick都會啟動一個glusterfsd進(jìn)程。此模塊主要是處理客戶端的讀寫請求规辱,從關(guān)聯(lián)的brick所在磁盤中讀寫數(shù)據(jù)谆棺,然后返回給客戶端。
  • glusterfs:是客戶端模塊罕袋,負(fù)責(zé)通過mount掛載集群中某臺服務(wù)器的存儲池改淑,以目錄的形式呈現(xiàn)給用戶。當(dāng)用戶從此目錄讀寫數(shù)據(jù)時浴讯,客戶端根據(jù)從glusterd模塊獲取的存儲池的配置文件信息朵夏,通過DHT算法計算文件所在服務(wù)器的brick位置,然后通過Infiniband RDMA 或Tcp/Ip 方式把數(shù)據(jù)發(fā)送給brick榆纽,等brick處理完仰猖,給用戶返回結(jié)果捏肢。存儲池的副本、條帶饥侵、hash鸵赫、EC等邏輯都在客戶端處理。

在使用glusterfs提供的存儲服務(wù)之前躏升,需要先掛載存儲池辩棒,向掛載點(diǎn)寫數(shù)據(jù),會經(jīng)過fuse內(nèi)核模塊傳給客戶端膨疏,客戶端檢查存儲池的類型一睁,然后計算數(shù)據(jù)所在服務(wù)器 ,最后通過socket或rdma與服務(wù)器通信佃却,如圖2所示:

glusterfs模塊關(guān)系圖

Glusterfs作為一款開源的分布式文件系統(tǒng)者吁,在開源社區(qū)的活躍度很高,目前已經(jīng)被紅帽收購双霍,國內(nèi)外也有大量的用戶在研究和應(yīng)用砚偶,相關(guān)技術(shù)文檔很豐富。它并不完美洒闸,為了支持線性擴(kuò)展和高性能,而在小文件性能和元數(shù)據(jù)性能上做了讓步均芽,但卻可以滿足一定的場景丘逸,如大數(shù)據(jù)應(yīng)用和視頻存儲等

接下來會從優(yōu)點(diǎn)和缺點(diǎn)兩方面入手來介紹glusterfs掀宋。

優(yōu)點(diǎn)

  • 無元數(shù)據(jù)節(jié)點(diǎn)性能瓶頸
    采用無中心對稱式架構(gòu)深纲,沒有專用的元數(shù)據(jù)服務(wù)器,也就不存在元數(shù)據(jù)服務(wù)器瓶頸劲妙。元數(shù)據(jù)存在于文件的屬性和擴(kuò)展屬性中湃鹊。當(dāng)需要訪問某文件時,客戶端使用DHT算法镣奋,根據(jù)文件的路徑和文件名計算出文件所在brick币呵,然后由客戶端從此brick獲取數(shù)據(jù),省去了同元數(shù)據(jù)服務(wù)器通信的過程侨颈。
  • 良好的可擴(kuò)展性
    使用彈性hash算法代替?zhèn)鹘y(tǒng)的有元數(shù)據(jù)節(jié)點(diǎn)服務(wù)余赢,獲得了接近線性的高擴(kuò)展性。
  • 高可用
    采用副本哈垢、EC等冗余設(shè)計妻柒,保證在冗余范圍內(nèi)的節(jié)點(diǎn)掉線時,仍然可以從其它服務(wù)節(jié)點(diǎn)獲取數(shù)據(jù)耘分,保證高可用性举塔。采用弱一致性的設(shè)計绑警,當(dāng)向副本中文件寫入數(shù)據(jù)時,客戶端計算出文件所在brick央渣,然后通過網(wǎng)絡(luò)把數(shù)據(jù)傳給所在brick待秃,當(dāng)其中有一個成功返回,就認(rèn)為數(shù)據(jù)成功寫入痹屹,不必等待其它brick返回章郁,就會避免當(dāng)某個節(jié)點(diǎn)網(wǎng)絡(luò)異常或磁盤損壞時因?yàn)橐粋€brick沒有成功寫入而導(dǎo)致寫操作等待志衍。
    服務(wù)器端還會隨著存儲池的啟動暖庄,而開啟一個glustershd進(jìn)程,這個進(jìn)程會定期檢查副本和EC卷中各個brick之間數(shù)據(jù)的一致性楼肪,并恢復(fù)培廓。
  • 存儲池類型
    豐富包括粗粒度、條帶春叫、副本肩钠、條帶副本和EC,可以根據(jù)用戶的需求暂殖,滿足不同程度的冗余价匠。粗粒度卷不帶任何冗余,文件不進(jìn)行切片呛每,是完整的存放在某個brick上踩窖。
    條帶卷不帶任何冗余,文件會切片存儲(默認(rèn)大小為128kB)在不同的brick上晨横。這些切片可以并發(fā)讀寫(并發(fā)粒度是條帶塊)洋腮,可以明顯提高讀寫性能。該模式一般只適合用于處理超大型文件和多節(jié)點(diǎn)性能要求高的情況手形。
    副本卷冗余度高啥供,副本數(shù)量可以靈活配置,可以保證數(shù)據(jù)的安全性库糠。
    條帶副本卷是條帶卷和副本卷的結(jié)合伙狐。
    EC卷使用EC校驗(yàn)算法,提供了低于副本卷的冗余度曼玩,冗余度小于100%鳞骤,滿足比較低的數(shù)據(jù)安全性,例如可以使2+1(冗余度為50%)黍判、5+3(冗余度為60%)等豫尽。這個可以滿足安全性要求不高的數(shù)據(jù)。
  • 高性能
    采用弱一致性的設(shè)計顷帖,向副本中寫數(shù)據(jù)時美旧,只要有一個brick成功返回渤滞,就認(rèn)為寫入成功,不必等待其它brick返回榴嗅,這樣的方式比強(qiáng)一致性要快妄呕。
    還提供了I/O并發(fā)、write-behind嗽测、read-ahead绪励、io-cache、條帶等提高讀寫性能的技術(shù)唠粥。并且這些都還可以根據(jù)實(shí)際需求進(jìn)行開啟/關(guān)閉疏魏,i/o并發(fā)數(shù)量,cache大小都可以調(diào)整晤愧。

缺點(diǎn)

  • 擴(kuò)容大莫、縮容時影響的服務(wù)器較多
    Glusterfs對邏輯卷中的存儲單元brick劃分hash分布空間(會以brick所在磁盤大小作為權(quán)重,空間總范圍為0至232-1)官份,一個brick占一份空間只厘,當(dāng)訪問某文件時,使用Davies-Meyer算法根據(jù)文件名計算出hash值舅巷,比較hash值落在哪個范圍內(nèi)羔味,即可確定文件所在的brick,這樣定位文件會很快悄谐。但是在向邏輯卷中添加或移除brick時介评,hash分布空間會重新計算,每個brick的hash范圍都會變化爬舰,文件定位就會失敗,因此需要遍歷文件寒瓦,把文件移動到正確的hash分布范圍對應(yīng)的brick上情屹,移動的文件可能會很多,加重系統(tǒng)負(fù)載杂腰,影響到正常的文件訪問操作垃你。
  • 遍歷目錄下文件耗時
    1.Glusterfs沒有元數(shù)據(jù)節(jié)點(diǎn),而是根據(jù)hash算法來確定文件的分布喂很,目錄利用擴(kuò)展屬性記錄子卷的中brick的hash分布范圍惜颇,每個brick的范圍均不重疊。遍歷目錄時少辣,需要readdir子卷中每個brick中的目錄凌摄,獲取每個文件的屬性和擴(kuò)展屬性,然后進(jìn)行聚合漓帅,相對于有專門元數(shù)據(jù)節(jié)點(diǎn)的分布式存儲锨亏,遍歷效率會差很多痴怨,當(dāng)目錄下有大量文件時,遍歷會非常緩慢器予。
    2.刪除目錄也會遇到同樣的問題浪藻。
    3.目前提供的解決方法是合理組織目錄結(jié)構(gòu),目錄層級不要太深乾翔,目錄下文件數(shù)量不要太多爱葵,增大glusterfs目錄緩存。另外反浓,還可以設(shè)計把元數(shù)據(jù)和數(shù)據(jù)分離萌丈,把元數(shù)據(jù)放到內(nèi)存數(shù)據(jù)庫中(如redis、memcache),并在ssd上持久保存勾习。
  • 小文件性能較差
    1.Glusterfs主要是為大文件設(shè)計浓瞪,如io-cache、read-ahead巧婶、write-behind和條帶等都是為優(yōu)化大文件訪問乾颁,對小文件的優(yōu)化很少。
    2.Glusterfs采用無元數(shù)據(jù)節(jié)點(diǎn)的設(shè)計艺栈,文件的元數(shù)據(jù)和數(shù)據(jù)一起保存在文件中英岭,訪問元數(shù)據(jù)和數(shù)據(jù)的速率相同,訪問元數(shù)據(jù)的時間與訪問數(shù)據(jù)的時間比例會較大湿右,而有元數(shù)據(jù)中心的分布式存儲系統(tǒng)诅妹,對元數(shù)據(jù)服務(wù)器可以采用更快速的ssd盤,可以采用更大的元數(shù)據(jù)緩存等優(yōu)化措施來減小訪問元數(shù)據(jù)時間與訪問數(shù)據(jù)時間的比值毅人,來提高小文件性能吭狡。
    3.Glusterfs在客戶端采用了元數(shù)據(jù)緩存md-cache來提高小文件性能,但是md-cache大小有限丈莺,但在海量小文件場景下划煮,緩存命中率會嚴(yán)重下降,優(yōu)化效果會減小缔俄,這就需要增大元數(shù)據(jù)緩存弛秋。
    4.針對小文件性能差的問題,也可以參考TFS的做法俐载, TFS會將大量的小文件合并成一個大文件蟹略,這個大文件稱為Block,每個Block擁有在集群內(nèi)唯一的編號(Block Id)遏佣,Block Id在NameServer創(chuàng)建Block時分配挖炬,NameServer維護(hù)block與DataServer(存儲Block的實(shí)際數(shù)據(jù))的關(guān)系。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末贼急,一起剝皮案震驚了整個濱河市茅茂,隨后出現(xiàn)的幾起案子捏萍,更是在濱河造成了極大的恐慌,老刑警劉巖空闲,帶你破解...
    沈念sama閱讀 211,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件令杈,死亡現(xiàn)場離奇詭異,居然都是意外死亡碴倾,警方通過查閱死者的電腦和手機(jī)逗噩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,347評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跌榔,“玉大人异雁,你說我怎么就攤上這事∩耄” “怎么了纲刀?”我有些...
    開封第一講書人閱讀 157,435評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長担平。 經(jīng)常有香客問我示绊,道長,這世上最難降的妖魔是什么暂论? 我笑而不...
    開封第一講書人閱讀 56,509評論 1 284
  • 正文 為了忘掉前任面褐,我火速辦了婚禮,結(jié)果婚禮上取胎,老公的妹妹穿的比我還像新娘展哭。我一直安慰自己,他們只是感情好闻蛀,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,611評論 6 386
  • 文/花漫 我一把揭開白布匪傍。 她就那樣靜靜地躺著,像睡著了一般觉痛。 火紅的嫁衣襯著肌膚如雪析恢。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,837評論 1 290
  • 那天秧饮,我揣著相機(jī)與錄音,去河邊找鬼泽篮。 笑死盗尸,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的帽撑。 我是一名探鬼主播泼各,決...
    沈念sama閱讀 38,987評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亏拉!你這毒婦竟也來了扣蜻?” 一聲冷哼從身側(cè)響起逆巍,我...
    開封第一講書人閱讀 37,730評論 0 267
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎莽使,沒想到半個月后锐极,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,194評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡芳肌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,525評論 2 327
  • 正文 我和宋清朗相戀三年灵再,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片亿笤。...
    茶點(diǎn)故事閱讀 38,664評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡翎迁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出净薛,到底是詐尸還是另有隱情汪榔,我是刑警寧澤,帶...
    沈念sama閱讀 34,334評論 4 330
  • 正文 年R本政府宣布肃拜,位于F島的核電站痴腌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刁品,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,944評論 3 313
  • 文/蒙蒙 一笋籽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戚嗅,春花似錦、人聲如沸枢舶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,764評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凉泄。三九已至躏尉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間后众,已是汗流浹背胀糜。 一陣腳步聲響...
    開封第一講書人閱讀 31,997評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒂誉,地道東北人教藻。 一個月前我還...
    沈念sama閱讀 46,389評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像右锨,于是被迫代替她去往敵國和親括堤。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,554評論 2 349

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