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等。