GlusterFS:開源的分散式檔案系統
擴充套件性和高效能
GlusterFS利用雙重特性來提供高容量儲存解決方案。
- Scale-Out架構允許通過簡單地增加儲存節點的方式來提高儲存容量和效能(磁碟、計算和I/O資源都可以獨立增加),支援10GbE和 InfiniBand等高速網路互聯。
- Gluster彈性雜湊(ElasticHash)解決了GlusterFS對後設資料伺服器的依賴,改善了單點故障和效能瓶頸,真正實現了並行化資料存取。GlusterFS採用彈性雜湊演演算法在儲存池中可以智慧地定位任意資料分片(將資料分片儲存在不同節點上),不需要檢視索引或者向後設資料伺服器查詢。
高可用性
GlusterFS可以對檔案進行自動複製,如映象或多次複製,從而確保資料總是可以存取,甚至是在硬體故障的情況下也能正常存取。
當資料出現不一致時,自我修復功能能夠把資料恢復到正確的狀態,資料的修復是以增量的方式在後臺執行,幾乎不會產生效能負載。
GlusterFS可以支援所有的儲存,因為它沒有設計自己的私有資料檔案格式,而是採用作業系統中主流標準的磁碟檔案系統(如EXT3、XFS等)來儲存檔案,因此資料可以使用傳統存取磁碟的方式被存取。
全域性統一名稱空間
分散式儲存中,將所有節點的名稱空間整合為統一名稱空間,將整個系統的所有節點的儲存容量組成一個大的虛擬儲存池,供前端主機存取這些節點完成資料讀寫操作。
彈性卷管理
GlusterFS通過將資料儲存在邏輯卷中,邏輯卷從邏輯儲存池進行獨立邏輯劃分而得到。
邏輯儲存池可以線上進行增加和移除,不會導致業務中斷。邏輯卷可以根據需求線上增長和縮減,並可以在多個節點中實現負載均衡。
檔案系統設定也可以實時線上進行更改並應用,從而可以適應工作負載條件變化或線上效能調優。
基於標準協定
Gluster 儲存服務支援 NFS、CIFS、HTTP、FTP、SMB 及 Gluster原生協定,完全與 POSIX 標準相容。
現有應用程式不需要做任何修改就可以對Gluster 中的資料進行存取,也可以使用專用 API 進行存取
使用彈性HASH演演算法
為了解決分散式檔案資料索引、定位的複雜程度,而使用彈性HASH演演算法來解決資料定位、索引、定址的功能
先通過HASH演演算法對資料可以得到一個值:
分散式卷(預設)
檔案通過HASH演演算法分佈到所有Brick Server上,這種卷是GFS的基礎;檔案沒有被分片,直接根據HASH演演算法雜湊到不同的Brick,其實只是擴大了磁碟空間,並不具備容錯能力,屬於檔案級RAID 0
分散式卷的特點:
條帶卷(預設)
類似RAID 0,檔案被分成資料庫並以輪詢的方式分佈到多個Brick Server上,檔案儲存以資料塊為單位,支援大檔案儲存,檔案越大,讀取效率越高
條帶卷特點:
複製卷(Replica volume)
將檔案同步到多個Brick上,使其具備多個檔案副本,屬於檔案級RAID 1,具有容錯能力。因為資料分散在多個Brick中,所以讀效能得到很大提升,但寫效能下降
複製卷特點:
分散式條帶卷(Distribute Stripe volume)
Brick Server數量是條帶數(資料塊分佈的Brick數量)的倍數
兼具分散式卷和條帶的特點
分散式複製卷(Distribute Replica volume)
Brick Server數量是映象數(資料副本 數量)的倍數
兼具分散式卷和複製卷的特點
條帶複製卷(Stripe Replca volume)
類似RAID 10,同時具有條帶卷和複製卷的特點
分散式條帶複製卷(Distribute Stripe Replicavolume)
三種基本卷的複合卷通常用於類Map Reduce應用
Node1節點:node1/192.168.153.10 磁碟:/dev/sdb1 掛載點:/data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node2節點:node2/192.168.153.20 磁碟:/dev/sdb1 掛載點:/data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node3節點:node3/192.168.153.30 磁碟:/dev/sdb1 掛載點:/data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
Node4節點:node4/192.168.153.40 磁碟:/dev/sdb1 掛載點:/data/sdb1
/dev/sdc1 /data/sdc1
/dev/sdd1 /data/sdd1
/dev/sde1 /data/sde1
使用者端節點:192.168.153.50
每個節點先建立四塊新硬碟
①關閉防火牆及安全機制
systemctl stop firewalld
setenforce 0
②設定/etc/hosts檔案
echo "192.168.153.10 node1" >> /etc/hosts
echo "192.168.153.20 node2" >> /etc/hosts
echo "192.168.153.30 node3" >> /etc/hosts
echo "192.168.153.40 node4" >> /etc/hosts
③建立磁碟分割區並掛載
為節約時間,採用指令碼來進行磁碟分割區和掛載
vim /opt/fdisk.sh
#!/bin/bash
NEWDEV=`ls /dev/sd* | grep -o 'sd[b-z]' | uniq`
for VAR in $NEWDEV
do
echo -e "n\np\n\n\n\nw\n" | fdisk /dev/$VAR &> /dev/null
mkfs.xfs /dev/${VAR}"1" &> /dev/null
mkdir -p /data/${VAR}"1" &> /dev/null
echo "/dev/${VAR}"1" /data/${VAR}"1" xfs defaults 0 0" >> /etc/fstab
done
mount -a &> /dev/null
. /opt.fdisk.sh #執行指令碼
cd /opt #拉入軟體包
unzip gfsrepo.zip
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
#只要在一臺Node節點上新增其它節點即可
gluster peer probe node1
gluster peer probe node2
gluster peer probe node3
gluster peer probe node4
gluster peer status #在每個Node節點上檢視群集狀態
卷名稱 | 卷型別 | Brick |
---|---|---|
dis-volume | 分散式卷 | node1(/data/sdb1)、node2(/data/sdb1) |
stripe-volume | 條帶卷 | node1(/data/sdc1)、node2(/data/sdc1) |
rep-volume | 複製卷 | node3(/data/sdb1)、node4(/data/sdb1) |
dis-stripe | 分散式條帶卷 | node1(/data/sdd1)、node2(/data/sdd1)、node3(/data/sdd1)、node4(/data/sdd1) |
dis-rep | 分散式複製卷 | node1(/data/sde1)、node2(/data/sde1)、node3(/data/sde1)、node4(/data/sde1) |
#建立分散式卷,沒有指定型別,預設建立的是分散式卷
gluster volume create dis-volume node1:/data/sdb1 node2:/data/sdb1 force
gluster volume list #檢視卷列表
gluster volume start dis-volume #啟動新建分散式卷
gluster volume info dis-volume #檢視建立分散式卷資訊
#指定型別為 stripe,數值為 2,且後面跟了 2 個 Brick Server,所以建立的是條帶卷
gluster volume create stripe-volume stripe 2 node1:/data/sdc1 node2:/data/sdc1 force
gluster volume start stripe-volume
gluster volume info stripe-volume
#指定型別為 replica,數值為 2,且後面跟了 2 個 Brick Server,所以建立的是複製卷
gluster volume create rep-volume replica 2 node3:/data/sdb1 node4:/data/sdb1 force
gluster volume start rep-volume
gluster volume info rep-volume
#指定型別為 stripe,數值為 2,而且後面跟了 4 個 Brick Server,是 2 的兩倍,所以建立的是分散式條帶卷
gluster volume create dis-stripe stripe 2 node1:/data/sdd1 node2:/data/sdd1 node3:/data/sdd1 node4:/data/sdd1 force
gluster volume start dis-stripe
gluster volume info dis-stripe
指定型別為 replica,數值為 2,而且後面跟了 4 個 Brick Server,是 2 的兩倍,所以建立的是分散式複製卷
gluster volume create dis-rep replica 2 node1:/data/sde1 node2:/data/sde1 node3:/data/sde1 node4:/data/sde1 force
gluster volume start dis-rep
gluster volume info dis-rep
gluster volume list
cd /opt #拉入軟體包
unzip gfsrepo.zip
cd /etc/yum.repos.d/
mkdir repo.bak
mv *.repo repo.bak
vim glfs.repo
[glfs]
name=glfs
baseurl=file:///opt/gfsrepo
gpgcheck=0
enabled=1
yum clean all && yum makecache
yum -y install glusterfs glusterfs-fuse
echo "192.168.153.10 node1" >> /etc/hosts
echo "192.168.153.20 node2" >> /etc/hosts
echo "192.168.153.30 node3" >> /etc/hosts
echo "192.168.153.40 node4" >> /etc/hosts
mkdir -p /test/{dis,stripe,rep,dis_stripe,dis_rep}
ls /test
臨時掛載
mount.glusterfs node1:dis-volume /test/dis
mount.glusterfs node1:stripe-volume /test/stripe
mount.glusterfs node1:rep-volume /test/rep
mount.glusterfs node1:dis-stripe /test/dis_stripe
mount.glusterfs node1:dis-rep /test/dis_rep
df -Th
永久掛載
vim /etc/fstab
node1:dis-volume /test/dis glusterfs defaults,_netdev 0 0
node1:stripe-volume /test/stripe glusterfs defaults,_netdev 0 0
node1:rep-volume /test/rep glusterfs defaults,_netdev 0 0
node1:dis-stripe /test/dis_stripe glusterfs defaults,_netdev 0 0
node1:dis-rep /test/dis_rep glusterfs defaults,_netdev 0 0
cd /opt
dd if=/dev/zero of=/opt/TEST1.log bs=1M count=40
dd if=/dev/zero of=/opt/TEST2.log bs=1M count=40
dd if=/dev/zero of=/opt/TEST3.log bs=1M count=40
dd if=/dev/zero of=/opt/TEST4.log bs=1M count=40
dd if=/dev/zero of=/opt/TEST5.log bs=1M count=40
ls -lh
cp TEST* /test/dis
cp TEST* /test/stripe/
cp TEST* /test/rep/
cp TEST* /test/dis_stripe/
cp TEST* /test/dis_rep/
檢視卷對應的磁碟分割區中的檔案資料,驗證結果
node1:/dev/sdb1
node2:/dev/sdb1
結論:分散式只會將demo檔案分開儲存(5個檔案不在同一磁碟分割區上),不會將資料分片和備份
node1:/dev/sdc1
node1:/dev/sdc1
結論:帶卷會將每個demo檔案中的資料分片儲存(兩個分割區各有20M的檔案),沒有備份
node3:/dev/sdb1
node4:/dev/sdb1
結論:複製卷會將每個檔案放入卷中的磁碟分割區中(兩分割區的檔案一樣)
node1:/dev/sdd1
node2:/dev/sdd1
node3:/dev/sdd1
node4:/dev/sdd1
結論:分散式條帶卷中,帶有分散式和條帶卷的特點,即將資料分片,又將檔案分開儲存,沒有備份
node1:/dev/sde1
node2:/dev/sde1
node3:/dev/sde1
node4:/dev/sde1
結論:分散式複製卷中,帶有分散式和複製卷的特點,即將檔案分開儲存,又複製一遍檔案(備份)
通過掛起 node2 節點伺服器或者關閉glusterd服務來模擬故障
結論:檔案中沒有資料,說明資料全部丟失,所以條帶卷不具備冗餘
結論:資料檢視,缺少四個檔案,而這四個檔案是儲存在node2上的,所以分散式卷不具備冗餘
儲存在node1和node2上的TEST3不見了(資料是分片儲存的),所以分散式條帶卷不具備冗餘
結論:檔案和資料都在,所以分散式複製卷具有冗餘
掛起node3和node4中任意一個節點進行測試
結論:檔案和資料都在,所以複製卷具有冗餘
1.檢視GlusterFS卷
gluster volume list
2.檢視所有卷的資訊
gluster volume info
3.檢視所有卷的狀態
gluster volume status
4.停止一個卷
gluster volume stop dis-stripe
5.刪除一個卷,注意:刪除卷時,需要先停止卷,且信任池中不能有主機處於宕機狀態,否則刪除不成功
gluster volume delete dis-stripe
6.設定卷的存取控制
#僅拒絕
gluster volume set dis-rep auth.allow 192.168.153.100
#僅允許
gluster volume set dis-rep auth.allow 192.168.153.* #設定192.168.153.0網段的所有IP地址都能存取dis-rep卷(分散式複製卷)
分散式卷:相當於RAID0,不具備容錯能力,若有一塊磁碟損壞,則會造成資料丟失
條帶卷:類似RAID0,檔案將被分成資料塊並以輪詢方式分佈到Brick server上
複製卷:將檔案同步到多個Brick上,相當於檔案級RAID1,資料分數在多個Brick中
分散式條帶卷:兼具分散式卷和條帶卷的特定
分散式複製卷:兼具分散式卷和複製卷的特點
條帶複製卷:類似RAID10,同時具有條帶卷和複製卷的特點
分散式條帶複製卷:三種基本卷特性的結合