GlusterFS簡介
GlusterFS 是近年興起的一個高性能開源分布式文件系統,其目標是全局命名空間、分布式前端的高性能文件系統,目前已被 RedHat 看中,GlusterFS 具有高擴展、高可性、高性能、可橫向擴展等特點,並且 GlusterFS 沒有元數據服務器的設計,使其沒有單點故障問題。
重要概念
下面是關於GlusterFS的一些重要概念:
- birck:最基本的存儲單元,表示為trusted storage pool中輸出的目錄,供客戶端掛載用。
- volume:一個卷。在邏輯上由N個bricks組成。
- metadata:元數據,用於描述文件、目錄等的信息;
- self-heal:用於后台運行檢測副本卷中文件和目錄的不一致性並解決這些不一致;
- FUSE:Unix-like OS上的可動態加載的模塊,允許用戶不用修改內核即可創建自己的文件系統。
- Gluster Server:數據存儲服務器,即組成GlusterFS存儲集群的節點;
- Gluster Client:使用GlusterFS存儲服務的服務器,如KVM、OpenStack、LB RealServer、HA node。
- POSIX: 一個標准,GlusterFS兼容。
總體架構
GlusterFS 的卷類型
為了滿足不同應用對高性能、高可用的需求,GlusterFS 支持多種卷,詳細信息可見官方文檔:https://docs.gluster.org/en/latest/Administrator-Guide/Setting-Up-Volumes/#creating-dispersed-volumes。
下面簡單介紹幾種。
distribute volume分布式卷(類似raid 0但是數據不分片)默認
基於Hash算法將文件分布到所有的brick server上,只是單純的擴大了磁盤空間,不具備冗余能力,數據丟了就丟了,由於distribute volume使用本地文件系統,因此存取效率並沒有提高,相反會應為中間又加上了一層網絡傳輸,效率反而降低了.另外本地存儲設備的容量有限制,因此支持超大型文件會有一定的難度。

Replicated Volumes 復制卷(類似Raid 1)
類似於Raid1,文件同步的復制到多個brick上,具有容錯能力,寫性能下降,讀性能提升(待測),Replicated模式,也稱作AFR(Auto File Replicated),同一個文件在多個鏡像存儲節點上保存多份,每個節點上都具有相應的目錄結構和文件。replica volume是容器存儲中較為推崇的一種。

Distributed Replicated Volumes分布式復制卷
Brick server是鏡像數的倍數,先組合分布式在組合成復制卷,也是最少需要4台服務器,這個多少組成分布和多少個副本數是自己創建的時候定義的。

GlusterFS客戶端常用命令
| 命令 | 功能 |
|---|---|
| gluster peer probe | 添加節點 |
| gluster peer detach | 移除節點 |
| gluster volume create | 創建卷 |
| gluster volume start $VOLUME_NAME | 啟動卷 |
| gluster volume stop $VOLUME_NAME | 停止卷 |
| gluster volume delete $VOlUME_NAME | 刪除卷 |
| gluster volume quota enable | 開啟卷配額 |
| gluster volume quota disable | 關閉卷配額 |
| gluster volume quota limitusage | 設定卷配額 |
搭建
本文使用復制卷作為存儲卷。如需要其他存儲卷類型,請參考官方文檔!!
環境准備
我這里准備三台Centos7服務器。
| ip | hostname | 作用 |
|---|---|---|
| 192.168.1.100 | node-100 | Server |
| 192.168.1.101 | node-101 | Server |
| 192.168.1.102 | node-102 | Client |
關閉防火牆(三台服務器都要執行):
systemctl stop firewalld
systemctl disable firewalld
設置主機名:
hostnamectl set-hostname node-100 #192.168.1.100主機執行
hostnamectl set-hostname node-101 #192.168.1.101主機執行
hostnamectl set-hostname node-102 #192.168.1.102主機執行
配置/etc/hosts:
vi /etc/hosts
#文件末尾添加如下內容
192.168.1.100 node-100
192.168.1.101 node-101
192.168.1.102 node-102
保存退出后,確保三台服務器互相ping hostname,都能ping通。

Gluster Server端搭建
node-100和node-101服務器執行:
#軟件安裝
yum -y install centos-release-gluster
yum -y install glusterfs glusterfs-server glusterfs-fuse
server端啟動gluster服務:
systemctl start glusterd
systemctl enable glusterd
systemctl enable glusterd

創建集群:
我這里在node-100上執行,把node-101添加到集群中:
gluster peer probe node-101
這里如果報錯:peer probe: failed: Probe returned with Transport endpoint is not connected
檢查防火牆有沒有關;能不能ping通hostname

如果想從集群中去除節點,可以執行如下命令,但該節點中不能存在卷中正在使用的brick。
gluster peer detach 節點名稱
查看集群狀態:
gluster peer status

創建復制卷,命令格式如下:
gluster volume create volume_name replica 2 node1:/data/br1 node2:/data/br1
- volumn_name:卷名
- node1:節點名
- replica:文件保存的份數
- /data/br1:可以理解為節點上的目錄,這個目錄最好是一個單獨的分區(分區類型最好為邏輯卷的方式,這樣易於操作系統級別的存儲空間擴展),默認不能使用root分區進行創建卷,如需要root分區創建卷添加force參數
作為示例,我這里使用/opt/brick目錄做為單獨分區的掛載目錄。
#兩台服務器執行
mkdir -p /opt/brick
創建2副本的復制卷:
gluster volume create app-data replica 2 node-100:/opt/brick node-101:/opt/brick force

列出卷:
gluster volume list

啟動這個卷:
gluster volume start app-data

查看卷信息:
gluster volume info app-data

打開GlusterFs磁盤限額,此處限制大小是10G,也可以不用設置:
gluster volume quota app-data enable
gluster volume quota app-data limit-usage / 10GB
查看這個卷的狀態:
gluster volume status

Gluster Client端搭建
Glusterfs client端有三種客戶端使用方式:Native mount,NFS,Samba
此處使用Native mount掛載gluster volume到node-100和node-101節點的本地目錄/gfs-share下:
node-102服務器執行:
yum install glusterfs glusterfs-fuse attr -y
mkdir -p /gfs-share
mount -t glusterfs node-100:app-data /gfs-share
查看掛載情況:
df -h

設置開機自動掛載:
vi /etc/fstab
#增加如下內容
node-100:/app-data /gfs-share glusterfs defaults 0 0
測試
Gluster Client端執行:
cd /gfs-share
touch file{1..9}.txt
創建了9個文件:

去服務端查看:
ll /opt/brick/

有幾點說明
- 服務端也可以將本地目錄掛載到gluster的存儲卷上。
- 不能直接對birck修改,client端不會生效
- 任意client端修改,其他client端和brick會自動修改
