GFS分散式檔案系統部署解析
文章目錄
前言
GlusterFS作為一個開源的分散式檔案系統,不同於之前的服務系統,gfs具有模組化, 擴充套件性和高效能等優點,瞭解並掌握該項技術,有利於技術能力的全面發展與提升。
一 GlusterFS概述
1.1 GlusterFS簡介
開源的分散式檔案系統
由儲存伺服器,客戶端(預設GFS掛載服務,RDMA協議)以及NFS/Samba(使用前需開啟對應協議)儲存閘道器組成
無後設資料伺服器(無資料元屬性資訊)
1.2 GlusterFS特點
擴充套件性和高效能
高可用性
全域性統一名稱空間
彈性卷管理
基於標準協議
1.3 GlusterFS術語
Brick(儲存塊)(磚):指可信主機池中由主機提供的用於物理儲存的專用分割槽(磁碟分割槽),是GlusterFS中的基本儲存單元,同時也是可信儲存池中伺服器上對外提供的儲存目錄。
Volume(邏輯卷):一個邏輯卷是一組Brick的集合。卷是資料儲存的邏輯裝置,類似於LVM中的邏輯卷。大部分Gluster管理操作是在捲上進行的
FUSE(Filesystem inUserspace):是一個核心模組,允許使用者建立自己的檔案系統,無須修改核心程式碼。
VFS:核心空間對使用者空間提供的訪問磁碟的介面。(客戶機訪問伺服器的入口介面)
Glusterd(後臺管理程式):在儲存群集中每個節點上都要執行。
1.4 模組化堆疊式架構
模組化,堆疊式的架構
通過對模組的組合,實現複雜的功能
二 GlusterFS工作原理
2.1 GlusterFS工作流程:
1.客戶端或應用程式通過GlusterFS的掛載點(VFS)訪問資料
2.linux系統核心通過VFS API收到請求並處理
3.VFS將資料遞交給FUSE核心檔案系統,fuse檔案系統則是將資料通過/dev/fuse裝置檔案遞交給了GlusterFS client(客戶機)
4.GlusterFS client收到資料後,client根據配置檔案的配置對資料進行處理
5.通過網路將資料傳遞至遠端的GlusterFS server(伺服器),並且將資料寫入到伺服器的儲存裝置上。
2.2 彈性HASH演算法
1.通過HASH演算法得到一個32位的整數
2.劃分為N個連續的子空間,每個空間對應一個Brick
3.彈性HASH演算法的優點:
保證資料平均分佈在每一個Brick中
解決了對後設資料伺服器的依賴,進而解決了單點故障以及訪問瓶頸
四個Brick節點的GlusterFS卷,平均分配2的32次方的區間的範圍空間
訪問檔案時,通過計算該檔案的HASH值(key值),從而對應到Brick儲存空間
2.3 GlusterFS的卷型別
分散式卷
條帶卷
複製卷
分散式條帶卷
分散式複製卷
條帶複製卷
分散式條帶複製卷
2.3.1 分散式卷
2.3.1.1 分散式卷(異地儲存)
沒有對檔案進行分塊處理
通過擴充套件檔案屬性儲存HASH值
支援的底層檔案系統有EXT2,EXT4,ZFS,XFS等
沒有分塊處理,檔案只能存在一個server中,效率不提升
2.3.1.2 分散式卷的特點
檔案分佈在不同的伺服器不具備冗餘性(備份)
更容易和廉價地擴充套件卷的大小
單點故障會造成資料丟失
依賴底層的資料保護(需要進行額外的資料備份)
2.3.1.3 建立分散式卷
建立一個名為dis-volume(卷名稱,自定義)的分散式卷,檔案將根據HASH分佈在server1:/dir1、server2:/dir2和server3:/dir3中
#gluster volume create dis-volume server1:/dir1 server2:/dir2 server3:/dir3
server1:/dir1:主機名:/掛載點
2.3.2 條帶卷
2.3.2.1 條帶卷
根據偏移量將檔案分成N塊(N個條帶節點),輪詢的儲存在每個Brick Server節點
儲存大檔案時,效能尤為突出
不具備冗餘性,類似Raid0
從多個server中同時讀取檔案,效率提升
2.3.2.2 特點
資料被分割成更小塊分佈到塊伺服器群中的不同條帶區
分佈減少了負載且更小的檔案加速了存取的速度
沒有資料冗餘
2.3.2.3 建立條帶卷
建立了一個名為Stripe-volume的條帶卷,檔案將被分塊輪詢的儲存在Server1:/dir1和Server2:/dir2兩個Brick中
# gluster volume create stripe-volume stripe 2 transport tcp server1:/dir1 server2:/dir2 磁碟數 協議
2.3.3 複製卷
2.3.3.1 複製卷(類似Raid1)
同一檔案儲存一份或多分副本
因為要儲存副本,所以磁碟利用率較低
若多個節點上的儲存空間不一致,將按照木桶效應取最低節點的容量作為該卷的總容量
2.3.3.2 特點
卷中所有的伺服器均儲存一個完整的副本
卷的副本數量可由客戶建立的時候決定
至少有兩個塊伺服器或更多伺服器
具備冗餘性
2.3.3.3 建立複製卷
建立名為rep-volume的複製卷,檔案將同時儲存兩個副本,分別
在Server1 :/dir1和Server2:/dir2兩個Brick中
# gluster volume create rep-volume replica 2transport tcp server1:/dir1 server2:/dir2
2.3.4 分散式條帶卷
2.3.4.1 分散式條帶卷(先條帶,後分布)
兼顧分散式卷和條帶卷的功能
主要用於大檔案訪問處理
至少最少需要4臺伺服器
2.3.4.2 建立分散式條帶卷
建立了名為dis-stripe的分散式條帶卷,配置分散式的條帶卷時,卷中Brick所包含的儲存伺服器數必須是條帶數的倍數(>=2倍)
# gluster volume create dis-stripe stripe 2 transport tcp server1:/dir1server2:/dir2 server3:/dir3 serve:4:/dir4
2.3.5 分散式複製卷
2.3.5.1 分散式複製卷
兼顧分散式卷和複製卷的功能
用於需要冗餘的情況
2.3.5.2 建立分散式複製卷
建立名為dis-rep的分散式條帶卷,配置分散式複製卷時,卷中Brick所包含的儲存伺服器數必須是複製卷數的倍數(>=2)
# gluster volume create dis-rep replica 2 transport tcp server1:/dir1 server2:/dir2 server3:/dir3 server4:/dir4
2.3.6 總結:
分散式:儲存brick不在一個區域範圍,某一個區域內brick壞了,不影響另一個區域的brick。
條帶式:多個brick形成一個整體,這個整體內的任意一塊brick壞了,整個條帶卷不可用。
複製卷:多個brick形成一個整體,這個整體內的每塊brick都有完整的副本,由此,複製卷內任意一塊brick壞了,不影響複製卷使用。
三 GlusterFS部署
3.1 群集環境
卷型別
卷名稱 卷型別 空間大小 Brick
dis-volume 分散式卷 12G node1(/e6)、node2(/e6)
stripe-volume 條帶卷 10G node1(/d5)、node2(/d5)
rep-volume 複製卷 5G node3(/d5)、node4(/d5)
dis-stripe 分散式條帶卷 12G node1(/b3)、node2(/b3)
node3(/b3)、node4(/b3)
dis-rep 分散式複製卷 8G node1(/c4)、node2(/c4)
node3(/c4)、node4(/c4)
3.2 部署準備
重新命名:
[root@server1 ~]# hostnamectl set-hostname node1
[root@server1 ~]# bash
[root@server2 ~]# hostnamectl set-hostname node2
[root@server2 ~]# bash
[root@client1 ~]# hostnamectl set-hostname node3
[root@client1 ~]# bash
[root@server1 ~]# hostnamectl set-hostname node4
[root@server1 ~]# bash
[root@localhost ~]# hostnamectl set-hostname client
[root@localhost ~]# bash
裝置:
node1:20.0.0.10
node2:20.0.0.11
node3:20.0.0.12
node4:20.0.0.13
client:20.0.0.14
3.3 部署流程:
在node1上
[root@node1 ~]# vi /etc/hosts 對映
新增
20.0.0.10 node1
20.0.0.11 node2
20.0.0.12 node3
20.0.0.13 node4
[root@node1 ~]# ssh-keygen -t rsa 免密登入
[root@node1 ~]# ssh-copy-id 20.0.0.11
[root@node1 ~]# ssh-copy-id 20.0.0.12
[root@node1 ~]# ssh-copy-id 20.0.0.13
[root@node1 ~]# ssh-copy-id 20.0.0.14
1.拷貝檔案
[root@node1 ~]# scp /etc/hosts root@20.0.0.11:/etc/
[root@node1 ~]# scp /etc/hosts root@20.0.0.12:/etc/
[root@node1 ~]# scp /etc/hosts root@20.0.0.13:/etc/
[root@node1 ~]# scp /etc/hosts root@20.0.0.14:/etc/
2.關閉防火牆
面向所有裝置
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# systemctl disable firewalld
[root@node1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@node1 ~]# grep -v "#" /etc/selinux/config
3.新增gfsrepo軟體包
[root@node1 ~]# cd /etc/yum.repos.d/
[root@node1 yum.repos.d]# vi gfs.repo 建立yum源
[root@node1 yum.repos.d]# cd
新增
[gfs]
name=gfs
baseurl=file:///root/gfsrepo
gpgcheck=0 無驗證
enabled=1 立即啟用
[root@node1 ~]# yum clean all 清除快取
[root@node1 ~]# yum makecache 建立快取
4.在四個節點裝置上安裝軟體
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
glusterfs :軟體
glusterfs-server: 服務
glusterfs-fuse :檔案系統
glusterfs-rdma :rdma協議
[root@node1 ~]# systemctl start glusterd.service 重啟服務
[root@node1 ~]# systemctl enable glusterd.service 自啟動服務
[root@node1 ~]# systemctl status glusterd.service 服務狀態
5.時間同步
[root@node1 ~]# vi /etc/resolv.conf
新增
nameserver 8.8.8.8
[root@node1 ~]# ntpdate ntp1.aliyun.com 與阿里雲時間伺服器同步
[root@node1 ~]# crontab -e 任務計劃
新增
*/30 * * * * /usr/sbin/ntpdate ntp1.ailyun.com
每30分鐘
分鐘 小時 日期 月 星期
[root@node1 ~]# which ntpdate 檢視
6.選擇一個節點作為信任池中的信任端
選擇node1
在node1上
[root@node1 ~]# gluster peer probe node2
[root@node1 ~]# gluster peer probe node3
[root@node1 ~]# gluster peer probe node4
[root@node1 ~]# gluster peer status 檢視信任關係
7.在四個節點裝置上新增四個5G大小的硬碟
後重啟
面向所有裝置
在node1上
[root@node1 ~]# fdisk -l 檢視磁碟資訊
8.格式化
[root@node1 ~]# mkfs.ext4 /dev/sdb
9.建立掛載點
[root@node1 ~]# mkdir {/b1,/c1,/d1,/e1}
[root@node1 ~]# fdisk -l
10.掛載
[root@node1 ~]# mount /dev/sdb /b1
[root@node1 ~]# mount /dev/sdc /c1
[root@node1 ~]# mount /dev/sdd /d1
[root@node1 ~]# mount /dev/sde /e1
[root@node1 ~]# df -Th 檢視掛載情況
[root@node1 ~]# systemctl start glusterfsd.service 服務啟動
[root@node1 ~]# systemctl status glusterfsd.service 檢視狀態
3.3.1 開始建立卷
1.建立分散式卷
在node1上
[root@node1 ~]# gluster volume create dis-vol node1:/b1 node2:/b1 force
dis-vol :卷名稱
node1:/b1:主機名:/掛載點
[root@node1 ~]# gluster volume info dis-vol 檢視卷的詳細資訊
[root@node1 ~]# gluster volume start dis-vol 啟動開啟卷
[root@node1 ~]# gluster volume status dis-vol 檢視卷狀態
2.建立條帶卷
[root@node1 ~]# gluster volume create stripe-vol stripe 2 node1:/c1 node2:/c1 force
stripe 2:條帶使用數量2
[root@node1 ~]# gluster volume info stripe-vol 檢視卷的詳細資訊
[root@node1 ~]# gluster volume start stripe-vol 啟動開啟卷
[root@node1 ~]# gluster volume status stripe-vol 檢視卷狀態
3.建立複製卷
[root@node1 ~]# gluster volume create rep-vol replica 2 node3:/b1 node4:/b1 force
[root@node1 ~]# gluster volume info rep-vol
[root@node1 ~]# gluster volume start rep-vol
[root@node1 ~]# gluster volume status rep-vol
4.建立分散式條帶卷
[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/d1 node2:/d1 node3:/d1 node4:/d1 force
[root@node1 ~]# gluster volume info dis-stripe
[root@node1 ~]# gluster volume start dis-stripe
[root@node1 ~]# gluster volume status dis-stripe
5.建立分散式複製卷
[root@node1 ~]# gluster volume create dis-replica replica 2 node1:/e1 node2:/e1 node3:/e1 node4:/e1 force
[root@node1 ~]# gluster volume info dis-replica
[root@node1 ~]# gluster volume start dis-replica
[root@node1 ~]# gluster volume status dis-replica
[root@node1 ~]# gluster volume list 檢視建立的卷列表
在客戶機上
安裝
[root@client ~]# yum -y install glusterfs glusterfs-fuse
gfs命令程式 檔案系統
建立掛載點
進行掛載
[root@client ~]# mkdir {/dis,/stripe,/replica,/dis-stripe,/dis-replica}
[root@client ~]# mount.glusterfs node1:dis-vol /dis
[root@client ~]# mount.glusterfs node1:rep-vol /replica
[root@client ~]# mount.glusterfs node1:stripe-vol /stripe
[root@client ~]# mount.glusterfs node1:dis-stripe /dis-stripe
[root@client ~]# mount.glusterfs node1:dis-replica /dis-replica
[root@client ~]# df -Th 檢視掛載情況
3.3.2 進行測試
在客戶機上
檔案複製
[root@client ~]# dd if=/dev/zero of=/demo1.log bs=40M count=1(檔案大小40M)
[root@client ~]# dd if=/dev/zero of=/demo2.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo3.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo4.log bs=40M count=1
[root@client ~]# dd if=/dev/zero of=/demo5.log bs=40M count=1
[root@client ~]# ls -lh
[root@client ~]# cd /
[root@client /]# ls -lh 檢視檔案
複製檔案到不同的捲上
[root@client /]# cp demo* /dis
[root@client /]# cp demo* /dis-replica/
[root@client /]# cp demo* /dis-stripe/
[root@client /]# cp demo* /stripe/
[root@client /]# cp demo* /replica/
[root@client /]# cd
1.檢視分散式捲上檔案
發現檔案有5個
因為分散式卷有node1:/b1,node2:/b1
[root@client ~]# cd /dis
[root@client dis]# ls -lh
所以檢視兩個分割槽中檔案情況
在node1上
檔案4個
[root@node1 ~]# cd /b1
[root@node1 b1]# ls -lh
在node2上
只有一個檔案
[root@node2 ~]# cd /b1
[root@node2 b1]# ls -lh
在客戶機上
2.檢視條帶卷
在node1:/c1,node2:/c1
[root@client dis]# cd /stripe/
[root@client stripe]# ls -lh
在node1上
發現所有檔案都有,但檔案大小隻有一半
[root@node1 ~]# cd /c1
[root@node1 c1]# ls -lh
在node2上
顯示與node1一樣
[root@node2 ~]# cd /c1
[root@node2 c1]# ls -lh
在客戶機上
3.檢視複製卷
在node3:/b1,node4:/b1
[root@client stripe]# cd /replica/
[root@client replica]# ls -lh
在node3上
發現所有檔案都有,且檔案大小一樣
[root@node3 ~]# cd /b1
[root@node3 b1]# ls -lh
在node4上
顯示與node3一樣
[root@node4 ~]# cd /b1
[root@node4 b1]# ls -lh
在客戶機上
4.檢視分散式條帶卷
在node1:/d1,node2:/d1,node3:/d1,node4:/d1
[root@client replica]# cd /dis-stripe/
[root@client dis-stripe]# ls -lh
[root@node1 c1]# cd /d1
[root@node1 d1]# ls -lh
在node1上
在node2上
檔案存在1,2,3,4,但大小隻有一半
在node3上
在node4上
檔案存在5,大小一半
在客戶機上
5.檢視分散式複製卷
在node1:/e1,node2:/e1,node3:/e1,node4:/e1
[root@client dis-stripe]# cd /dis-replica/
[root@client dis-replica]# ls -lh
[root@node1 d1]# cd /e1
[root@node1 e1]# ls -lh
在node1上
在node2上
檔案存在1,2,3,4,且大小與原始檔一樣
在node3上
在node4上
檔案存在5,且大小與原始檔一樣
3.3.3 進行破壞測試
關閉node2
檢視情況
在客戶機上
檢視分散式,只有四個檔案,在node2上的5檔案消失
[root@client ~]# cd /dis
[root@client dis]# ls -lh
檢視條帶卷,無資料
[root@client dis]# cd /stripe/
[root@client stripe]# ls -lh
檢視複製卷,無影響,有備份
[root@client stripe]# cd /replica/
[root@client replica]# ls -lh
檢視分散式條帶卷,node1,2上的1,2,3,4檔案消失只有5檔案
[root@client replica]# cd /dis-stripe/
[root@client dis-stripe]# ls -lh
檢視分散式複製卷,無影響,全有備份
[root@client dis-replica]# ls -lh
3.3.4 刪除卷
先停止,後刪除
在node1上
[root@node1 ~]# gluster volume list 檢視卷列表
[root@node1 ~]# gluster volume stop dis-vol 停止分散式卷
[root@node1 ~]# gluster volume status dis-vol 檢視狀態
[root@node1 ~]# gluster volume delete dis-vol 刪除卷
在客戶機上
檢視,發現分散式卷消失
[root@client ~]# df -Th
3.3.5 訪問控制
拒絕某個使用者訪問某個卷
在node1上
[root@node1 ~]# gluster volume list 檢視卷列表
[root@node1 ~]# gluster volume set rep-vol auth.reject 20.0.0.14
拒絕客戶機訪問複製卷
在客戶機上檢視
複製卷消失
[root@client ~]# df -Th
[root@client ~]# tail -f /var/log/glusterfs/replica.log 檢視日誌
總結
通過以上對gfs工作原理與實際部署操作,可以較為全面,實際的瞭解掌握該項技術能力。
相關文章
- Google分散式檔案系統GFS論文學習Go分散式
- 分散式系統(二)——GFS分散式
- 部署GPS分散式檔案系統分散式
- 分散式檔案系統之FastDFS安裝部署分散式AST
- 分散式檔案系統分散式
- 分散式檔案系統-HDFS分散式
- HDFS分散式檔案系統分散式
- cephFS分散式檔案系統操作分散式
- FastDFS-分散式檔案系統AST分散式
- 分散式檔案系統之 FastDFS分散式AST
- 分散式檔案系統(HDFS)與 linux系統檔案系統 對比分散式Linux
- AspNetCore分散式檔案上傳系統NetCore分散式
- GFS分散式檔案系統、結合實驗分析各種儲存卷的特點。深入刨析分散式儲存的方式。分散式
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- Hadoop 系列(一)—— 分散式檔案系統 HDFSHadoop分散式
- 大資料 | 分散式檔案系統 HDFS大資料分散式
- 【分散式-6.824】Lecture3-GFS分散式
- Linux系統中常見的分散式檔案系統推薦!Linux分散式
- FASTDFS開源分散式檔案系統介紹AST分散式
- Hadoop學習(一)——HDFS分散式檔案系統Hadoop分散式
- Hadoop基礎(一):分散式檔案系統HDFSHadoop分散式
- 分散式檔案系統之MogileFS的安裝使用分散式
- 分散式檔案系統fastdfs_搭建和基本使用分散式AST
- 隨行付微服務之分散式檔案系統微服務分散式
- 分散式檔案系統fastdfs安裝以及python呼叫分散式ASTPython
- 短影片直播系統為什麼需要分散式部署,淺談分散式部署分散式
- HDFS架構指南(分散式系統Hadoop的檔案系統架構)架構分散式Hadoop
- 分散式檔案系統如何做?終於有個人把分散式檔案上傳講清楚了分散式
- 最簡單的分散式檔案系統 go-fastdfs分散式GoAST
- 必須掌握的分散式檔案儲存系統—HDFS分散式
- Hadoop分散式檔案系統(HDFS)會不會被淘汰?Hadoop分散式
- Hadoop HDFS分散式檔案系統 常用命令彙總Hadoop分散式
- 分散式檔案儲存系統 fastdfs 的 Composer 包釋出!分散式AST
- Hadoop 三劍客之 —— 分散式檔案儲存系統 HDFSHadoop分散式
- 星環科技分散式檔案系統TDFS大揭祕(上)分散式
- 常見開源分散式檔案系統架構對比分散式架構
- 解析分散式系統的快取設計分散式快取
- 【檔案系統】嵌入式檔案系統Fatfs簡介