1. 程式人生 > 其它 >Linux--GFS分散式檔案系統

Linux--GFS分散式檔案系統

GFS分散式檔案系統群集

一、GlusterFS概述

1. GlusterFS簡介

GlusterFS是一個開源的分散式檔案系統。
它由儲存伺服器、客戶端以及NFS/Samba儲存閘道器(可選,根據需要選擇使用)組成。
系統中無元資料伺服器元件,這有助於提升整個系統的效能、可靠性和穩定性。

2. 與傳統分散式檔案系統(如MFS)的區別


傳統的分散式檔案系統大多通過元伺服器來儲存元資料,元資料包含儲存節點上的目錄資訊、目錄結構等。這樣的設計在瀏覽目錄時效率高,但是也存在一些缺陷,例如單點故障。一旦元資料伺服器出現故障,即使節點具備再高的冗餘性,整個儲存系統也將崩潰。
而GlusterFS分散式檔案系統是基於無元伺服器的設計,資料橫向擴充套件能力強,具備較高的可靠性即儲存效率。
GlusterFS同時也是Scale-Out(橫向擴充套件)儲存解決方案Gluster的核心,在儲存資料方面具有強大的橫向擴充套件能力,通過擴充套件能夠支援數PB儲存容量和處理數千客戶端。
GlusterFS支援藉助TCP/IP或InfiniBandRDMA網路(一種支援多併發連結的技術,具有高頻寬、低時延、高擴充套件性的特點)將物理分散分佈的儲存資源匯聚在一起,統一提供儲存服務,並使用統一全域性名稱空間來管理資料。

3. GlusterFS的特點

3.1 擴充套件性和高效能

Gluster利用雙重特性來提供高容量儲存解決方案。
(1)Scale-Out架構允許通過簡單地增加儲存節點的方式來提高儲存容量和效能(磁碟、計算和I/O資源都可以獨立增加),支援10GbE和InfiniBand等高速網路互聯。
(2)Gluster彈性雜湊(ElasticHash)解決了GlusterFS對元資料伺服器的依賴,改善了單點故障和效能瓶頸,真正實現了並行化資料訪問。GlusterFS採用彈性雜湊演算法在儲存池中可以智慧地定位任意資料分片(將資料分片儲存在不同節點上),不需要檢視索引或者向元資料伺服器查詢。

3.2 高可用性

GlusterFS可以對檔案進行自動複製,如映象或多次複製,從而確保總是可以訪問,甚至是在硬體故障的情況下也能正常訪問。
當資料出現不一致時,自我修復功能能夠把資料恢復到正確的狀態,資料的修復是以增量的方式在後臺執行,幾乎不會產生效能負載。
GlusterFS可以支援所有的儲存,因為它沒有設計自己的私有資料檔案格式,而是採用作業系統中主流標準的磁碟檔案系統(如EXT3、XFS等)來儲存檔案,因此資料可以使用傳統訪問磁碟的方式被訪問。

3.3 全域性統一名稱空間

分散式儲存中,將所有節點的名稱空間整合為統一名稱空間,將整個系統的所有節點的儲存容量組成一個大的虛擬儲存池,供前端主機訪問這些節點完成資料讀寫操作。

3.4 彈性卷管理

GlusterFS通過將資料儲存在邏輯卷在中,邏輯卷從邏輯儲存池進行獨立邏輯劃分而得到。
邏輯儲存池可以線上進行增加和移除,不會導致業務中斷。邏輯卷可以根據需求線上增長和縮減,並可以在多個節點中實現負載均衡。
檔案系統配置也可以實時線上進行更改並應用,從而可以適應工作負載條件變化或線上效能調優。

3.5 基於標準協議

Gluster儲存服務支援NFS、CIFS、HTTP、FTP、SMB及Gluster原生協議,完全與POSIX標準(可移植作業系統弄介面)相容。現有應用程式不需要做任何修改就可以 對Gluster中的資料進行訪問,也可以使用能夠專用API進行訪問。

4. GlusterFS術語

4.1 Brick(儲存塊)

指可信主機池中由主機提供的用於物理儲存的專用分割槽,是GlusterFS中的基本儲存單元,同時也是可信儲存池中伺服器上對外提供的儲存目錄。
儲存目錄的格式由伺服器的絕對路徑構成,表示方法為SERVER:EXPORT,如192.168.1.1:/data/mydir/。

4.2 Volume(邏輯卷)

一個邏輯卷是一組Brick的集合。卷是資料儲存的邏輯裝置,類似於LVM中的邏輯卷。大部分Gluster管理操作是在捲上進行的。

4.3 FUSE

是一個核心模組,允許使用者建立自己的檔案系統,無需修改核心程式碼。

4.4 VFS

核心空間對使用者空間提供的訪問磁碟的介面。

4.5 Glusterd(後臺管理程序)

在儲存叢集中的每個節點上都要執行。

5. 模組化堆疊式架構


通過對模組進行各種組合,即可實現複雜的功能。例如:Replicate模組可實現RAID 1,Stripe模組可實現RAID 0,通過兩者的組合可實現RAID 10和RAID 01,同時獲得更高的效能及可靠性。

6. Gluster的工作流程


(1)客戶端或應用程式通過GlusterFS的掛載點訪問資料。
(2)Linux系統核心通過VFS API收到請求並處理。
(3)VFS將資料遞交給FUSE核心檔案系統,並向系統註冊一個實際的檔案系統FUSE,而FUSE檔案系統則是將資料通過/dev/fuse裝置檔案遞交給了GlusterFS Client端。(可以將FUSE檔案系統理解為一個代理)
(4)GlusterFS Client收到資料後,Client根據配置檔案的配置對資料進行處理。
(5)經過GlusterFS Client處理後,通過網路將資料傳遞至遠端的GlusterFS Server,並且將資料寫入到伺服器儲存裝置上。

7. 彈性Hash演算法

7.1 彈性Hash演算法的概念

彈性HASH演算法是Davies-meyer演算法的具體實現,通過Hash演算法可以得到一個32位的整數範圍的Hash值,假設邏輯卷中有N個儲存單位Brick,則32位的整數範圍將劃分為N個連續的子空間,每個空間對應一個Brick。
當用戶或應用程式訪問某一個名稱空間時,同對該名稱空間計算Hash值,根據該Hash值所對應的的32位整數空間定位資料所在的Brick。

7.2 彈性Hash演算法的優點

保證資料平均分佈在每一個Brick中。
解決了對元資料伺服器的依賴,進而解決了單點故障以及訪問瓶頸。

8. GlusterFS的卷型別

GlusterFS支援七種卷,即分佈卷、條帶卷、複製卷、分散式條帶卷、分散式複製卷、條帶複製卷和分散式條帶複製卷。

8.1 分散式卷(Distribute volume)

8.1.1 分散式卷概述

檔案通過Hash演算法分佈到所有Brick Server上,這種卷是ClusterFS的預設卷,以檔案為單位分局Hash演算法雜湊到不同的Brick,其實只是擴大了磁碟空間,如果有一塊磁碟損壞,資料也將丟失,屬於檔案級的RAID 0,不具有容錯能力。
在該模式下,並沒有對檔案進行分塊處理,檔案直接儲存在某個Server節點上。由於直接使用本地檔案系統進行檔案儲存,所以存取效率並沒有提高,反而會因為網路通訊的原因而有所降低。
總結:
● 沒有對檔案進行分塊處理
● 通過擴充套件檔案屬性儲存Hash值
● 支援的底層檔案系統有EXT3、EXT4、ZFS、XFS等

8.1.2 示例原理


File1和File2存放在Server1,而File3存放在Server2,檔案都是司機儲存,一個檔案(如File1)要麼在Server1上,要麼在Server2上,不能分塊同時存放在Server1和Server2上。

8.1.3 分散式卷的特點

分散式卷具有如下特點:
● 檔案分佈在不同的伺服器,不具備冗餘性
● 更容易和廉價地擴展卷的大小
● 單點故障會造成資料丟失
● 依賴底層的資料保護

8.1.4 建立方法

建立一個名為dis-volume的分散式卷,檔案將根據Hash分佈在server1:/dir1、server2:/dir2和Server3:/dir3中
gluster volume create dis-volume server1:/dir1 server2:/dir2 derver3:/dir3

8.2 條帶卷(Stripe volume)

8.2.1 條帶卷概述

類似RAID 0,檔案被分成資料塊並以輪詢的方式分佈到多個Brick Server上,檔案儲存以資料塊為單位,支援大檔案儲存,檔案越大,讀取效率越高,但是不具備冗餘性。

8.2.2 示例原理


File被分割為6段,1/3/5放在Server1上,2/4/6放在Server2上、

8.2.3 條帶卷特點

● 資料被分割成更小塊分佈到塊伺服器叢集中的不同條帶區
● 分佈減少了負載且更小的檔案加速了存取的速度
● 沒有資料冗餘

8.2.4 建立方法

建立一個名為stripe-volume的條帶卷,檔案將被分塊輪詢的儲存在Server1:/dir1和Server2:/dir2兩個Brick中
gluster volume create stripe 2 transport tcp server1:/dir1 server2:/dir2

8.3 複製卷(Replica volume)

8.3.1 複製卷概述

將檔案同步到多個Brick上,使其具備多個檔案副本,屬於檔案級RAID 1,具有容錯能力。因為資料分散在多個Brick中,所以讀效能得到很大提升,但寫效能下降。
複製卷具備冗餘性,即使一個節點損壞,也不影響資料的正常使用。但因為要儲存副本,所以磁碟利用率較低。

8.3.2 示例原理


File1同時存在Server1和Server2中,File2也是如此,相當於Server2中的檔案時Server1中檔案的副本。

8.3.3 複製卷特點

● 卷中所有的伺服器均儲存一個完整的副本
● 卷的副本數量可由客戶建立的時候決定,但複製數必須等於卷中Brick所包含的儲存伺服器數
● 至少由兩個塊伺服器或更多伺服器
● 具備冗餘性

8.3.4 建立方法

建立名為rep-volume的複製卷,檔案將同時儲存兩個副本,分別在Server1:/dir1和Server2:/dir2兩個Brick中
gluster volume create rep-volume replica 2 transport tcp server1:/dir1 server2:/dir2

8.4 分散式條帶卷(Distribute Stripe volume)

8.4.1 分散式條帶卷概述

Brick Server數量是條帶數(資料塊分佈的Brick數量)的倍數,兼具分散式卷和條帶卷的特點。
主要用於大檔案訪問處理,建立一個分散式條帶卷最少需要4臺伺服器。

8.4.2 示例原理


File1和File2通過分散式卷的功能分別定為到Server1和Server2.在Server1中,File1被分割成4段,其中1、3在Server1中的exp1目錄中,2、4在Server2中的exp2目錄中。在Server2中File2也被分割成4段,其中1、3在Server2中的exp3目錄中,2、4在Server2中的exp4目錄中。

8.4.3 建立方法

建立一個名為dis-stripe的分散式條帶卷,配置分散式的條帶卷時,卷中Brick所包含的儲存伺服器必須是條帶數的倍數(>+2倍)。Brick的數量是4(Server1:/dir1、Server2:/dir2、Server3:/dir3、Server4:/dir4),條帶數為2(stripe 2)
gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
注:建立卷時,儲存伺服器的數量如果等於條帶或複製數,那麼建立的是條帶卷或者複製卷;如果儲存伺服器的數量是條帶或複製數的2倍甚至更多,那麼將建立的是分散式條帶卷或分散式複製卷。

8.5 分散式複製卷(Distribute Replica volume)

8.5.1 分散式複製卷概述

Brick Server數量是映象數(資料副本數量)的倍數,兼具分散式卷和複製卷的特點。
主要用於需要冗餘的情況下。

8.5.2 示例原理


File1和File2通過分散式卷的功能分別定為到Server1和Server2。在存放File1時,File1根據複製卷的特性,將存在兩個相同的副本,分別是Server1中的exp1目錄和Server2中的exp2目錄。在存放File2時,File2根據複製卷的特性,也將存在兩個相同的副本,分別是Server3中的exp3目錄和Server4中的exp4目錄。

8.5.3 建立方法

建立一個名為dis-rep的分散式複製卷,配置分散式的複製卷時,卷中Brick所包含的儲存伺服器數必須是複製數的倍數(>=2倍)。Brick的數量是4(Server1:/dir1、Server2:/dir2、Server3:/dir3、Server4:/dir4),複製數為2(replica 2)
gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4

8.6 條帶複製卷(Stripe Replica volume)

類似RAID 10,同時具有條帶卷和複製卷的特點。

8.7 分散式條帶複製卷(Distribute Stripe Replica volume)

三種基本卷的複合卷,通常用於類Map Reduce應用。

單位換算

1位元組=8位

1B=1位元組

1KB=1024B

1MB=1024KB

1GB=1024MB

1TB=1024GB

1PB=1024TB

因為centos7GFS不支援條帶卷,但是支援分散式卷和複製卷。所以我們只能建立分散式卷和複製卷以及分佈複製卷

服務節點分配

伺服器節點

ip地址

主機名

磁碟部署

對應掛載點

Node1節點

192.168.10.4

node1

/dev/sdb1

/dev/sdc1

/data/sdb1

/data/sdc1

Node2節點

192.168.10.5

node2

/dev/sdb1

/dev/sdc1

/data/sdb1

/data/sdc1

客戶端節點

192.168.10.6

client

-

-

在所有節點編寫yum源,即gfs源

以下是官方源

執行下面命令指向網際網路倉庫

使用網際網路倉庫和官方源

伺服器環境,在所有node節點上操作

新增硬碟

編寫指令碼,磁碟分割槽並掛載

執行指令碼,已掛載

編寫/etc/hosts檔案

安裝並啟動GFS,在所有node節點上操作

新增節點到儲存信任池

檢視gfs叢集狀態

卷名稱

卷型別

Brick

dis-volume

分散式卷

node1(/data/sdb1)、node2(/data/sdb1)

rep-volume

複製卷

node1(/data/sdc1)、node2(/data/sdc1)

建立分散式卷

檢視資訊

檢視卷列表,啟動卷,再次檢視卷資訊

建立複製卷

檢視卷列表

啟動卷並檢視狀態

部署GFS客戶端

建立需要將磁碟掛載的目錄

配置/etc/hosts檔案

掛載GFS檔案系統

臨時掛載

永久掛載

測試GFS檔案系統

在複製卷目錄下建立檔案

寫一些東西

看大小,雖然檔案是216位元組,但總用量是512位元組

在node1和node2分別檢視,各有一個a,說明覆製成功

在分佈卷建立檔案a

在node1和node2檢視,因為只有一個檔案,所以node2沒有

再次建一個檔案

因為node1在執行,所以node2還是沒有

把b刪除

node1也跟著刪除

測試node2是否正常工作

將node1掛起

GFS客戶端連線不到node1,所以a也暫時沒啦

在新建一個g

因為node1掛起,所以node2接替工作

之前複製的a還在

也能正常編輯

將node1恢復

GFS客戶端和node1連線上了,a回來了

這時,a和g都呆在自己的家裡

僅允許192.168.10.0和192.168.20.0網段訪問dis-volume卷僅拒絕是auth.reject

下面是GFS常用命令

1.啟動/關閉/檢視glusterd服務

/etc/init.d/glusterd start

/etc/init.d/glusterd stop

/etc/init.d/glusterd status

2.開機自動啟動glusterd服務

chkconfig glusterd on Red Hat

update-rc.d glusterd defaults Debian

echo "glusterd" >>/etc/rc.local Others

3.檢視配置資訊

cat /etc/rc.local

4.為儲存池新增/移除伺服器節點

在其中一個節點上操作即可:

gluster peer probe <SERVER>

gluster peer detach <SERVER>

注意,移除節點時,需要提前將該節點上的Brick移除。

檢視所有節點的基本狀態(顯示的時候不包括本節點):

gluster peer status

5.掛載分割槽

mount -t ext4 /dev/sdd1 /mnt/brick1

6.建立/啟動/停止/刪除卷

gluster volume create <NEW-VOLNAME>[stripe <COUNT> | replica <COUNT>] [transport [tcp | rdma | tcp,rdma]] <NEW-BRICK1> <NEW-BRICK2> <NEW-BRICK3> <NEW-BRICK4>...

gluster volume start <VOLNAME>

gluster volume stop <VOLNAME>

gluster volume delete <VOLNAME>

注意,刪除卷的前提是先停止卷。

7.客戶端以glusterfs方式掛載

mount -t glusterfs <SERVER>:/<VOLNAME><MOUNTDIR>

對於OpenStack,計算和控制節點都要掛載/var/lib/nova/instances,控制節點還要掛載/var/lib/glance/images。

8.檢視卷資訊

列出叢集中的所有卷:

gluster volume list

檢視叢集中的卷資訊:

gluster volume info [all]

檢視叢集中的卷狀態:

gluster volume status [all]

gluster volume status <VOLNAME> [detail| clients | mem | inode | fd]

檢視本節點的檔案系統資訊:

df -h [<MOUNT-PATH>]

檢視本節點的磁碟資訊:

fdisk -l

9.配置卷

gluster volume set <VOLNAME> <OPTION> <PARAMETER>

10.擴展卷

gluster volume add-brick <VOLNAME> <NEW-BRICK>

注意,如果是複製卷或者條帶卷,則每次新增的Brick數必須是replica或者stripe的整數倍。

11.收縮卷

先將資料遷移到其它可用的Brick,遷移結束後才將該Brick移除:

gluster volume remove-brick <VOLNAME> <BRICK> start

在執行了start之後,可以使用status命令檢視移除進度:

gluster volume remove-brick <VOLNAME> <BRICK> status

不進行資料遷移,直接刪除該Brick:

gluster volume remove-brick <VOLNAME> <BRICK> commit

注意,如果是複製卷或者條帶卷,則每次移除的Brick數必須是replica或者stripe的整數倍。

12.遷移卷

使用start命令開始進行遷移:

gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> start

在資料遷移過程中,可以使用pause命令暫停遷移:

gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> pause

在資料遷移過程中,可以使用abort命令終止遷移:

gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> abort

在資料遷移過程中,可以使用status命令檢視遷移進度:

gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> status

在資料遷移結束後,執行commit命令來進行Brick替換:

gluster volume replace-brick <VOLNAME> <BRICK> <NEW-BRICK> commit

13.重新均衡卷

不遷移資料:

gluster volume rebalance <VOLNAME> lay-outstart

gluster volume rebalance <VOLNAME> start

gluster volume rebalance <VOLNAME> startforce

gluster volume rebalance <VOLNAME> status

gluster volume rebalance <VOLNAME> stop

14.系統擴充套件維護

開啟/關閉系統配額:

gluster volume quota <VOLNAME> enable | disable

設定目錄配額:

gluster volume quota <VOLNAME> limit-usage <DIR> <VALUE>

檢視配額:

gluster volume quota <VOLNAME> list [<DIR>]

地域複製(geo-replication):

gluster volume geo-replication <MASTER> <SLAVE> start | status | stop

IO資訊檢視:

gluster volume profile <VOLNAME> start | info | stop

Top監控:

Top命令允許你檢視Brick的效能,例如:read,write, file open calls, file read calls, file write calls, directory opencalls, and directory real calls。所有的檢視都可以設定 top數,預設100。

檢視開啟的 fd:

gluster volume top <VOLNAME> open[brick <BRICK>] [list-cnt <COUNT>]

其中,open可以替換為read, write, opendir, readdir等。

檢視每個 Brick 的讀效能:

gluster volume top <VOLNAME> read-perf [bs <BLOCK-SIZE> count <COUNT>] [brick <BRICK>] [list-cnt <COUNT>]

其中,read-perf可以替換為write-perf等。