分布式文件系統glusterfs(二)
1、GlusterFS簡述
分布式文件系統(Distributed File System)是指文件系統管理的物理存儲資源並不直接與本地節點相連,而是分布於計算網絡中的一個或者多個節點的計算機上。目前意義上的分布式文件系統大多都是由多個節點計算機構成,結構上是典型的客戶機/服務器模式。流行的模式是當客戶機需要存儲數據時,服務器指引其將數據分散的存儲到多個存儲節點上,以提供更快的速度,更大的容量及更好的冗余特性。GlusterFS系統是一個可擴展的網絡文件系統,相比其他分布式文件系統,GlusterFS具有高擴展性、高可用性、高性能、可橫向擴展等特點,並且其沒有元數據服務器的設計,讓整個服務沒有單點故障的隱患。
術語:
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的邏輯集合
a、無元數據設計
元數據是用來描述一個文件或給定區塊在分布式文件系統中所在的位置,簡而言之就是某個文件或某個區塊存儲的位置。傳統分布式文件系統大都會設置元數據服務器或者功能相近的管理服務器,主要作用就是用來管理文件與數據區塊之間的存儲位置關系。相較其他分布式文件系統而言,GlusterFS並沒有集中或者分布式的元數據的概念,取而代之的是彈性哈希算法。集群中的任何服務器和客戶端都可以利用哈希算法、路徑及文件名進行計算,就可以對數據進行定位,並執行讀寫訪問操作。
這種設計帶來的好處是極大的提高了擴展性,同時也提高了系統的性能和可靠性;另一顯著的特點是如果給定確定的文件名,查找文件位置會非常快。但是如果要列出文件或者目錄,性能會大幅下降,因為列出文件或者目錄時,需要查詢所在節點並對各節點中的信息進行聚合。此時有元數據服務的分布式文件系統的查詢效率反而會提高許多。
b、服務器間的部署
在之前的版本中服務器間的關系是對等的,也就是說每個節點服務器都掌握了集群的配置信息,這樣做的好處是每個節點度擁有節點的配置信息,高度自治,所有信息都可以在本地查詢。每個節點的信息更新都會向其他節點通告,保證節點間信息的一致性。但如果集群規模較大,節點眾多時,信息同步的效率就會下降,節點信息的非一致性概率就會大大提高。因此GlusterFS未來的版本有向集中式管理變化的趨勢。
2、訪問流程
Glusterfs基於內核的fuse模塊,fuse模塊除了創建fuse文件系統外,還提供了一個字符設備(/dev/fuse),通過這個字符設備,Glusterfs可以讀取請求,並發送響應,並且可以發送notify消息。
下面是在Glusterfs下的一個讀/寫請求的完整流程:
過程說明:
藍實線表示一個請求通過系統調用到VFS,然後經由Fuse封裝為一個req並發送到等待隊列,然後喚醒在該等待隊列上阻塞的Glusterfs讀進程,讀取請求
綠虛線表示Glusterfsd進程讀取請求後,處理請求的過程
紅虛線表示Glusterfs處理完請求後,封裝響應消息並將消息發送到/dev/fuse下,並喚醒相應的請求進程(請求進程在將請求發送後,一直阻塞,直到該請求收到響應並處理完成)。
請求進程被喚醒後,將Glusterfs封裝的響應信息返回給用戶。
為方便說明問題,下圖是一個讀請求走到Fuse的完整流程:
下面是上面這些步驟的說明:
①read系統調用,陷入到內核
②vfs通過fd及當前進程維護的打開的文件表找到fd對應的file,然後調用該file被賦值的read函數進行讀操作
③因為該file是基於fuse文件系統創建的,因此調用fuse的read函數do_sync_read
④-1.最終調用do_generic_file_read基於讀操作的偏移量及該文件的緩存樹查找該對應的緩存頁,該緩存頁存在且是最新的,直接從該緩存中讀數據給用戶
④-2.如果該緩存頁不存在,則申請一個頁作為緩存。並調用readpage去讀數據。fuse的readpage會封裝一個請求到字符設備的等待隊列中。收到glusterfs的響應後會將響應寫到緩存中並返回
常用卷類型
分布(distributed)
復制(replicate)
條帶(striped)
基本卷:
(1) distribute volume:分布式卷
(2) stripe volume:條帶卷
(3) replica volume:復制卷
復合卷:
(4) distribute stripe volume:分布式條帶卷
(5) distribute replica volume:分布式復制卷
(6) stripe replica volume:條帶復制卷
(7) distribute stripe replicavolume:分布式條帶復制卷
3、實驗環境及規劃:
操作系統 | IP地址 | 主機名 | 硬盤數量(3塊) | 角色 |
CentOS7.2 | 192.168.0.51 | node01 | sdb:10G sdc:10G sdd:10G | 存儲節點 |
CentOS7.2 | 192.168.0.52 | node02 | sdb:10G sdc:10G sdd:10G | 存儲節點 |
CentOS7.2 | 192.168.0.53 | node03 | sdb:10G sdc:10G sdd:10G | 存儲節點 |
CentOS7.2 | 192.168.0.54 | node04 | sdb:10G sdc:10G sdd:10G | 存儲節點 |
CentOS7.2 | 192.168.0.55 | node05 | sdb:10G sdc:10G sdd:10G | 存儲節點 |
CentOS7.2 | 192.168.0.56 | node06 | sdb:10G sdc:10G sdd:10G | 存儲節點 |
CentOS7.2 | 192.168.0.57 | node07 | sda:100G | 客戶端 |
3.1關閉防火墻:
systemctl stop firewalld
systemctl disable firewalld
3.2關閉selinux
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
3.3同步時間
yum install chrony -y
systemctl enable chronyd.service
systemctl start chronyd.service
分布式文件系統glusterfs(二)