2)Bricks
• Brick是一個節點和一個導出目錄的集合,e.g. node1:/brick1
• Brick是底層的RAID或磁盤經XFS或ext4文件系統格式化而來,所以繼承了文件系統的限制
• 每個節點上的brick數是不限的
• 理想的狀況是,一個集群的所有Brick大小都一樣
3)Volumes
• Volume是brick的邏輯組合
• 創建時命名來識別
• Volume是一個可掛載的目錄
• 每個節點上的brick數是不變的,e.g.mount –t glusterfs www.std.com:test /mnt/gls
• 一個節點上的不同brick可以屬於不同的卷
• 支持如下種類:
a) 分布式卷
b) 條帶卷
c) 復制卷
d) 分布式復制卷
e) 條帶復制卷
f) 分布式條帶復制卷
3.1)分布式卷
• 文件分布存在不同的brick里
• 目錄在每個brick里都可見
• 單個brick失效會帶來數據丟失
• 無需額外元數據服務器
3.2)復制卷
• 同步復制所有的目錄和文件
• 節點故障時保持數據高可用
• 事務性操作,保持一致性
• 有changelog
• 副本數任意定
3.3)分布式復制卷
• 最常見的一種模式
• 讀操作可以做到負載均衡
3.4)條帶卷
• 文件切分成一個個的chunk,存放於不同的brick上
• 只建議在非常大的文件時使用(比硬盤大小還大)
• Brick故障會導致數據丟失,建議和復制卷同時使用
• Chunks are files with holes – this helps in maintaining offset consistency.
GlusterFS無元數據設計
好處是極大的提高了擴展性,同時也提高了系統的性能和可靠性;另一顯著的特點是如果給定確定的文件名,查找文件位置會非常快。但是如果要列出文件或者目錄,性能會大幅下降,因為列出文件或者目錄時,需要查詢所在節點並對各節點中的信息進行聚合。此時有元數據服務的分布式文件系統的查詢效率反而會提高許多
當客戶端訪問GlusterFS存儲時,首先程序通過訪問掛載點的形式讀寫數據,對於用戶和程序而言,集群文件系統是透明的,用戶和程序根本感覺不到文件系統是本地還是在遠程服務器上。讀寫操作將會被交給VFS(Virtual File System)來處理,VFS會將請求交給FUSE內核模塊,而FUSE又會通過設備/dev/fuse將數據交給GlusterFS Client。最后經過GlusterFS Client的計算,並最終經過網絡將請求或數據發送到GlusterFS Server上。
現網配置文件路徑
https://blog.csdn.net/sondx/article/details/24322565
http://wesleydeng.iteye.com/blog/1734875#_Toc325012577
glusterFS是基於客戶端的只讀緩存,其粗粒度的一致性,是基於失效時間過期的緩存更新操作
glusterFS關於緩存的配置信息則保存在客戶端的卷中
glusterFS緩存兩部分:元數據和數據
什么是元數據?描述文件屬性但又不是文件直接的部分,例如創建時間\修改時間\文件大小\文件存放的位置
對元數據的緩存
文件創建時會緩存元數據Inode的信息,當對該文件進行操作,可從元數據的緩存中直接獲取文件的Inode,找不到再向下層查詢所需的元數據信息
對數據的緩存
一般來說,文件系統的緩存指數據的緩存
glusterFS將一個文件以128k大小分成若干個區域,每個區域等同與緩存頁的大小(最后一個可能例外),對文件的讀取操作變成了對各區域的先后讀取.
對於每個要讀取的緩存區域則可能分成三種情況:
請求區域在緩存中,並且緩存是最新的,直接從緩存頁面讀取數據
請求區域不在緩存中,發送缺頁中斷,從遠端磁盤緩存頁面讀取數據,並在緩存頁面中更新數據
缺頁中斷已經產生,等待響應
glusterFS緩存的種類和特點
元數據緩存 數據緩存
生效的操作 所有操作 讀操作
保存時間 創建文件時 讀取文件時
保存方式 將元數據與轉換 將文件分成若干區域保存
為唯一值與之對應 每個區域保存在一個頁面中
客戶端上是有卷的配置信息文件的,運行這glusterfs進程(可以不運行,如果不想用gluster的原生協議)
server端:glusterfsd進程負責處理來自其他組建的數據服務請求
###################################
一 gluster是什么?
hdfs的適合流式數據的存儲,不兼容posix
gluster適合隨機讀,集群式NAS存儲系統
目標代替lustre和商業產品GPFS
二 gluster基本原理
Infiniband延時非常低,一般是微秒級的,一般用於高性能雲計算
全局統一命名空間:通過分布式文件系統將物理分散的存儲資源虛擬化成統一的存儲池
擴展屬性是要用get命令看的,ls只能看到inode的屬性
彈性Hash算法
每個brick會被分配一段hash范圍
輸入文件名(不包括路徑),Davies-Meyer算法計算32位hash值
根據hash值在集群中選擇子卷,進行文件定位
client對所選擇的子卷進行訪問
生產環境一定要用復制卷
hash值的計算實在client端進行的,hash只是定位brick(磁盤),並不定位文件
哈希+復制卷:node做hash,brick做復制
小文件(幾k)不要用條帶卷,條帶卷最少分片是128k
glusterFS訪問接口
RMMA:遠程訪問raid,就是上面說的Infiniband
VFS只有框架,實際干活還是地下的文件系統(ext4\xfs等等)
fuse與每個節點都有直接通道,兩者直接交換
NFS訪問的話,我沒台服務器上都有nfs服務,就比fuse(千兆網絡即可)多一個環節,因為數據不一定在你掛載的IP上,還需要通過該節點幫你去找,這種一般要求萬兆網絡.
數據自修復self-heal
觸發自修復情形:第一次進入這個目錄;每次訪問文件;brick離開又回來之后
巡檢也有可能觸發修復(看你的巡檢命令 )
它的自修復是同步修復
新增節點之后,不要急着rebalance,因為數據均衡會產生很大的流量,影響業務性能,選擇業務比較空閑的時機再做rebalance
三 主流分布式文件系統對比
HDFS fASEdfs tfs這些適合上傳下載操,創建獲取更新刪除等場景
如果是write\seek等隨機讀寫,用GlusterFS\mooseFS(小於100個節點)\Lustre比較好
glusterfs的應用場景
半結構化數據:用habse mongodb mraidb去存,這種數據適合以列數和行數存儲
glusterfs適合非結構化存儲,鏡像,文件
內容雲:比如,網盤
gluster可以替代Hadoop來存儲數據
gluster分布式文件系統測試
冒煙測試
數據一致性:寫進去的和讀出來的是一致的
大文件都是順序讀寫,小文件以隨機讀寫為主
元數據操作又稱目錄操作又(ops,operation per second),大文件可不需要太關注該性能指標
IOPS:隨機小文件I/O讀寫能力
帶寬:大文件連續讀寫能力
iowait達到30%-40%往往表明你的io負載很重了
Linux客戶端測試工具
DD
Iozone:針對大文件
Postmark:針對ops
FIO:針對磁盤,IOPS
四 gluster安裝與配置
gluster volume help
增刪brick之后要做rebalance,但是要把握時間點
umount掛載點-->stop卷-->刪除卷
五、
卷參數設置
IP訪問限制,除了設置allow以外還要設置reject
系統默認會起一個nfs進程(自帶)ps -ef | grep nfs,把它關閉gluster volume set testvol nfs.disable on
gluster volume info查看nfs已關閉
gluster volume info 卷名 #單獨看一個卷的信息
六、性能測試
網絡性能
server1端:iperf -s 啟動
client(server2)端: iperf -c server1 啟動
iperf -c server1 -P 4 多個進程,提高壓力
卷性能測試
卷狀態
gluster volume status #卷相關的進程的狀態,Y/N
卷信息
gluster volume info
集群狀態和卷掛載
讀寫測試dd
of=/dev/null 為讀
測帶寬
帶寬測試
iozone help 支持集群測試(配得比較復雜)
常用 iozone -r 1m -s 128m -t 4 -i 0 -i 1
-r :每次讀寫的塊的大小
-s:測試的文件大小
-t:線程數
-i:0是順序寫 1是順序讀,2是隨機讀寫 3 4 5 6
測帶寬
IOPS
運行 fio fio.conf #numjobs是進程數 size是文件大小
一個普通的SATA盤,7200轉的,大概80左右的IOPS,如果是比較好的SAS或者光纖盤,可能在150左右的IOPS,ssd就可以達到幾萬幾十萬幾百萬。vmware里面的虛擬磁盤都是虛高的
fio可以測帶寬,也可以測IOPS
運行 postmark postmark.conf #number寫的文件個數,size是每個文件的大小,location是掛載點
subdirectories掛載點下有多少個目錄 run運行的時間s 配置文件這種方式運行要加show字段
結果會在當前目錄生成一個文件
postmark主要測試元數據操作的速度,即OPS,比如創建文件刪除文件
系統監控
atop 2: 兩秒中更新一次
iostat
配置信息
/var/lib/gluster
日志
mnt.log掛載日志
nfs.log nfs日志
glustershd.log 自修復日志
cli.log 命令行工具的日志
glusterd.log glusterd進程的日志
brick/brick-***.log brick的日志
rpc-transport報錯,可以不管,如果沒有使用rdma(infiband)
典型故障處理
把刪掉的文件恢復
再另外一台服務器上cat/ls那個文件,或者find命令
另一個brick中壞掉
獲取擴展屬性(brick沒損壞的服務器上執行) getfattr -d -m . -e hex b1/
2U/4U存儲服務器和JBOD適合構建brick
協議:原生協議最好,但是不是每個系統版本都能裝
infiband設置巨幀性能會提高
#######################################
使用ctdb,如果一台服務器掛了,另外一台服務器會把虛擬地址接手過來
