分佈式存儲系統-GlusterFs概述

第1章 GlusterFS分佈式文件系統使用介紹

1.1 Glusterfs概述

GlusterFS是Scale-Out存儲解決方案Gluster的核心,它是一個開源的分佈式文件系統,具有強大的橫向擴展能力,通過擴展能夠支持數PB存儲容量和處理數千客戶端。GlusterFS藉助TCP/IP或InfiniBand RDMA網絡將物理分佈的存儲資源聚集在一起,使用單一全局命名空間來管理數據。GlusterFS基於可堆疊的用戶空間設計,可爲各種不同的數據負載提供優異的性能。

GlusterFS支持運行在任何標準IP網絡上標準應用程序的標準客戶端,如圖2所示,用戶可以在全局統一的命名空間中使用NFS/CIFS等標準協議來訪問應用數據。GlusterFS使得用戶可擺脫原有的獨立、高成本的封閉存儲系統,能夠利用普通廉價的存儲設備來部署可集中管理、橫向擴展、虛擬化的存儲池,存儲容量可擴展至TB/PB級。GlusterFS主要特徵如下:


1.1.1 擴展性和高性能

GlusterFS利用雙重特性來提供幾TB至數PB的高擴展存儲解決方案。Scale-Out架構允許通過簡單地增加資源來提高存儲容量和性能,磁盤、計算和I/O資源都可以獨立增加,支持10GbE和InfiniBand等高速網絡互聯。Gluster彈性哈希(Elastic Hash)解除了GlusterFS對元數據服務器的需求,消除了單點故障和性能瓶頸,真正實現了並行化數據訪問。


1.1.2 高可用性

GlusterFS可以對文件進行自動複製,如鏡像或多次複製,從而確保數據總是可以訪問,甚至是在硬件故障的情況下也能正常訪問。自我修復功能能夠把數據恢復到正確的狀態,而且修復是以增量的方式在後臺執行,幾乎不會產生性能負載。GlusterFS沒有設計自己的私有數據文件格式,而是採用操作系統中主流標準的磁盤文件系統(如EXT3、ZFS)來存儲文件,因此數據可以使用各種標準工具進行復制和訪問。


1.1.3 全局統一命名空間

全局統一命名空間將磁盤和內存資源聚集成一個單一的虛擬存儲池,對上層用戶和應用屏蔽了底層的物理硬件。存儲資源可以根據需要在虛擬存儲池中進行彈性擴展,比如擴容或收縮。當存儲虛擬機映像時,存儲的虛擬映像文件沒有數量限制,成千虛擬機均通過單一掛載點進行數據共享。虛擬機I/O可在命名空間內的所有服務器上自動進行負載均衡,消除了SAN環境中經常發生的訪問熱點和性能瓶頸問題。


1.1.4 彈性哈希算法

GlusterFS採用彈性哈希算法在存儲池中定位數據,而不是採用集中式或分佈式元數據服務器索引。在其他的Scale-Out存儲系統中,元數據服務器通常會導致I/O性能瓶頸和單點故障問題。GlusterFS中,所有在Scale-Out存儲配置中的存儲系統都可以智能地定位任意數據分片,不需要查看索引或者向其他服務器查詢。這種設計機制完全並行化了數據訪問,實現了真正的線性性能擴展。


1.1.5 彈性卷管理

數據儲存在邏輯卷中,邏輯卷可以從虛擬化的物理存儲池進行獨立邏輯劃分而得到。存儲服務器可以在線進行增加和移除,不會導致應用中斷。邏輯卷可以在所有配置服務器中增長和縮減,可以在不同服務器遷移進行容量均衡,或者增加和移除系統,這些操作都可在線進行。文件系統配置更改也可以實時在線進行並應用,從而可以適應工作負載條件變化或在線性能調優。


1.1.6 基於標準協議

Gluster存儲服務支持NFS, CIFS, HTTP, FTP以及Gluster原生協議,完全與POSIX標準兼容。現有應用程序不需要作任何修改或使用專用API,就可以對Gluster中的數據進行訪問。這在公有云環境中部署Gluster時非常有用,Gluster對雲服務提供商專用API進行抽象,然後提供標準POSIX接口。


1.1.7 術語介紹

Brick:GFS中的存儲單元,通過是一個受信存儲池中的服務器的一個導出目錄。可以通過主機名和目錄名來標識,如'SERVER:EXPORT'

Client: 掛載了GFS卷的設備

Extended Attributes:xattr是一個文件系統的特性,其支持用戶或程序關聯文件/目錄和元數據。

FUSE:Filesystem Userspace是一個可加載的內核模塊,其支持非特權用戶創建自己的文件系統而不需要修改內核代碼。通過在用戶空間運行文件系統的代碼通過FUSE代碼與內核進行橋接。

Geo-Replication

GFID:GFS卷中的每個文件或目錄都有一個唯一的128位的數據相關聯,其用於模擬inode

Namespace:每個Gluster卷都導出單個ns作爲POSIX的掛載點

Node:一個擁有若干brick的設備

RDMA:遠程直接內存訪問,支持不通過雙方的OS進行直接內存訪問。

RRDNS:round robin DNS是一種通過DNS輪轉返回不同的設備以進行負載均衡的方法

Self-heal:用於後臺運行檢測複本卷中文件和目錄的不一致性並解決這些不一致。

Split-brain:腦裂

Translator:

Volfile:glusterfs進程的配置文件,通常位於/var/lib/glusterd/vols/volname

Volume:一組bricks的邏輯集合


1.1.18 Glusterfs架構組成

image


1.2 GlusterFS技術特點

1.2.1 完全軟件實現(Software Only)

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


1.2.2 完整的存儲操作系統棧(Complete Storage Operating System Stack)

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


1.2.3 用戶空間實現(User Space)

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


1.2.4 模塊化堆棧式架構(Modular Stackable Architecture)

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

image


1.2.5 原始數據格式存儲(Data Stored in Native Formats)

GlusterFS以原始數據格式(如EXT3、EXT4、XFS、ZFS)儲存數據,並實現多種數據自動修復機制。因此,系統極具彈性,即使離線情形下文件也可以通過其他標準工具進行訪問。如果用戶需要從GlusterFS中遷移數據,不需要作任何修改仍然可以完全使用這些數據。

1.2.6 無元數據服務設計(No Metadata with the Elastic Hash Algorithm)

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

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


1.3 Glusterfs安裝部署

1.3.1 實驗環境

系統版本:Linux CentOS release 6.9 (Final)

系統內核:2.6.32-696.23.1.el6.x86_64

Glusterfs軟件版本:3.10.12

Node1:192.168.1.111

Node2:192.168.1.112


1.3.2 服務端部署

yum -y install centos-release-gluster310 #安裝glusterfs yum源

yum install -y libgssglue libtirpc rpcbind lvm2-develyum list glusterfs libaio  #安裝依賴關係

yum install -y atop fio iperf #安裝測試工具

yum install -y glusterfs-libs glusterfs glusterfs-api glusterfs-cli glusterfs-client-xlators glusterfs-fuse glusterfs-server #安裝glusterfs服務端軟件

mkfs.ext4 /dev/sdb #格式化文件系統

mount /dev/sdb /storage/brick1/ 掛載文件系統

mount #查看

vim /etc/fstab #設置開機自動掛載

/dev/sdb /storage/brick1 exit4 defaults 0 0

service glusterd start #啓動gluster服務

chkconfig glusterd on #gluster服務開機自啓動

gluster peer probe node2 #將主機加入到集羣

gluster peer status #查看節點狀態

=====================================================

創建分佈式哈希卷:

gluster volume create testol node2:/storage/brick1/b1 #創建 一個卷 testol 到/storage/brick1/b1 這個目錄下

gluster volume start testol #啓動testol這個卷

gluster volume rebalance testol fix-layout start #哈希範圍重新分配,一般做完數據遷移或者添加新的brick做完負載後執行這條命令

=====================================================

刪除一個卷(最好先將mount掛載的客戶端卸載後在刪除):

gluster volume stop testol #先將卷停止

gluster volume delete testol #然後刪除

PS:刪除卷後,數據還在,如果覺得不需要可以將數據刪掉

====================================================

刪除一個brick

gluster volume remove-brick <VOLNAME>[replica<COUNT>]<BRICK>...

====================================================

負載均衡:(刪除brick後對其他的捲進行負載均衡)

gluster volume rebalance VOLNAME {start|stop|}[force]

====================================================

創建一個複製卷:

gluster volume create testvol replica 2 node2:/storage/brick1/b2 #創建一個複製卷


1.3.3 客戶端軟件安裝

yum install -y glusterfs-fuse glusterfs-libs glusterfs #客戶端要安裝的軟件

mount -t glusterfs node1:testvol /mnt #客戶端掛載,注意做好hosts解析。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章