參考文檔:
- Quick Start Guide:http://gluster.readthedocs.io/en/latest/Quick-Start-Guide/Quickstart/
- Install-Guide:https://docs.gluster.org/en/latest/Install-Guide/Install/
- CentOS gluster-Quickstart:https://wiki.centos.org/SpecialInterestGroup/Storage/gluster-Quickstart
- Type of Volumes:https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/#types-of-volumes
- Setting up GlusterFS Volumes:https://docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/
- 腦裂:https://docs.gluster.org/en/latest/Administrator%20Guide/Split%20brain%20and%20ways%20to%20deal%20with%20it/
一.Glusterfs框架
Glusterfs(Gluster file system)是開源的,具有強大橫向擴展能力的(scale-out),分布式的,可將來自多個服務器的存儲資源通過tcp/ip或infiniBand RDMA 網絡整合到一個統一的全局命名空間中的文件系統。
1. 框架
- GlusterFS主要由存儲服務器(Brick Server)、客戶端以及 NFS/Samba 存儲網關組成;
- 架構中無元數據服務器組件,無對於提升整個系統的性單點故障和性能瓶頸問題,可提高系統擴展性、性能、可靠性和穩定性;
- GlusterFS支持 TCP/IP 和 InfiniBand RDMA 高速網絡互聯;
- 客戶端可通過原生 GlusterFS 協議訪問數據,其他沒有運行 GlusterFS 客戶端的終端可通過 NFS/CIFS 標准協議通過存儲網關訪問數據(存儲網關提供彈性卷管理和訪問代理功能);
- 存儲服務器主要提供基本的數據存儲功能,客戶端彌補了沒有元數據服務器的問題,承擔了更多的功能,包括數據卷管理、I/O 調度、文件定位、數據緩存等功能,利用 FUSE(File system in User Space)模塊將 GlusterFS 掛載到本地文件系統之上,實現 POSIX 兼容的方式來訪問系統數據。
2. 常見術語
- Brick:GlusterFS中最基本的存儲單元,表示為受信存儲池(trusted storage pool)中輸出的目錄,供客戶端掛載用,可以通過主機名與目錄名來標識,如'SERVER:EXPORT';
- Volume:卷,邏輯上由N個brick組成;
- FUSE:Unix-like OS上的可動態加載的模塊,允許用戶不用修改內核即可創建自己的文件系統;
- Glusterd:Gluster management daemon,在trusted storage pool中所有的服務器上運行;
- Volfile:Glusterfs進程的配置文件,通常是位於/var/lib/glusterd/vols/目錄下的{volname}文件;
- Self-heal:用於后台運行檢測復本卷中文件與目錄的不一致性並解決這些不一致;
- Split-brain:腦裂;
- GFID:GlusterFS卷中的每個文件或目錄都有一個唯一的128位的數據相關聯,用於模擬inode;
- Namespace:每個Gluster卷都導出單個ns作為POSIX的掛載點。
3. 數據訪問流程
- 在客戶端,用戶通過 glusterfs的mount point讀寫數據;
- 用戶的這個操作被遞交給本地 Linux 系統的VFS 來處理;
- VFS 將數據遞交給 FUSE 內核文件系統(在啟動 glusterfs 客戶端以前,需要向系統注冊一個實際的文件系統 FUSE),該文件系統與 ext3 在同一個層次, ext3 是對實際的磁盤進行處理,而 fuse 文件系統則是將數據通過 /dev/fuse 這個設備文件遞交給了glusterfs client 端,可以將 fuse 文件系統理解為一個代理;
- 數據被 fuse 遞交給 Glusterfs client 后, client 對數據進行一些指定的處理(即按 client 配置文件來進行的一系列處理);
-
在 glusterfs client 的處理末端,通過網絡將數據遞交給 Glusterfs Server, 並且將數據寫入到服務器所控制的存儲設備上。
二.環境
1. 環境規划
Hostname |
IP |
Service |
Remark |
glusterfs-client |
172.30.200.50 |
glusterfs(3.12.9) glusterfs-fuse |
客戶端 |
glusterfs01 |
172.30.200.51 |
glusterfs(3.12.9) glusterfs-server(3.12.9) glusterfs-fuse |
服務器端 |
glusterfs02 |
172.30.200.52 |
glusterfs(3.12.9) glusterfs-server(3.12.9) glusterfs-fuse |
服務器端 |
glusterfs03 |
172.30.200.53 |
glusterfs(3.12.9) glusterfs-server(3.12.9) glusterfs-fuse |
服務器端 |
glusterfs04 |
172.30.200.54 |
glusterfs(3.12.9) glusterfs-server(3.12.9) glusterfs-fuse |
服務器端 |
2. 設置hosts
# 所有節點保持一致的hosts即可,以gluster01節點為例; # 綁定hosts不是必須的,后續組建受信存儲池也可使用ip的形式 [root@glusterfs01 ~]# vim /etc/hosts # glusterfs 172.30.200.50 glusterfs-client 172.30.200.51 glusterfs01 172.30.200.52 glusterfs02 172.30.200.53 glusterfs03 172.30.200.54 glusterfs04 [root@glusterfs01 ~]# cat /etc/hosts
3. 設置ntp
# 至少4個Brick Server節點需要保持時鍾同步(重要),以glusterfs01節點為例 [root@glusterfs01 ~]# yum install chrony -y # 編輯/etc/chrony.conf文件,設置”172.20.0.252”為時鍾源; [root@glusterfs01 ~]# egrep -v "^$|^#" /etc/chrony.conf server 172.20.0.252 iburst driftfile /var/lib/chrony/drift makestep 1.0 3 rtcsync logdir /var/log/chrony # 設置開機啟動,並重啟 [root@glusterfs01 ~]# systemctl enable chronyd.service [root@glusterfs01 ~]# systemctl restart chronyd.service # 查看狀態 [root@glusterfs01 ~]# systemctl status chronyd.service [root@glusterfs01 ~]# chronyc sources -v
4. 設置glusterfs packages
# 全部節點安裝glusterfs yum源 [root@glusterfs01 ~]# yum install -y centos-release-gluster # 查看 [root@glusterfs01 ~]# yum repolist
5. 設置iptables
# 提前統一設置iptables(至少4個Brick Server節點),以glusterfs01節點為例; # 初始環境已使用iptables替代centos7.x自帶的firewalld,同時關閉selinux; [root@glusterfs01 ~]# vim /etc/sysconfig/iptables # tcp24007:24008:glusterfsd daemon management服務監聽端口; # tcp49152:49160:3.4版本之后(之前的版本的起始端口是24009),啟動1個brick,即啟動1個監聽端口,起始端口為49152,依次類推,如這里設置49152:49160,可開啟9個brick; # 另如果啟動nfs server,需要開啟38465:38467,111等端口 -A INPUT -p tcp -m state --state NEW -m tcp --dport 24007:24008 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 49152:49160 -j ACCEPT [root@glusterfs01 ~]# service iptables restart
三.設置glusterfs
1. mount brick
1)創建分區
# 各brick server的磁盤掛載前需要創建分區並格式化,以glusterfs01節點為例; # 將整個/dev/sdb磁盤設置為1個分區,分區設置默認即可 [root@glusterfs01 ~]# fdisk /dev/sdb Command (m for help): n Select (default p): Partition number (1-4, default 1): First sector (2048-209715199, default 2048): Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): Command (m for help): w # 查看 [root@glusterfs01 ~]# fdisk -l /dev/sdb
2)格式化分區
[root@glusterfs01 ~]# mkfs.xfs -i size=512 /dev/sdb1
3)掛載分區
# 創建掛載目錄,目錄名自定義; # 這里為區分,可以將4個server節點的目錄名按順序命名(非必須) [root@glusterfs01 ~]# mkdir -p /brick1 [root@glusterfs02 ~]# mkdir -p /brick2 [root@glusterfs03 ~]# mkdir -p /brick3 [root@glusterfs04 ~]# mkdir -p /brick4 # 修改/etc/fstab文件,以glusterfs01節點為例,注意其余3各節點掛載點目錄名不同; # 第一欄:設備裝置名; # 第二欄:掛載點; # 第三欄:文件系統; # 第四欄:文件系統參數,默認情況使用 defaults 即可,同時具有 rw, suid, dev, exec, auto, nouser, async 等參數; # 第五欄:是否被 dump 備份命令作用,"0"代表不做 dump 備份; "1"代表要每天進行 dump; "2"代表其他不定日期的 dump; 通常設置"0" 或者"1"; # 第六欄:是否以 fsck 檢驗扇區,啟動過程中,系統默認會以 fsck 檢驗 filesystem 是否完整 (clean), 但某些 filesystem 是不需要檢驗的,如swap;"0"是不要檢驗,"1"表示最早檢驗(一般只有根目錄會配置為 "1"),"2"是檢驗,但晚於"1";通常根目錄配置為"1" ,其余需要要檢驗的 filesystem 都配置為"2"; [root@glusterfs01 ~]# echo "/dev/sdb1 /brick1 xfs defaults 1 2" >> /etc/fstab # 掛載並展示 [root@glusterfs01 ~]# mount -a && mount
2. 啟動glusterfs-server
1)安裝glusterfs-server
# 在4個brick server節點安裝glusterfs-server,以glusterfs01節點為例 [root@glusterfs01 ~]# yum install -y glusterfs-server
2)啟動glusterfs-server
[root@glusterfs01 ~]# systemctl enable glusterd [root@glusterfs01 ~]# systemctl restart glusterd # 查看狀態 [root@glusterfs01 ~]# systemctl status glusterd
# 查看服務監聽端口 [root@glusterfs01 ~]# netstat -tunlp
3. 組建受信存儲池
受信存儲池(trusted storage pools),是1個可信的網絡存儲服務器,為卷提供brick,可以理解為集群。
# 在任意一個server節點組建受信存儲池均可,即由任意節點邀請其他節點組建存儲池; # 組建時,做為”邀請者”,不需要再加入本節點; # 使用ip或dns主機名解析都可以,這里已在hosts文件綁定主機,采用主機名; # 從集群移除節點:gluster peer detach <ip or hostname> [root@glusterfs01 ~]# gluster peer probe glusterfs02 [root@glusterfs01 ~]# gluster peer probe glusterfs03 [root@glusterfs01 ~]# gluster peer probe glusterfs04
# 查看受信存儲池狀態; # 在glusterfs01節點查看集群狀態,不會list出本節點,只展示peers [root@glusterfs01 ~]# gluster peer status
4. 設置glusterfs-client
# 客戶端主要安裝兩個組件,glusterfs與glusterfs-fuse; # glusterfs-client具備如數據卷管理、I/O 調度、文件定位、數據緩存等功能; # glusterfs-fuse將遠端glusterfs掛載到本地文件系統,可通過”modinfo fuse”,“ll /dev/fuse”等命令查看 [root@glusterfs-client ~]# yum install -y glusterfs glusterfs-fuse