GlusterFS分佈式文件系統的卷類型及配置詳解

博文大綱:
(一)GlusterFS相關概念。
(二)GlusterFS各類卷類型的部署及客戶端掛載使用。
(三)GlusterFS維護命令。node

(一)GlusterFS相關概念:linux

GlusterFS是一個開源的分佈式文件系統,同時也是Scale-Out存儲解決方案Gluster的核心,在存儲數據方面有強大的橫向擴展能力。GlusterFS主要由存儲服務器、客戶端及NFS/Samba存儲網關(可選組件)組成。GlusterFS架構中最大的設計特色是沒有元數據服務器組件,也就是說沒有主/從服務器之分,每個節點均可以是主服務器。vim

1)Gluster相關參考文檔以下(我下面的配置是基於本地yum配置的,若須要搭建最新版本,可直接按照下面的文檔連接進行配置):centos

Gluster官網基於centos7/Redhat安裝Gluster官方文檔緩存

2) GlusterFS相關術語:服務器

  • Brick(存儲塊):指可信主機池中由主機提供的用於物理存儲的專用分區。
  • Volume(邏輯卷):一個邏輯卷是一組Brick的集合。卷是數據存儲的邏輯設備。
  • FUSE:是一個內核模塊,容許用戶本身建立文件系統,無須修改內核代碼。
  • Glusterd(後臺管理進程):在存儲羣集中的每一個節點上都要運行。
  • VFS:內核空間對用戶空間提供的訪問磁盤的接口。

3)GlusterFS的卷類型:架構

  • 分佈式卷:至關於Windows中的跨區卷,只是擴大了磁盤空間,不具備容錯能力;
  • 條帶卷:至關於Windows中的帶區卷,屬於RAID 0級別,一份文件會在多個磁盤上進行讀寫,文件越大,讀寫效率越高,但不具備容錯能力;
  • 複製卷:至關於Windows中的鏡像卷,屬於RAID 1級別,具備容錯能力,讀性能高,但寫性能降低,由於要將同一份文件同步寫入在多個Brick上。
  • 分佈式條帶卷:brick server數量是條帶數(數據塊分佈的brick數量)的倍數,兼具分佈式卷和條帶卷的特色。
  • 分佈式複製卷:brick server數量是鏡像數(數據副本數量)的倍數,兼具分佈式卷和複製卷的特色。
  • 條帶複製卷:相似於RAID 10,同時具有條帶卷和複製卷的特色。
  • 分佈式條帶複製卷:三種基本卷的複合卷,一般用於map reduce應用。

在以上幾種卷類型中,有些可能沒法理解透徹,可是不要緊,在生產環境中,大多數公司考慮到磁盤的利用率,會使用RAID5,或者RAID 10,關於RAID 5卷的配置能夠參考:GlusterFS Dispersed Volume(糾錯卷)總結dom

4)下面介紹GlusterFS一些卷類型的特色(不包括RAID5):tcp

一、分佈式卷(相似Windows中的跨區卷):分佈式

分佈式卷是GlusterFS的默認卷,在建立卷時,默認選項是建立分佈式卷。在該模式下,並無對文件進行分塊處理,文件直接存儲在某個server節點上。

分佈式卷具備以下特色:

  • 文件分佈在不一樣的服務器,不具有冗餘性。
  • 更容易且廉價地擴展卷的大小。
  • 單點故障會形成數據丟失。
  • 依賴底層的數據保護。

二、條帶卷(相似Windows中的帶區卷,也稱爲RAID 0):

stripe模式至關於RAID 0,在該模式下,根據偏移量將文件分紅N塊(N個條帶節點),輪詢地存儲在每一個Brick Server節點。節點把每一個數據塊都做爲普通文件存入本地文件系統,經過擴展屬性記錄總塊數和每塊的序號。在配置時指定條帶數必須等於卷中Brick 所包含的存儲服務器數,在存儲大文件時,性能尤其突出,可是不具有冗餘性。

條帶卷具備以下特色:
  • 數據被分割成更小塊分佈到塊服務器羣中的不一樣條帶區。
  • 分佈減小了負載且更小的文件加速了存取的速度。
  • 沒有數據冗餘。

三、複製卷(相似於Windows中的鏡像卷,也稱爲RAID 1)

複製模式,即同一文件保存一份或多份副本,每一個節點上保存相同的內容和目錄結構。複製模式由於要保存副本,因此磁盤利用率較低,若是多個節點上的存儲空間不一致,那麼將按照木桶效應取最低節點的容量做爲該卷的總容量。複製卷具備冗餘性,即便一個節點損壞,也不影響數據的正常使用。

複製卷具備以下特色:
  • 卷中全部的服務器均保存一個完整的副本。
  • 卷的副本數量可由客戶建立的時候決定。
  • 至少有兩個塊服務器或更多服務器。
  • 具有冗餘性。

四、分佈式複製卷(也稱爲RAID 10):

分佈式複製卷兼顧分佈式卷和複製卷的功能,主要用於須要冗餘的狀況下。

(二)GlusterFS各類卷類型的部署及客戶端掛載使用:

我這裏的環境以下:

GlusterFS分佈式文件系統的卷類型及配置詳解

服務器相關信息:

GlusterFS分佈式文件系統的卷類型及配置詳解

磁盤相關信息:

GlusterFS分佈式文件系統的卷類型及配置詳解

1、部署前準備:
一、在全部節點執行如下操做:根據上表中添加磁盤,經過fdisk命令進行分區,mkfs格式化,建立相應的掛載目錄,並將格式化的磁盤掛載到相應的目錄中,最後修改/etc/fstab配置文件,使其永久掛載,具體配置能夠參考我以前的博文:centos 7.3建立、掛載及卸載(包括自動掛載)文件系統。(我這裏主要目的是作個相關筆記,因此磁盤大小不以實際環境爲準,能夠根據本身的實際環境進行磁盤分區)

二、本身配置防火牆和selinux,我這裏爲了方便,直接關閉了。

三、下載我提供的本地yum倉庫,並上傳至各個節點服務器。

2、開始部署:

一、node1配置以下:

[root@node1 ~]# vim /etc/hosts         #寫入末尾四行,以便添加4個節點的解析
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.1 node1
192.168.1.2 node2
192.168.1.3 node3
192.168.1.4 node4
[root@node1 ~]# mount /dev/cdrom /media     #掛載我提供的yum倉庫
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@node1 ~]# rm -rf /etc/yum.repos.d/*       #刪除或移走原有yum配置文件
[root@node1 ~]# yum clean all       #清除yum緩存
[root@node1 ~]# vim /etc/yum.repos.d/a.repo       #編輯yum配置文件,寫入如下內容
[fd]
baseurl=file:///media
gpgcheck=0
#寫完以上三行,保存退出便可。
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
#安裝GlusterFS軟件
[root@node1 ~]# systemctl start glusterd         #啓動該服務
[root@node1 ~]# systemctl enable glusterd     #設置爲開機自啓動

二、node2配置以下:

[root@node2 ~]# scp root@192.168.1.1:/etc/hosts /etc/    #將node1的hosts配置文件複製過來
The authenticity of host 192.168.1.1 (192.168.1.1)cat be established.
ECDSA key fingerprint is SHA256:BS+lKMN05pYF3F1XeIYU69VnHjzKBiBiMZ1SDKgsxxs.
ECDSA key fingerprint is MD5:ba:0b:a7:47:55:01:6f:41:41:5f:ee:b8:88:bf:7a:60.
Are you sure you want to continue connecting (yes/no)? yes    #輸入「yes」
Warning: Permanently added '192.168.1.1' (ECDSA) to the list of known hosts.
root@192.168.1.1s password:               #輸入對方用戶名的密碼
hosts                                             100%  230   286.9KB/s   00:00   
[root@node1 ~]# rm -rf /etc/yum.repos.d/*       #刪除或移走原有yum配置文件
[root@node1 ~]# yum clean all       #清除yum緩存
[root@node2 ~]# scp root@192.168.1.1:/etc/yum.repos.d/a.repo /etc/yum.repos.d/
#將node1的yum文件複製過來
root@192.168.1.1s password: 
a.repo                          100%   38    31.1KB/s   00:00   
[root@node2 ~]# mount /dev/cdrom /media          #掛載我提供的yum倉庫
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@node1 ~]# yum -y install glusterfs glusterfs-server glusterfs-fuse glusterfs-rdma
#安裝GlusterFS軟件
[root@node1 ~]# systemctl start glusterd         #啓動該服務
[root@node1 ~]# systemctl enable glusterd     #設置爲開機自啓動

至此,node2配置完成了,node三、node4重複node2的配置便可,我這就不寫了,請自行配置。

三、添加節點(接下來的全部配置,在任意一臺節點上執行便可,我這裏在node1上執行):

[root@node1 ~]# gluster peer probe node1      #添加node1,因此提示能夠不用添加
peer probe: success. Probe on localhost not needed
[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
[root@node1 ~]# gluster peer status      #查看羣集狀態
Number of Peers: 3

Hostname: node2
Uuid: d733aa7c-5078-43b2-9e74-6673f3aaa16e
State: Peer in Cluster (Connected) #若是某個節點顯示Disconnected,請檢查hosts配置文件

Hostname: node3
Uuid: dc64b6c6-ce2d-41d3-b78b-56f46038ab52
State: Peer in Cluster (Connected)

Hostname: node4
Uuid: 926b51e9-4599-4fe8-ad2b-11f53a2ffb5a
State: Peer in Cluster (Connected)

四、建立各類類型的卷

(1)建立分佈式卷:

[root@node1 ~]# gluster volume create dis-volume node1:/e6 node2:/e6 force
#建立分佈式卷,其中「dis-volume」爲卷名,沒有指定類型,默認建立的是分佈式卷。
volume create: dis-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume info dis-volume   #查看該卷相關信息

Volume Name: dis-volume
Type: Distribute
Volume ID: 2552ea18-b8f4-4a28-b411-a5b1bd168009
Status: Created
Snapshot Count: 0
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: node1:/e6
Brick2: node2:/e6
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start dis-volume          #啓用該卷
volume start: dis-volume: success

(2)建立條帶卷:

[root@node1 ~]# gluster volume create stripe-volume stripe 2 node1:/d5 node2:/d5 force
#建立條帶卷,指定條帶卷的個數爲2個。「stripe-volume」爲卷名
#指定類型爲stripe,數值爲2,並且後面跟了2個brick  server,因此建立的是條帶卷
volume create: stripe-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume info stripe-volume       #查看該卷相關信息

Volume Name: stripe-volume
Type: Stripe      #卷類型爲條帶
Volume ID: c38107e9-9d92-4f37-a345-92568c2c9e9a
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node1:/d5
Brick2: node2:/d5
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start stripe-volume            #啓用該卷
volume start: stripe-volume: success

(3)建立複製卷:

[root@node1 ~]# gluster volume create rep-volume replica 2 node3:/d5 node4:/d5 force 
#指定類型爲「replica」,數值爲「2」,並且後面跟了兩個brick server,因此建立的是複製卷
volume create: rep-volume: success: please start the volume to access data
[root@node1 ~]# gluster volume info rep-volume               #查看該卷相關信息

Volume Name: rep-volume
Type: Replicate          #卷類型爲複製
Volume ID: 03553b49-c5fa-4a5f-8d66-8c229e617696
Status: Created
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: node3:/d5
Brick2: node4:/d5
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start rep-volume           #啓用該卷
volume start: rep-volume: success

(4)建立分佈式條帶卷:

[root@node1 ~]# gluster volume create dis-stripe stripe 2 node1:/b3 node2:/b3 node3:/b3 node4:/b3 force
#指定類型爲stripe,數值爲2,並且後面跟了4個brick server,因此建立的是分佈式條帶卷
volume create: dis-stripe: success: please start the volume to access data
[root@node1 ~]# gluster volume info dis-stripe               #查看該卷相關信息

Volume Name: dis-stripe
Type: Distributed-Stripe           #卷類型爲分佈式+條帶
Volume ID: 059ee6e3-317a-4e47-bf92-47d88e3acf3c
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/b3
Brick2: node2:/b3
Brick3: node3:/b3
Brick4: node4:/b3
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start dis-stripe          #啓用該卷
volume start: dis-stripe: success

(5)建立分佈式複製卷:

[root@node1 ~]# gluster volume create dis-rep replica 2 node1:/c4 node2:/c4 node3:/c4 node4:/c4 force
#指定類型爲replica,數值爲2,並且後面跟了4個brick  server,是2的兩倍,因此建立的是分佈式複製卷
volume create: dis-rep: success: please start the volume to access data
[root@node1 ~]# gluster volume info dis-rep                  #查看該卷相關信息

Volume Name: dis-rep      
Type: Distributed-Replicate               #卷類型爲分佈式+複製
Volume ID: 9e702694-92c7-4a3a-88d2-dcf9ddad741c
Status: Created
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/c4
Brick2: node2:/c4
Brick3: node3:/c4
Brick4: node4:/c4
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
[root@node1 ~]# gluster volume start dis-rep         #啓用該卷
volume start: dis-rep: success

OK,如今所涉及到的卷已經建立完成,能夠在客戶端上掛載使用了:

五、部署Gluster客戶端:

(1)部署安裝:

[root@node1 ~]# rm -rf /etc/yum.repos.d/*       #刪除或移走原有yum配置文件
[root@node1 ~]# yum clean all       #清除yum緩存
[root@node2 ~]# scp root@192.168.1.1:/etc/yum.repos.d/a.repo /etc/yum.repos.d/
#將node1的yum文件複製過來
root@192.168.1.1s password: 
a.repo                          100%   38    31.1KB/s   00:00   
[root@node2 ~]# mount /dev/cdrom /media          #掛載我提供的yum倉庫
mount: /dev/sr0 寫保護,將以只讀方式掛載
[root@client ~]#  yum -y install glusterfs glusterfs-fuse   #安裝客戶端所需的GlusterFS軟件
[root@client ~]# mkdir -p /test/{dis,stripe,rep,dis_and_stripe,dis_and_rep}        #建立掛載目錄
[root@client ~]# ls /test       #查看掛載目錄是否建立
dis  dis_and_rep  dis_and_stripe  rep  stripe
[root@client ~]# scp root@192.168.1.1:/etc/hosts /etc/           
#client也須要解析節點服務器,因此將主機1.1的hosts文件複製過來
root@192.168.1.1 s password:           #輸入對端服務器用戶密碼
hosts                                             100%  230     0.2KB/s   00:00

(2)掛載Gluster文件系統:

[root@client ~]# mount -t glusterfs node1:dis-volume /test/dis
[root@client ~]# mount -t glusterfs node2:stripe-volume /test/stripe
[root@client ~]# mount -t glusterfs node3:rep-volume /test/rep
[root@client ~]# mount -t glusterfs node4:dis-stripe /test/dis_and_stripe
[root@client ~]# mount -t glusterfs node1:dis-rep /test/dis_and_rep
#若是掛載不成功,請檢查hosts文件解析。在掛載時,能夠指定邏輯存儲卷內的任意主機,
#由於全部GlusterFS配置信息在節點中是共享的,這也避免了node1故障,就沒法使用其餘
#卷的問題。

(3)修改fstab配置文件,以便實現開機自動掛載:

[root@client ~]# vim /etc/fstab       #在文件末尾寫入下面幾行
node2:stripe-volume     /test/stripe    glusterfs       defaults,_netdev 0 0
node3:rep-volume        /test/rep       glusterfs       defaults,_netdev 0 0
node4:dis-stripe        /test/dis_and_stripe    glusterfs       defaults,_netdev 0 0
node1:dis-rep           /test/dis_and_rep       glusterfs       defaults,_netdev 0 0
node1:dis-volume        /test/dis       glusterfs       defaults,_netdev 0 0

設置自動掛載時,必須當前已經手動掛載了相關目錄,才能夠實現自動掛載,雖然在手動掛載時,指定哪一個節點均可以,但建議在寫入/etc/fstab時,當前掛載時指定的哪一個節點,就寫哪一個節點。

(三)GlusterFS維護命令:

[root@node1 ~]# gluster volume list      #查看卷列表
dis-rep
dis-stripe
dis-volume
rep-volume
stripe-volume
[root@node1 ~]# gluster volume info           #查看全部卷的信息
Volume Name: dis-rep
Type: Distributed-Replicate
Volume ID: 9e702694-92c7-4a3a-88d2-dcf9ddad741c
Status: Started
Snapshot Count: 0
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: node1:/c4
Brick2: node2:/c4
Brick3: node3:/c4
Brick4: node4:/c4
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
 .......................      #省略部份內容
[root@node1 ~]# gluster volume status           #查看卷的狀態
Status of volume: dis-rep
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick node1:/c4                             49155     0          Y       11838
Brick node2:/c4                             49155     0          Y       12397
Brick node3:/c4                             49154     0          Y       12707
Brick node4:/c4                             49154     0          Y       12978
Self-heal Daemon on localhost               N/A       N/A        Y       11858
Self-heal Daemon on node4                   N/A       N/A        Y       12998
Self-heal Daemon on node2                   N/A       N/A        Y       12417
Self-heal Daemon on node3                   N/A       N/A        Y       12728
       ............................

 [root@node1 ~]# gluster volume stop dis-stripe             #中止一個卷
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: dis-stripe: success
[root@node1 ~]# gluster volume delete dis-stripe           #刪除一個卷
Deleting volume will erase all information abe. Do you want to continue? (y/n) y
volume delete: dis-stripe: success
[root@node1 ~]# gluster volume set dis-rep auth.allow 192.168.1.*,10.1.1.*            
#設置只容許特定網段的客戶端訪問卷dis-rep
volume set: success

———————— 本文至此結束,感謝閱讀 ————————

相關文章
相關標籤/搜索