1. 程式人生 > 實用技巧 >分散式儲存系統-GlusterFs概述

分散式儲存系統-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解析。

轉載於:https://blog.51cto.com/zhuzhiwei/2138698