版權聲明:原創作品,謝絕轉載!否則將追究法律責任。 ————— 作者:kirin
01、簡介
GFS(glusterfs),是一個開源的分布式文件系統,可以將數據存儲在不同的節點服務器上,達到硬件磁盤陣列的效果,從而保證數據的高可用高
02、GlusterFS特點
★擴展性和高性能
★高可用
★全局統一命令空間
★彈性卷管理
★基於標准協議
03、GlusterFS術語
★Brick:GFS中的存儲單元,通過是一個受信存儲池中的服務器的一個導出目錄。可以通過主機名和目錄名來標識,如’SERVER:EXPORT’
★Volume:卷
★FUSE:內核文件系統,Filesystem Userspace是一個可加載的內核模塊,其支持非特權用戶創建自己的文件系統而不需要修改內核代碼。通過在用戶空間運行文件系統的代碼通過FUSE代碼與內核進行橋接。
★VFS:虛擬文件系統
★Glusterd:Gluster management daemon,要在trusted storage pool中所有的服務器上運行
04、卷分類:
# 分布式卷
將數據分開放在不同的節點,並沒有對文件進行分塊。比如一共有100個文件,分布式卷是將這100個通過hash算法文件分開放在不同的節點上,每個文件都是完整的可以打開的
# 條帶卷
將數據分開放在不同的節點,對每個文件進行分塊,類似raid0
# 復制卷
對每個數據進行備份,兩份數據分別放在兩個節點,類似raid1
# 分布式條帶卷
兼顧分布式和條帶卷的功能,主要用於大文件訪問處理,至少最少需要 4 台服務器。
# 分布式復制卷
兼顧分布式卷和復制卷的功能,用於需要冗余的情況下
一、環境准備
1.1虛擬機准備
五台虛擬機:一台作為客戶機,另外四台作為節點,每個虛擬機新增4塊磁盤(每塊磁盤20G)
角色 | 大小 |
---|---|
node1:10.0.0.101 | 20*4 |
node2:10.0.0.102 | 20*4 |
node3:10.0.0.103 | 20*4 |
node4:10.0.0.104 | 20*4 |
客戶端:10.0.0.100 | 100 |
1.2配置四台節點服務器
[root@localhost ~]# hostnamectl set-hostname node1
[root@localhost ~]# hostnamectl set-hostname node2
[root@localhost ~]# hostnamectl set-hostname node3
[root@localhost ~]# hostnamectl set-hostname node4
注意:不用忘記關閉所有節點防火牆跟防護功能啊!!!。
注意:做好時間同步啊!!!
yum install -y ntpdate.x86_64
ntpdate 0.asia.pool.ntp.org
寫入定時任務
1.3修改hosts文件
vim /etc/hosts
10.0.0.101 node1
10.0.0.102 node2
10.0.0.103 node3
10.0.0.104 node4
10.0.0.100 clinet
注意:5台機器都要修改
如果不做解析的話會出現如下報錯
1.4掛載Gluster文件系統跟修改fstab配置文件
1.4.1--4台節點服務器格式化新添加的4塊磁盤,這里不在贅述了
1.4.2.格式化4塊新添加的數據盤
]# mkfs.xfs /dev/sdb
1.4.3.然后創建4個目錄掛載/data/{sdb,sd...},
]# mkdir -p /data/sd{b..e}
1.4.4.掛載格式化后的數據盤
1.4.5.修改fstab配置文件也不在贅述。
]# vim /etc/fstab
1.5安裝GlusterFS
注意四台節點操作一致
###修改yum源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清理yum源
[root@node1 ~]# yum clean all
生成yum緩存
[root@node1 ~]# yum makecache
#安裝gluster
[root@node1 ~]# yum -y install centos-release-gluster ###這是安裝yum源
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma ##安裝依賴包
#啟動glusterfs
systemctl start glusterd.service
#查看狀態
啟動后一定要看狀態。
systemctl status glusterd.service
1.6添加加入存儲信息池
只要一台主機上添加其他節點即可,這里我在node1節點上操作
[root@node1 ~]# gluster peer probe node2 ###把node2加入存儲池
peer probe: success.
[root@node1 ~]# gluster peer probe node3 ###把node3加入存儲池
peer probe: success.
[root@node1 ~]# gluster peer probe node4 ###把node4加入存儲池
peer probe: success.
#查看所有節點
[root@node1 ~]# gluster peer status ####這是命令
Number of Peers: 3
Hostname: node2
Uuid: 61ea3244-2d19-48dc-ab1c-e30bd4e7d01d
State: Peer in Cluster (Connected)
Hostname: node3
Uuid: 134437ba-1bce-4d4a-ab62-689f99796dba
State: Peer in Cluster (Connected)
Hostname: node4
Uuid: 72b81ad1-0428-4488-a146-c8a0d5b466f3
State: Peer in Cluster (Connected)
二、創建各種卷
1:分布式卷
文件分布在不同的服務器,不具備冗余性,單點故障會造成數據丟失,似乎類似於read0
1.1服務端配置
注意:不用忘記關閉所有節點防火牆跟防護功能啊!!!。
注意:做好時間同步啊!!!
隨便找一台機器創建即可這里我用node4操作
#創建卷
在node4創建利用node1和node2上的兩塊磁盤創建;dis-vol為磁盤名;force表示強制'
[root@node4 ~]# gluster volume create dis-vol node1:/data/sdb node2:/data/sdb force
#查看卷
[root@node4 ~]# gluster volume list ###這才是命令
dis-vol
#啟動
[root@node4 ~]# gluster volume start dis-vol ###這才是命令
volume start: dis-vol: success
#查看狀態
[root@node4 ~]# gluster volume info dis-vol ###這才是命令
Volume Name: dis-vol
Type: Distribute
Volume ID: 351d5534-d3d1-450b-93c5-beac0a39e757
Status: Started
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/data/sdb1
Brick2: node2:/data/sdb1
Options Reconfigured:
transport.address-family: inet
storage.fips-mode-rchecksum: on
nfs.disable: on
#如果不想用可以關閉
[root@node4 ~]# gluster volume stop dis-vol
#甚至可以刪除它
[root@node4 ~]# gluster volume delete dis-vol
1.2客戶端配置
注意:不用忘記關閉所有節點防火牆跟防護功能啊!!!。
注意:做好時間同步啊!!!
#配置安裝GFS源
1.下載阿里雲yum源:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2.清理yum源&生成緩存:
yum clean all && yum makecache
3.安裝源:
yum -y install centos-release-gluster
4.安裝軟件包:
yum -y install glusterfs glusterfs-fuse
####host文件修改了嗎?
#創建臨時掛載點:
root@client ~]# mkdir -p /test/dis #遞歸創建掛載點
[root@client ~]# mount.glusterfs node2:dis-vol /test/dis #掛載分布式node2是隨意寫的只要是地地址池里面的節點都行
[root@node4 ~]# df – h#檢查是否掛載
#測試卷:創建5個40M的文件
dd if=/dev/zero of=/demo1.log bs=1M count=40
dd if=/dev/zero of=/demo2.log bs=1M count=40
dd if=/dev/zero of=/demo3.log bs=1M count=40
dd if=/dev/zero of=/demo4.log bs=1M count=40
dd if=/dev/zero of=/demo5.log bs=1M count=40
#創建的5個文件復制到掛載點上
[root@client ~]# cp /demo* /test/dis
#查看一下吧
[root@client dis]# cd /test/dis
[root@client dis]# ll -h
總用量 200M
-rw-r--r--. 1 root root 40M 5月 13 22:45 demo1.log
-rw-r--r--. 1 root root 40M 5月 13 22:45 demo2.log
-rw-r--r--. 1 root root 40M 5月 13 22:45 demo3.log
-rw-r--r--. 1 root root 40M 5月 13 22:45 demo4.log
-rw-r--r--. 1 root root 40M 5月 13 22:45 demo5.log
#自行前往node1與node2查看發生了什么變化
#node1查看一下
[root@node1 ~]# cd /data/sdb
[root@node1 sdb1]# ll -h
總用量 160M
-rw-r--r--. 2 root root 40M 5月 13 22:45 demo1.log
-rw-r--r--. 2 root root 40M 5月 13 22:45 demo2.log
-rw-r--r--. 2 root root 40M 5月 13 22:45 demo3.log
-rw-r--r--. 2 root root 40M 5月 13 22:45 demo4.log
#node2查看一下
[root@node2 opt]# cd /data/sdb
[root@node2 sdb1]# ll -h
總用量 40M
-rw-r--r--. 2 root root 40M 5月 13 22:45 demo5.log
2.復制卷
同一個文件保存一份或多分副本,復制模式因為要保存副本,所以磁盤利用率較低。
多個節點上的存儲空間不一致,那么將安裝木桶效應取最低節點的容量作為該卷的總容量
似乎類似於read1
2.1服務端配置
注意:不用忘記關閉所有節點防火牆跟防護功能啊!!!。
注意:做好時間同步啊!!!
本次在node03上操作
#創建卷
[root@node3 ~]# gluster volume create rep-vol replica 2 node3:/data/sdb node4:/data/sdb force
寫錯節點名字或者沒做hosts解析會報一下錯誤
#查看卷
[root@node3 ~]# gluster volume list #命令在這
dis-vol
rep-vol
#啟動
[root@node3 ~]# gluster volume start rep-vol
2.2客戶端配置
#創建掛載點
[root@client dis]# mkdir /test/rep-vol
#掛載
[root@client dis]# mount.glusterfs node2:rep-vol /test/rep-vol/
#復制到掛載點
[root@client /]# cp demo* /test/rep-vol/
#node3節點查看
[root@node3 sdc1]# cd /data/sdb
[root@node3 sdb1]# ll -h
總用量 200M
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo1.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo2.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo3.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo4.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo5.log
#node4節點查看
[root@node4 ~]# cd /data/sdb
[root@node4 sdb1]# ll -h
總用量 200M
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo1.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo2.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo3.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo4.log
-rw-r--r--. 2 root root 40M 5月 13 23:23 demo5.log
三、分布式復制卷
兼顧分布式卷和復制卷的功能;用於需要冗余的情況下,有點類似read10
3.1服務端配置
注意:不用忘記關閉所有節點防火牆跟防護功能啊!!!。
注意:做好時間同步啊!!!
#創建卷
[root@node4 ~]# gluster volume create dis-rep replica 2 node1:/data/sde node2:/data/sde node3:/data/sde node4:/data/sde force
##開啟
gluster volume start dis-rep
gluster volume info dis-rep
3.2客戶端掛載
#創建掛載點、掛載並查看掛載情況
[root@client ~]# mkdir /test/dis-rep
[root@client ~]# mount.glusterfs node1:dis-rep /test/dis-rep/
[root@client ~]# df -h
#復制卷到掛載卷
[root@client /]# cp demo* /test/dis-rep/
#去node1節點查看
[root@node1 ~]# cd /data/sde
[root@node1 sde1]# ll -h
總用量 160M
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo1.log
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo2.log
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo3.log
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo4.log
#node2節點查看
[root@node2 ~]# cd /data/sde1
[root@node2 sde1]# ll -h
總用量 160M
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo1.log
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo2.log
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo3.log
-rw-r--r--. 2 root root 40M 5月 14 09:04 demo4.log
#node3查看
[root@node3 ~]# cd /data/sde1
[root@node3 sde1]# ll -h
總用量 40M
-rw-r--r--. 2 root root 40M 9月 14 09:04 demo5.log
#node4查看
[root@node4 ~]# cd /data/sde1
[root@node4 sde1]# ll -h
總用量 40M
-rw-r--r--.: 2 root root 40M 9月 14 09:04 demo5.log
四、故障測試
隨便關閉一個節點觀察結果,這里以關閉node2服務器為例觀察
[root@client /]# cd /test/
[root@client test]# ls
dis dis-rep rep-vol
[root@client test]# ls dis #查看分布卷
demo1.log demo2.log demo3.log demo4.log //這邊缺少deme05.log
[root@client test]# ls dis-rep/ #查看復制卷
demo1.log demo2.log demo3.log demo4.log demo5.log #這邊是完整的
[root@client test]# ls rep-vol/
demo1.log demo2.log demo3.log demo4.log demo5.log #查看分布式復制卷 也是完整的
五、訪問控制
##僅拒絕
[root@node1~]# gluster volume set dis-vol auth.reject 10.0.0.100
volume set: success
##僅允許
[root@node1 ~] gluster volume set dis-vol auth.allow 10.0.0.100
volume set: success