GlusterFS架構與維護

官方網站http://www.gluster.org/php

下載地址http://download.gluster.org/pub/gluster/glusterfs/node

GlusterFS 外部架構linux

wKiom1eDiHjA-6YjAAW6vXeeVEE704.png

    GlusterFS整體架構與組成部分如圖2所示,它主要由存儲服務器(BrickServer)、客戶端以及NFS/Samba 存儲網關組成。不難發現,GlusterFS 架構中沒有元數據服務器組件,這是其最大的設計這點,對於提高整個系統的性能、可靠性和穩定性都有着決定性的意義。GlusterFS 支持TCP/IP 和InfiniBandRDMA 高速網絡互聯,客戶端可經過原生Glusterfs 協議訪問數據,其餘沒有運行GlusterFS客戶端的終端可經過NFS/CIFS 標準協議經過存儲網關訪問數據。算法

GlusterFS內部架構
編程

wKioL1eDiNayWoKEAAcdvSoqpMo543.png

GlusterFS是模塊化堆棧式的架構設計,如上圖所示。模塊稱爲Translator,是GlusterFS提供的一種強大機制,藉助這種良好定義的接口能夠高效簡便地擴展文件系統的功能。緩存

1.服務端與客戶端模塊接口是兼容的,同一個translator可同時在兩邊加載。安全

2.GlusterFS中全部的功能都是經過translator實現,如Cluster, Storage,Performance, Protocol, Features等。性能優化

3.重點是GlusterFSClient端。bash

GlusterFS數據訪問流程
服務器

wKiom1eDiTDxNAtWAACeeKXHV3M342.png

上圖是GlusterFS數據訪問的一個概要圖:

1.首先是在客戶端,用戶經過glusterfs的mount point 來讀寫數據。

2.用戶的這個操做被遞交給本地linux系統的VFS來處理。

3.VFS將數據遞交給FUSE內核文件系統,在啓動glusterfs客戶端之前,須要向系統註冊一個實際的文件系統FUSE,如上圖所示,該文件系統與ext3在同一個層次上面,ext3是對實際的磁片進行處理,而fuse文件系統則是將數據經過/dev/fuse這個設備文件遞交給了glusterfs client端。因此,咱們能夠將fuse文件系統理解爲一個代理。

4.數據被fuse遞交給Glusterfs client 後,client對數據進行一些指定的處理(所謂的指定,是按照client配置文件來進行的一系列處理)

5.在glusterfsclient的處理末端,經過網路將數據遞交給Glusterfs Server,而且將數據寫入到服務器所控制的存儲設備上

技術特色

GlusterFS在技術實現上與傳統存儲系統或現有其餘分佈式文件系統有顯著不一樣之處,主要體如今以下幾個方面。

徹底軟件實現(SoftwareOnly)

GlusterFS認爲存儲是軟件問題,不可以把用戶侷限於使用特定的供應商或硬件配置來解決。GlusterFS採用開放式設計,普遍支持工業標準的存儲、網絡和計算機設備,而非與定製化的專用硬件設備捆綁。對於商業客戶,GlusterFS能夠以虛擬裝置的形式交付,也能夠與虛擬機容器打包,或者是公有云中部署的映像。開源社區中,GlusterFS被大量部署在基於廉價閒置硬件的各類操做系統上,構成集中統一的虛擬存儲資源池。簡言之,GlusterFS是開放的全軟件實現,徹底獨立於硬件和操做系統。

完整的存儲操做系統棧(CompleteStorage Operating System Stack)

GlusterFS不只提供了一個分佈式文件系統,並且還提供了許多其餘重要的分佈式功能,好比分佈式內存管理、I/O調度、軟RAID和自我修復等。GlusterFS汲取了微內核架構的經驗教訓,借鑑了GNU/Hurd操做系統的設計思想,在用戶空間實現了完整的存儲操做系統棧。

用戶空間實現(User Space)

與傳統的文件系統不一樣,GlusterFS在用戶空間實現,這使得其安裝和升級特別簡便。另外,這也極大下降了普通用戶基於源碼修改GlusterFS的門檻,僅僅須要通用的C程序設計技能,而不須要特別的內核編程經驗。

模塊化堆棧式架構(ModularStackable Architecture)

GlusterFS採用模塊化、堆棧式的架構,可經過靈活的配置支持高度定製化的應用環境,好比大文件存儲、海量小文件存儲、雲存儲、多傳輸協議應用等。每一個功能以模塊形式實現,而後以積木方式進行簡單的組合,便可實現複雜的功能。好比,Replicate模塊可實現RAID1,Stripe模塊可實現RAID0,經過二者的組合可實現RAID10和RAID01,同時得到高性能和高可性。

原始數據格式存儲(DataStored in Native Formats)

GlusterFS無元數據服務設計(NoMetadata with the Elastic Hash Algorithm)以原始數據格式(如EXT三、EXT四、XFS、ZFS)儲存數據,並實現多種數據自動修復機制。所以,系統極具彈性,即便離線情形下文件也能夠經過其餘標準工具進行訪問。若是用戶須要從GlusterFS中遷移數據,不須要做任何修改仍然能夠徹底使用這些數據。

對Scale-Out存儲系統而言,最大的挑戰之一就是記錄數據邏輯與物理位置的映像關係,即數據元數據,可能還包括諸如屬性和訪問權限等信息。傳統分佈式存儲系統使用集中式或分佈式元數據服務來維護元數據,集中式元數據服務會致使單點故障和性能瓶頸問題,而分佈式元數據服務存在性能負載和元數據同步一致性問題。特別是對於海量小文件的應用,元數據問題是個很是大的挑戰。

GlusterFS獨特意採用無元數據服務的設計,取而代之使用算法來定位文件,元數據和數據沒有分離而是一塊兒存儲。集羣中的全部存儲系統服務器均可以智能地對文件數據分片進行定位,僅僅根據文件名和路徑並運用算法便可,而不須要查詢索引或者其餘服務器。這使得數據訪問徹底並行化,從而實現真正的線性性能擴展。無元數據服務器極大提升了GlusterFS的性能、可靠性和穩定性。

一些設計與討論

無元數據服務器vs 元數據服務器

無元數據服務器設計的好處是沒有單點故障和性能瓶頸問題,可提升系統擴展性、性能、可靠性和穩定性。對於海量小文件應用,這種設計可以有效解決元數據的難點問題。它的負面影響是,數據一致問題更加複雜,文件目錄遍歷操做效率低下,缺少全局監控管理功能。同時也致使客戶端承擔了更多的職能,好比文件定位、名字空間緩存、邏輯卷視圖維護等等,這些都增長了客戶端的負載,佔用至關的CPU 和內存。

用戶空間vs內核空間

用戶空間實現起來相對要簡單許多,對開發者技能要求較低,運行相對安全。用戶空間效率低,數據須要屢次與內核空間交換,另外GlusterFS 藉助FUSE 來實現標準文件系統接口,性能上又有所損耗。內核空間實現能夠得到很高的數據吞吐量,缺點是實現和調試很是困難,程序出錯常常會致使系統崩潰,安全性低。縱向擴展上,內核空間要優於用戶空間,GlusterFS 有橫向擴展能力來彌補。

堆棧式vs 非堆棧式

這有點像操做系統的微內核設計與單一內核設計之爭。GlusterFS 堆棧式設計思想源自GNU/Hurd 微內核操做系統,具備很強的系統擴展能力,系統設計實現複雜性下降不少,基本功能模塊的堆棧式組合就能夠實現強大的功能。查看GlusterFS卷配置文件咱們能夠發現,translator 功能樹一般深達10層以上,一層一層進行調用,效率可見一斑。非堆棧式設計可當作相似Linux 的單一內核設計,系統調用經過中斷實現,很是高效。後者的問題是系統核心臃腫,實現和擴展複雜,出現問題調試困難。

原始存儲格式vs 私有存儲格式

GlusterFS使用原始格式存儲文件或數據分片,能夠直接使用各類標準的工具進行訪問,數據互操做性好,遷移和數據管理很是方便。然而,數據安全成了問題,由於數據是以平凡的方式保存的,接觸數據的人能夠直接複製和查看。這對不少應用顯然是不能接受的,好比雲存儲系統,用戶特別關心數據安全,這也是影響公有云存儲發展的一個重要緣由。私有存儲格式能夠保證數據的安全性,即便泄露也是不可知的。GlusterFS 要實現本身的私有格式,在設計實現和數據管理上相對複雜一些,也會對性能產生必定影響。

大文件vs 小文件

GlusterFS 適合大文件仍是小文件存儲?彈性哈希算法和Stripe 數據分佈策略,移除了元數據依賴,優化了數據分佈,提升數據訪問並行性,可以大幅提升大文件存儲的性能。對於小文件,無元數據服務設計解決了元數據的問題。但GlusterFS 並無在I/O 方面做優化,在存儲服務器底層文件系統上仍然是大量小文件,本地文件系統元數據訪問是一個瓶頸,數據分佈和並行性也沒法充分發揮做用。所以,GlusterFS 適合存儲大文件,小文件性能較差,還存在很大優化空間。

可用性vs 存儲利用率

GlusterFS使用複製技術來提供數據高可用性,複製數量沒有限制,自動修復功能基於複製來實現。可用性與存儲利用率是一個矛盾體,可用性高存儲利用率就低,反之亦然。採用複製技術,存儲利用率爲1/複製數,鏡像是50%,三路複製則只有33%。其實,能夠有方法來同時提升可用性和存儲利用率,好比RAID5的利用率是(n-1)/n,RAID6是(n-2)/n,而糾刪碼技術能夠提供更高的存儲利用率。可是,魚和熊掌不可得兼,它們都會對性能產生較大影響。

術語表:

Xlator=translator:glusterfs 模塊的代名詞

Brick :存儲目錄是Glusterfs 的基本存儲單元,由可信存儲池中服務器上對外

輸出的目錄表示。存儲目錄的格式由服務器和目錄的絕對路徑構成,具體以下:

SERVER:EXPORT.例如:myhostname:/exports/myexportdir/

Volume :卷是存儲目錄的邏輯組合。大部分gluster 管理操做是在捲上進行的。

Metadata:元數據關於數據的數據,用於描述文件、目錄等的相關信息。

FUSE=Filesystem inUserspace: 是一個內核模塊,容許用戶建立本身的文件系

統無需修改內核代碼。

Glusterd : Glusterfs 後臺進程,運行在全部Glusterfs 節點上。

DistributeVolume: 分佈式卷

ReplicateVolume: 副本卷

StripeVolume: 條帶卷

DistributeReplicate Volume: 分佈式副本卷

DHT=Distribute HashTable

AFR=Automatic FileReplication

SAN = Storage AreaNetwork: 存儲區域網絡是一種高速網絡或子網絡,提供在計算機與存儲之間的數據傳輸。

NAS = Network-attachedstorage:網絡附屬存儲是一種將分佈、獨立的數據整合爲大型、集中化管理的數據中心,以便於對不一樣主機和應用服務器進行訪問的技術。

RPC =Remote ProcedureCall: 遠程過程調用

XDR =eXtern DataRepresentation: RPC 傳遞數據的格式

CLI=Command LineInterface 控制檯

argp=Argument Parser

UUID=University UnqiueIdentifier

SVC =service

CLNT =client

MGMT=management

cbks = Call Backs

ctx = context

lk = lock

attr = attribute

txn = transaction

rb = replace brick

worm = write once , readmany

系統配額:

一、開啓/關閉系統配額

gluster volume quota VOLNAME enable/disable


二、設置(重置)目錄配額

gluster volume quota VOLNAME limit-usage /img limit-value
gluster volume quota img limit-usage /quota 10GB


設置img 卷下的quota 子目錄的限額爲10GB。這個目錄是以系統掛載目錄爲根目錄」/」,因此/quota 即客戶端掛載目錄下的子目錄quota

三、配額查看

gluster volume quota VOLNAME list
gluster volume quota VOLNAME list


可使用如上兩個命令進行系統卷的配額查看,第一個命令查看目的卷的全部配額設置,

第二個命令則是執行目錄進行查看。能夠顯示配額大小及當前使用容量,若無使用容量(最小0KB)則說明設置的目錄多是錯誤的(不存在)。

 地域複製:

gluster volume geo-replication MASTER SLAVE start/status/stop

 //地域複製是系統提供的災備功能,可以將系統的所有數據進行異步的增量備份到另外的磁盤中。

gluster volume geo-replication img 192.168.10.8:/data1/brick1 start

如上,開始執行將img 卷的全部內容備份到10.8 下的/data1/brick1 中的task,須要注意的是,這個備份目標不能是系統中的Brick。

 平衡卷:

平衡佈局是頗有必要的,由於佈局結構是靜態的,當新的bricks 加入現有卷,新建立的文件會分佈到舊的bricks 中,因此須要平衡佈局結構,使新加入的bricks 生效。佈局平衡只是使

新佈局生效,並不會在新的佈局移動老的數據,若是你想在新佈局生效後,從新平衡卷中的數據,還須要對卷中的數據進行平衡。

當你擴展或者縮小卷以後,須要從新在服務器直接從新平衡一下數據,從新平衡的操做被分

爲兩個步驟:

一、Fix Layout

修改擴展或者縮小後的佈局,以確保文件能夠存儲到新增長的節點中。

二、Migrate Data

從新平衡數據在新加入bricks 節點以後。

* Fix Layout and Migrate Data

先從新修改佈局而後移動現有的數據(從新平衡)

# gluster volume rebalance VOLNAME fix-layout start
# gluster volume rebalance VOLNAME migrate-data start

也能夠兩步合一步同時操做

# gluster volume rebalance VOLNAME start
# gluster volume rebalance VOLNAME status //你能夠在在平衡過程當中查看平衡信息
#  gluster volume rebalance VOLNAME stop //你也能夠暫停平衡,再次啓動平衡的時候會從上次暫停的地方繼續開始平衡。

I/O 信息查看:

Profile Command 提供接口查看一個卷中的每個brick 的IO 信息

#gluster volume profile VOLNAME start //啓動profiling,以後則能夠進行IO 信息查看
#gluster volume profile VOLNAME info //查看IO 信息,能夠查看到每個Brick 的IO 信息
#gluster volume profile VOLNAME stop //查看結束以後關閉profiling 功能

Top監控:

Top command 容許你查看bricks 的性能例如:read, write, fileopen calls, file read calls, file,write calls,directory open calls, and directory real calls

全部的查看均可以設置top 數,默認100

# gluster volume top VOLNAME open [brick BRICK-NAME] [list-cnt cnt] //查看打開的fd
# gluster volume top VOLNAME read [brick BRICK-NAME] [list-cnt cnt] //查看調用次數最多的讀調用
# gluster volume top VOLNAME write [brick BRICK-NAME] [list-cnt cnt] //查看調用次數最多的寫調用
# gluster volume top VOLNAME opendir [brick BRICK-NAME] [list-cnt cnt] //查看次數最多的目錄調用
# gluster volume top VOLNAME readdir [brick BRICK-NAME] [list-cnt cnt] //查看次數最多的目錄調用
# gluster volume top VOLNAME read-perf [bs blk-size count count] [brickBRICK-NAME] [list-cnt cnt] //查看每一個Brick 的讀性能
# gluster volume top VOLNAME write-perf [bs blk-size count count] [brickBRICK-NAME] [list-cnt cnt] //查看每一個Brick 的寫性能

性能優化配置選項:

gluster volume set arch-img cluster.min-free-disk 默認是10% 磁盤剩餘告警
gluster volume set arch-img cluster.min-free-inodes 默認是5% inodes 剩餘告警
gluster volume set img performance.read-ahead-page-count 8 默認4,預讀取的數量
gluster volume set img performance.io-thread-count 16 默認16 io 操做的最大線程
gluster volume set arch-img network.ping-timeout 10 默認42s
gluster volume set arch-img performance.cache-size 2GB 默認128M 或32MB,
gluster volume set arch-img cluster.self-heal-daemon on 開啓目錄索引的自動癒合進程
gluster volume set arch-img cluster.heal-timeout 300 自動癒合的檢測間隔,默認爲600s #3.4.2版本纔有
gluster volume set arch-img performance.write-behind-window-size 256MB #默認是1M 能提升寫性能單個文件後寫緩衝區的大小默認1M


參考資料:

http://www.gluster.com/products/gluster-file-system-architecture-white-paper/

http://www.gluster.com/products/performance-in-a-gluster-system-white-paper/

http://gluster.com/community/documentation/index.php/Main_Page

http://blog.csdn.net/liuaigui/

相關文章
相關標籤/搜索