# GlusterFS 4.1 版本選擇和部署
[TOC]
## 1 前言相關
### 1.1 glusterfs優勢
1、無元數據設計
GlusterFS設計沒有集中或分布式元數據,取而代之的是彈性哈希算法。集群中的任何服務器、客戶端都可利用哈希算法、路徑及文件名進行計算,就可以對數據進行定位,并執行讀寫訪問操作。
**結論:**
* 無元數據設計帶來的好處是極大地提高了擴展性,同時也提高了系統的性能和可靠性。
* 如果需要列出文件或目錄,性能會大幅下降,因為列出文件或目錄,需要查詢所在的節點并對節點中的信息進行聚合。
* 但是如果給定確定的文件名,查找文件位置會非常快。
2、服務器間的部署
GlusterFS集群服務器之間是對等的,每個節點服務器都掌握了集群的配置信息。
所有信息都可以在本地查詢。每個節點的信息更新都會向其他節點通告,保證節點信息的一致性。
但是集群規模較大后,信息同步效率會下降,非一致性概率會提高。
3、客戶端訪問
首先程序通過訪問掛載點的形式讀寫數據,對于用戶和程序而言,集群文件系統是透明的,用戶和程序根本感覺不到文件系統是本地還是遠端服務器上。
讀寫操作會被交給VFS(Virtual File System,虛擬文件系統) 來處理,VFS會將請求交給FUSE內核模塊,而FUSE又會通過設備/dev/fuse將數據交給GlusterFS Client。最后經過GlusterFS Client計算,并最終通過網絡將請求或數據發送到GlusterFS Servers上。
>關于glusterfs的原理詳情,可以參考以下文章
[glusterfs架構和原理](https://www.jianshu.com/p/a33ff57f32df)
[換個視角深入理解GlusterFS,GlusterFS缺點分析](https://www.jianshu.com/p/c62aee72a0a7)
glusterfs中文資料推薦劉愛貴博士的[GlusterFS原創資源系列](https://blog.csdn.net/liuben/article/details/17331557)
### 1.2 版本選擇
網上大部分文章都是基于3.x版本部署的,但是3.x版本已經在centos7中的阿里云的epel源中消失了,最低的也是4.0版本
```sh
[root@kaifa-supply ~]# yum search centos-release-gluster
......
centos-release-gluster-legacy.noarch : Disable unmaintained Gluster repositories from the CentOS Storage SIG
centos-release-gluster40.x86_64 : Gluster 4.0 (Short Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster41.noarch : Gluster 4.1 (Long Term Stable) packages from the CentOS Storage SIG repository
centos-release-gluster5.noarch : Gluster 5 packages from the CentOS Storage SIG repository
centos-release-gluster6.noarch : Gluster 6 packages from the CentOS Storage SIG repository
centos-release-gluster7.noarch : Gluster 7 packages from the CentOS Storage SIG repository
```
并且明確的提示,4.0版本也是短期支持板,所以我們選擇更新一些的4.1版本來部署
### 1.3 volume知識
存儲類型介紹詳見:[Setting Up Volumes - Gluster Docs](https://link.zhihu.com/?target=https%3A//docs.gluster.org/en/latest/Administrator%20Guide/Setting%20Up%20Volumes/)
在老版本中,共有7種卷類型
在新版本中,共有5種卷類型
共有的卷類型是:
* Distributed (分布式卷 根據hash結果存放,無備份,可直讀)
* Replicated (復制卷 類似 RAID1,可直讀)
* Distributed Replicated (分布式復制卷 類比 RAID10,可直讀)
不同的卷類型是:
* 老版本中有stripe(條帶卷),塊存儲方式,不能直讀
* 以及基于條帶卷組合的分布式條帶卷,復制條帶卷,分布式復制條帶卷
* 新版本中放棄了stripe,啟用了基于EC糾錯碼的Dispersed(糾錯卷)
* 以及組合出的Distributed Dispersed(分布式糾錯卷)
不過我們不用考慮那么多,因為常規都用**分布式復制卷**,優點如下
* 分布式存儲,效率高
* 基于復制卷,數據有備份
* 文件可直讀
* 所有版本都支持
當然Dispersed(糾錯卷 類似于RAID5)從3.6開始一直更新到7.x版本,花費了gluster吞對大量心血,想了解的可以看這篇文章
* [GlusterFS Dispersed Volume(糾錯卷)總結](https://blog.csdn.net/weiyuefei/article/details/79022639)
* [GlusterFS企業級功能之EC糾刪碼](https://blog.csdn.net/liuben/article/details/77776570)
## 2 服務部署
**參考** [官方:快速部署指南](https://docs.gluster.org/en/latest/Quick-Start-Guide/Quickstart/#purpose-of-this-document)
### 2.1 服務規劃
| 操作系統 | IP | 主機名 | 附加硬盤 |
| ---------- | ---------- | ------------ | -------------------- |
| centos 7.4 | 10.0.0.101 | gf-node1 | sdb:5G |
| centos 7.4 | 10.0.0.102 | gf-node2 | sdb:5G |
| centos 7.4 | 10.0.0.103 | gf-node3 | sdb:5G |
### 2.2 環境準備
5臺服務器都做以下相同操作
```sh
# 關閉防火墻、selinux等不解釋
# 完成hosts解析
cat >>/etc/hosts <<EOF
10.0.0.101 gf-node01
10.0.0.102 gf-node02
10.0.0.103 gf-node03
EOF
# 安裝4.1yum源和程序
yum install -y centos-release-gluster41
yum install -y glusterfs glusterfs-libs glusterfs-server
# 啟動服務并開機啟動
systemctl start glusterd.service
systemctl enable glusterd.service
systemctl status glusterd.service
```
### 2.3 格式化掛載磁盤
總共創建3個目錄,brick1用來掛載sdb,另外兩個目錄作為本地文件夾
格式化磁盤
```sh
# 查看磁盤列表
[root@gf-node01 ~]# fdisk -l
Disk /dev/sdb: 5368 MB, 5368709120 bytes, 10485760 sectors
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
# 不分區直接格式化磁盤
mkfs.xfs -i size=512 /dev/sdb
```
掛載磁盤
```sh
# 創建目錄并掛載
mkdir -p /data/brick{1..3}
echo '/dev/sdb /data/brick1 xfs defaults 0 0' >> /etc/fstab
mount -a && mount
# 查看結果
[root@gf-node01 ~]# df -h|grep sd
/dev/sda2 48G 1.7G 47G 4% /
/dev/sdb 5.0G 33M 5.0G 1% /data/brick1
```
### 2.4 建立主機信任池
在任意一臺主機上,執行以下命令都可以建立信任池,建立并不需要賬號密碼,因為默認是將部署環境考慮為安全的可信環境
```sh
# 建立可信池
gluster peer probe gf-node02
gluster peer probe gf-node03
# 查看狀態
[root@gf-node01 ~]# gluster peer status
......
[root@gf-node01 ~]# gluster pool list
UUID Hostname State
4068e219-5141-43a7-81ba-8294536fb054 gf-node02 Connected
e3faffeb-4b16-45e2-9ff3-1922791e05eb gf-node03 Connected
3e6a4567-eda7-4001-a5d5-afaa7e08ed93 localhost Connected
```
**注意:** 一旦信任池建立后,只有在信任池中的節點才能添加新服務器信任池中
## 3 使用分布式復制卷
只實驗GlusterFs的分布式復制卷,其他卷類型有需要的話參考百度自行測試
### 3.1 分布式復制卷創建說明
1. 命令`gluster volume create gv1 replica 3 DIR1 DIR2 DIR3 ....`
2. 副本數不能小于3 `replica 3`,否則會阻止創建,因為可能腦裂,會提示
```sh
Replica 2 volumes are prone to split-brain. Use Arbiter or Replica 3 to avoid this
```
3. 副本的數量如果等于副本數(3個),則是分布式卷,是倍數則是分布式復制卷
4. 會先將3個副本一組創建為復制卷,然后再將多個復制卷組成分布卷
5. 分布式復制卷的副本順序,和創建命令相關,不會隨機排列
6. 如果不是所有副本卷都是獨立硬盤,需要添加`force`參數,否則會提示錯誤
```sh
volume create: gv1: failed:
The brick gf-node01:/data/brick2/gv1 is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior.
```
### 3.2 分布式復制卷創建
```sh
# 創建分布式復制卷
gluster volume create gv1 replica 3 \
gf-node01:/data/brick1/gv1 \
gf-node01:/data/brick2/gv1 \
gf-node02:/data/brick1/gv1 \
gf-node02:/data/brick2/gv1 \
gf-node03:/data/brick1/gv1 \
gf-node03:/data/brick2/gv1 \
force
# 啟動卷
gluster volume start gv1
# 查看卷的狀態
[root@gf-node01 ~]# gluster volume info
Volume Name: gv1
Type: Distributed-Replicate
Volume ID: e1e004fa-5588-4629-b7ff-048c4e17de91
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 3 = 6
Transport-type: tcp
Bricks:
Brick1: gf-node01:/data/brick1/gv1
Brick2: gf-node01:/data/brick2/gv1
Brick3: gf-node02:/data/brick1/gv1
Brick4: gf-node02:/data/brick2/gv1
Brick5: gf-node03:/data/brick1/gv1
Brick6: gf-node03:/data/brick2/gv1
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off
```
### 3.3 分布式復制卷的使用
```sh
# 掛載卷
[root@gf-node01 ~]# mount -t glusterfs gf-node01:/gv1 /mnt
# 寫入數據測試
[root@gf-node01 ~]# touch /mnt/test{1..9}
[root@gf-node01 ~]# ls /mnt/test{1..9}
/mnt/test1 /mnt/test2 /mnt/test3 /mnt/test4 /mnt/test5 /mnt/test6 /mnt/test7 /mnt/test8 /mnt/test9
# 驗證測試數據
[root@gf-node01 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1:
test1 test2 test4 test5 test8 test9
[root@gf-node02 ~]# ls /data/brick*/*
/data/brick1/gv1:
test1 test2 test4 test5 test8 test9
/data/brick2/gv1:
[root@gf-node03 ~]# ls /data/brick*/*
/data/brick1/gv1:
test3 test6 test7
/data/brick2/gv1:
test3 test6 test7
```
**結論:** 可以看出前三個為一個復制集,后三個為一個復制集,所以創建卷的時候,卷的順序很關鍵
- shell編程
- 變量1-規范-環境變量-普通變量
- 變量2-位置-狀態-特殊變量
- 變量3-變量子串
- 變量4-變量賦值三種方法
- 變量5-數組相關
- 計算1-數值計算命令和案例
- 計算2-expr命令舉例
- 計算3-條件表達式和各種操作符
- 計算4-條件表達式和操作符案例
- 循環1-函數的概念與作用
- 循環2-if與case語法
- 循環3-while語法
- 循環4-for循環
- 其他1-判斷傳入的參數為0或整數的多種思路
- 其他2-while+read按行讀取文件
- 其他3-給輸出內容加顏色
- 其他4-shell腳本后臺運行知識
- 其他5-6種產生隨機數的方法
- 其他6-break,continue,exit,return區別
- if語法案例
- case語法案例
- 函數語法案例
- WEB服務軟件
- nginx相關
- 01-簡介與對比
- 02-日志說明
- 03-配置文件和虛擬主機
- 04-location模塊和訪問控制
- 05-status狀態模塊
- 06-rewrite重寫模塊
- 07-負載均衡和反向代理
- 08-反向代理監控虛擬IP地址
- nginx與https自簽發證書
- php-nginx-mysql聯動
- Nginx編譯安裝[1.12.2]
- 案例
- 不同客戶端顯示不同信息
- 上傳和訪問資源池分離
- 配置文件
- nginx轉發解決跨域問題
- 反向代理典型配置
- php相關
- C6編譯安裝php.5.5.32
- C7編譯php5
- C6/7yum安裝PHP指定版本
- tomcxat相關
- 01-jkd與tomcat部署
- 02-目錄-日志-配置文件介紹
- 03-tomcat配置文件詳解
- 04-tomcat多實例和集群
- 05-tomcat監控和調優
- 06-Tomcat安全管理規范
- show-busy-java-threads腳本
- LVS與keepalived
- keepalived
- keepalived介紹和部署
- keepalived腦裂控制
- keepalived與nginx聯動-監控
- keepalived與nginx聯動-雙主
- LVS負載均衡
- 01-LVS相關概念
- 02-LVS部署實踐-ipvsadm
- 03-LVS+keepalived部署實踐
- 04-LVS的一些問題和思路
- mysql數據庫
- 配置和腳本
- 5.6基礎my.cnf
- 5.7基礎my.cnf
- 多種安裝方式
- 詳細用法和命令
- 高可用和讀寫分離
- 優化和壓測
- docker與k8s
- docker容器技術
- 1-容器和docker基礎知識
- 2-docker軟件部署
- 3-docker基礎操作命令
- 4-數據的持久化和共享互連
- 5-docker鏡像構建
- 6-docker鏡像倉庫和標簽tag
- 7-docker容器的網絡通信
- 9-企業級私有倉庫harbor
- docker單機編排技術
- 1-docker-compose快速入門
- 2-compose命令和yaml模板
- 3-docker-compose命令
- 4-compose/stack/swarm集群
- 5-命令補全和資源限制
- k8s容器編排工具
- mvn的dockerfile打包插件
- openstack與KVM
- kvm虛擬化
- 1-KVM基礎與快速部署
- 2-KVM日常管理命令
- 3-磁盤格式-快照和克隆
- 4-橋接網絡-熱添加與熱遷移
- openstack云平臺
- 1-openstack基礎知識
- 2-搭建環境準備
- 3-keystone認證服務部署
- 4-glance鏡像服務部署
- 5-nova計算服務部署
- 6-neutron網絡服務部署
- 7-horizon儀表盤服務部署
- 8-啟動openstack實例
- 9-添加計算節點流程
- 10-遷移glance鏡像服務
- 11-cinder塊存儲服務部署
- 12-cinder服務支持NFS存儲
- 13-新增一個網絡類型
- 14-云主機冷遷移前提設置
- 15-VXALN網絡類型配置
- 未分類雜項
- 部署環境準備
- 監控
- https證書
- python3.6編譯安裝
- 編譯安裝curl[7.59.0]
- 修改Redhat7默認yum源為阿里云
- 升級glibc至2.17
- rabbitmq安裝和啟動
- rabbitmq多實例部署[命令方式]
- mysql5.6基礎my.cnf
- centos6[upstart]/7[systemd]創建守護進程
- Java啟動參數詳解
- 權限控制方案
- app發包倉庫
- 版本發布流程
- elk日志系統
- rsyslog日志統一收集系統
- ELK系統介紹及YUM源
- 快速安裝部署ELK
- Filebeat模塊講解
- logstash的in/output模塊
- logstash的filter模塊
- Elasticsearch相關操作
- ES6.X集群及head插件
- elk收集nginx日志(json格式)
- kibana說明-漢化-安全
- ES安裝IK分詞器
- zabbix監控
- zabbix自動注冊模板實現監控項自動注冊
- hadoop大數據集群
- hadoop部署
- https證書
- certbot網站
- jenkins與CI/CD
- 01-Jenkins部署和初始化
- 02-Jenkins三種插件安裝方式
- 03-Jenkins目錄說明和備份
- 04-git與gitlab項目準備
- 05-構建自由風格項目和相關知識
- 06-構建html靜態網頁項目
- 07-gitlab自動觸發項目構建
- 08-pipelinel流水線構建項目
- 09-用maven構建java項目
- iptables
- 01-知識概念
- 02-常規命令實戰
- 03-企業應用模板
- 04-企業應用模板[1鍵腳本]
- 05-企業案例-共享上網和端口映射
- SSH與VPN
- 常用VPN
- VPN概念和常用軟件
- VPN之PPTP部署[6.x][7.x]
- 使用docker部署softether vpn
- softEther-vpn靜態路由表推送
- SSH服務
- SSH介紹和部署
- SSH批量分發腳本
- 開啟sftp日志并限制sftp訪問目錄
- sftp賬號權限分離-開發平臺
- ssh配置文件最佳實踐
- git-github-gitlab
- git安裝部署
- git詳細用法
- github使用說明
- gitlab部署和使用
- 緩存數據庫
- zookeeper草稿
- mongodb數據庫系列
- mongodb基本使用
- mongodb常用命令
- MongoDB配置文件詳解
- mongodb用戶認證管理
- mongodb備份與恢復
- mongodb復制集群
- mongodb分片集群
- docker部署mongodb
- memcached
- memcached基本概念
- memcached部署[6.x][7.x]
- memcached參數和命令
- memcached狀態和監控
- 會話共享和集群-優化-持久化
- memcached客戶端-web端
- PHP測試代碼
- redis
- 1安裝和使用
- 2持久化-事務-鎖
- 3數據類型和發布訂閱
- 4主從復制和高可用
- 5redis集群
- 6工具-安全-pythonl連接
- redis配置文件詳解
- 磁盤管理和存儲
- Glusterfs分布式存儲
- GlusterFS 4.1 版本選擇和部署
- Glusterfs常用命令整理
- GlusterFS 4.1 深入使用
- NFS文件存儲
- NFS操作和部署
- NFS文件系統-掛載和優化
- sersync與inotify
- rsync同步服務
- rsyncd.conf
- rsync操作和部署文檔
- rsync常見錯誤處理
- inotify+sersync同步服務
- inotify安裝部署
- inotify最佳腳本
- sersync安裝部署
- 時間服務ntp和chrony
- 時間服務器部署
- 修改utc時間為cst時間
- 批量操作與自動化
- cobbler與kickstart
- KS+COBBLER文件
- cobbler部署[7.x]
- kickstart部署[7.x]
- kickstar-KS文件和語法解析
- kickstart-PXE配置文件解析
- 自動化之ansible
- ansible部署和實踐
- ansible劇本編寫規范
- 配置文件示例
- 內網DNS服務
- 壓力測試
- 壓測工具-qpefr測試帶寬和延時