GlusterFS

GlusterFS分佈式存儲系統

連接:https://pan.baidu.com/s/14X0p9EhjvgObXQy-M09zGw
提取碼:d3jj
複製這段內容後打開百度網盤手機App,操做更方便哦node

1. 分佈式文件系統理論基礎

1.1 分佈式文件系統出現

  • 計算機經過文件系統管理,存儲數據,而如今數據信息爆炸的時代中人們能夠獲取的數據成指數倍的增加,單純經過增長硬盤個數來擴展計算機文件系統的存儲容量的方式,已經不能知足目前的需求。
  • 分佈式文件系統能夠有效解決數據的存儲和管理難題,將固定於某個地點的某個文件系統,擴展到任意多個地點/多個文件系統,衆多的節點組成一個文件系統網絡。每一個節點能夠分佈在不一樣的地點,經過網絡進行節點間的通訊和數據傳輸。人們在使用分佈式文件系統時,無需關心數據是存儲在哪一個節點上,或者是從哪一個節點從獲取的,只須要像使用本地文件系統同樣管理和存儲文件系統中的數據。

1.2 典型表明NFS

NFS(Network File System)即網絡文件系統,它容許網絡中的計算機之間經過TCP/IP網絡共享資源。在NFS的應用中,本地NFS的客戶端應用能夠透明地讀寫位於遠端NFS服務器上的文件,就像訪問本地文件同樣。NFS的優勢以下:linux

1.2.1 節約使用的磁盤空間

客戶端常用的數據能夠集中存放在一臺機器上,並使用NFS發佈,那麼網絡內部全部計算機能夠經過網絡訪問,沒必要單獨存儲。git

1.2.2 節約硬件資源

NFS還能夠共享軟驅,CDROM和ZIP等的存儲設備,減小整個網絡上的可移動設備的數量。緩存

1.2.3 用戶主目錄設定

對於特殊用戶,如管理員等,爲了管理的須要,可能會常常登錄到網絡中全部的計算機,若每一個客戶端,均保存這個用戶的主目錄很繁瑣,並且不能保證數據的一致性。實際上,通過NFS服務的設定,而後在客戶端指定這個用戶的主目錄位置,並自動掛載,就能夠在任何計算機上使用用戶主目錄的文件。安全

1.3 面臨的問題

  • 存儲空間不足,須要更大容量的存儲
  • 直接用NFS掛載存儲,有必定風險,存在單點故障
  • 某些場景不能知足需求,大量的訪問磁盤IO是瓶頸

1.4 GlusterFS概述

  • GlusterFS是Scale-Out存儲解決方案Gluster的核心,它是一個開源的分佈式文件系統,具備強大的橫向擴展能力,經過擴展可以支持數PB存儲容量和處理數千客戶端。GlusterFS藉助TCP/IP或InfiniBand RDMA網絡將物理分佈的存儲資源彙集在一塊兒,使用單一全局命名空間來管理數據。
  • GlusterFS支持運行在任何標準IP網絡上標準應用程序的標準客戶端,用戶能夠在全局統一的命令空間中使用NFS/CIFS等標準協議來訪問應用程序。GlusterFS使得用戶可擺脫原有的獨立,高成本的封閉存儲系統,可以利用普通廉價的存儲設備來部署可集中管理,橫向擴展,虛擬化的存儲池,存儲容量可擴展至TB/PB級。
  • 目前glusterfs已被redhat收購,它的官方網站是:http://www.gluster.org/

超高性能(64個節點時吞吐量也就是帶寬甚至達到32GB/s)
image_1cocsvi2p14b5101110kr1qi7vmt16.png-322.2kB服務器

1.5 GlusterFS企業主要應用場景

image_1coct0kspbcm1lq7fbqd6ahu1j.png-328.5kB

image_1coct14ja1ehp1s0i13b518bi1cf130.png-307kB

理論和實踐上分析,GlusterFS目前主要適用大文件存儲場景,對於小文件尤爲是海量小文件(小於1M),存儲效率和訪問性能都表現不佳。海量小文件LOSF問題是工業界和學術界公認的難題,GlusterFS做爲通用的分佈式文件系統,並無對小文件做額外的優化措施(小於1M),性能很差也是能夠理解的。網絡

1.5.1 Media

文檔,圖片,音頻,視頻併發

1.5.2 Shared storage

雲存儲,虛擬化存儲,HPC(高性能計算)app

1.5.3 Big data

日誌文件,RFID(射頻識別)數據socket

2. 部署安裝

2.1 GlusterFS 安裝前的準備

  • 電腦一臺,內存>=4G,可用磁盤空間大於50G
  • 安裝VMWARE Workstation虛擬機軟件
  • 安裝好四臺CentOS-6-x86_64(6.2-6.8均可以)的虛擬機
  • 基本系統:1核CPU+1024M內存+10G硬盤
  • 網絡選擇:網絡地址轉換(NAT)
  • 關閉iptables和SELinux
  • 預裝glusterfs軟件包
描述 IP 主機名 需求
Linux_node1 192.168.200.151 mystorage01 多添加兩塊各10G的sdb和sdc
Linux_node2 192.168.200.152 mystorage02 多添加兩塊各10G的sdb和sdc
Linux_node3 192.168.200.153 mystorage03 多添加兩塊各10G的sdb和sdc
Linux_node4 192.168.200.154 mystorage04 多添加兩塊各10G的sdb和sdc
Linux_node5 192.168.200.155 WebServer

image_1cocvnarceljnlhr514t91hk03t.png-17.6kB

2.2 GlusterFS 安裝(如下在四臺glusterfs服務器上同時操做)

2.2.1 添加hosts文件實現集羣主機之間相互可以解析

[root@mystorage01 ~]# tail -4 /etc/hosts
192.168.200.151 glusterfs01
192.168.200.152 glusterfs02
192.168.200.153 glusterfs03
192.168.200.154 glusterfs04

2.2.2 關閉selinux和防火牆

[root@mystorage01 ~]# setenforce 0
[root@mystorage01 ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]

2.2.3 安裝GlusterFS必備依賴rpm包

[root@mystorage01 rpm]# pwd
/root/rpm
[root@mystorage01 rpm]# yum -y install createrepo
[root@mystorage01 rpm]# which createrepo
/usr/bin/createrepo
[root@mystorage01 rpm]# createrepo -v .

image_1codfe17417271tb916kapmfdv44a.png-52.5kB

[root@mystorage01 rpm]# cat /etc/yum.repos.d/CentOS-Media.repo
[c6-media]
name=CentOS-$releasever - Media
baseurl=file:///media/CentOS/
        file:///media/cdrom/
        file:///media/cdrecorder/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
[rpm]
name=rpm
baseurl=file:///root/rpm/
gpgcheck=0
enabled=1
[root@mystorage01 rpm]# yum -y clean all
[root@mystorage04 rpm]# yum makecache
[root@mystorage01 rpm]# yum -y install glusterfs-server glusterfs-cli glusterfs-geo-replication
[root@mystorage01 rpm]# rpm -qa glusterfs-server glusterfs-cli glusterfs-geo-replication
glusterfs-geo-replication-3.7.20-1.el6.x86_64
glusterfs-cli-3.7.20-1.el6.x86_64
glusterfs-server-3.7.20-1.el6.x86_64

2.3 配置glusterfs

2.3.1 查看glusterfs版本信息

[root@mystorage01 ~]# which glusterfs
/usr/sbin/glusterfs
[root@mystorage01 ~]# glusterfs -V
glusterfs 3.7.20 built on Jan 30 2017 15:39:27
Repository revision: git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2013 Red Hat, Inc. <http://www.redhat.com/>
GlusterFS comes with ABSOLUTELY NO WARRANTY.
It is licensed to you under your choice of the GNU Lesser
General Public License, version 3 or any later version (LGPLv3
or later), or the GNU General Public License, version 2 (GPLv2),
in all cases as published by the Free Software Foundation.

2.3.2 啓動服務並添加開機自啓動

[root@mystorage01 ~]# /etc/init.d/glusterd status   #查看服務狀態
glusterd is stopped
[root@mystorage01 ~]# /etc/init.d/glusterd start    #啓動
Starting glusterd:                                         [  OK  ]
[root@mystorage01 ~]# /etc/init.d/glusterd status   #查看服務狀態
glusterd (pid  1826) is running...
[root@mystorage01 ~]# chkconfig glusterd on         #添加開機啓動

2.3.3 存儲主機加入信任存儲池

虛擬機添加信任存儲池
特別提示:只須要讓一個虛擬機進行添加操做便可。但本身並不須要添加信任本身

#確保全部的虛擬機的glusterd服務都處於開啓狀態,而後執行以下操做
[root@mystorage01 ~]# gluster peer probe glusterfs02
peer probe: success. 
[root@mystorage01 ~]# gluster peer probe glusterfs03
peer probe: success. 
[root@mystorage01 ~]# gluster peer probe glusterfs04
peer probe: success.

2.3.4 查看虛擬機信任狀態添加結果

[root@mystorage01 ~]# gluster peer status
Number of Peers: 3

Hostname: glusterfs02
Uuid: ab7d1773-9e64-4b3b-bdaf-b03d7522b669
State: Peer in Cluster (Connected)

Hostname: glusterfs03
Uuid: f050b487-32c0-4aad-8d16-bb139e8927a8
State: Peer in Cluster (Connected)

Hostname: glusterfs04
Uuid: 4c26a391-636c-4c25-bae8-c9181c26ca2f
State: Peer in Cluster (Connected)

這裏能夠查看每臺虛擬機的信任狀態,他們此時彼此都應該已經互有信任記錄了

2.3.5 配置前的準備工做

#連接光盤源,安裝xfs支持包(Centos7已經再也不須要安裝)
#四臺服務器都要安裝
[root@mystorage01 ~]# yum -y install xfsprogs
[root@mystorage01 ~]# rpm -qa xfsprogs
xfsprogs-3.1.1-14.el6.x86_64

在企業裏咱們還須要分區而後才能進行格式化。可是咱們這裏就省略了,咱們直接格式化每臺虛擬機的那塊10G硬盤

[root@mystorage01 ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0 Sep 28 02:05 /dev/sda
brw-rw----. 1 root disk 8,  1 Sep 28 02:05 /dev/sda1
brw-rw----. 1 root disk 8,  2 Sep 28 02:05 /dev/sda2
brw-rw----. 1 root disk 8, 16 Sep 28 02:05 /dev/sdb
brw-rw----. 1 root disk 8, 32 Sep 28 02:05 /dev/sdc

[root@mystorage01 ~]# mkfs.ext4 /dev/sdb
mke2fs 1.41.12 (17-May-2010)
/dev/sdb is entire device, not just one partition!
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
655360 inodes, 2621440 blocks
131072 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2684354560
80 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632

Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

在四臺機器上執行mkdir -p /gluster/brick1 創建掛在塊設備的目錄
掛載磁盤到文件系統(4臺都作,步驟相同)

[root@mystorage01 ~]# mkdir -p /gluster/brick1
[root@mystorage01 ~]# mount /dev/sdb /gluster/brick1
[root@mystorage01 ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/vg_yangwenbo-lv_root   18G  992M   16G   6% /
tmpfs                             491M     0  491M   0% /dev/shm
/dev/sda1                         485M   33M  427M   8% /boot
/dev/sr0                          4.2G  4.2G     0 100% /media/cdrom
/dev/sdb                          9.9G  151M  9.2G   2% /gluster/brick1

繼續重複以上步驟,將第二塊磁盤sdc格式化,並掛載到每臺虛擬機的/gluster/brick2上

4臺虛擬機加入開機自動掛載

[root@mystorage01 ~]# echo "mount /dev/sdb /gluster/brick1" >> /etc/rc.local
[root@mystorage01 ~]# echo "mount /dev/sdc /gluster/brick2" >> /etc/rc.local
[root@mystorage01 ~]# tail -2 /etc/rc.local
mount /dev/sdb /gluster/brick1
mount /dev/sdc /gluster/brick2

2.3.6 建立volume分佈式卷

基本卷:

  • 分佈式卷(Distributed)
  • 複製卷(Replicated)
  • 條帶式卷(Striped)

複合卷:

  • 分佈式複製卷(Distributed Replicated):
  • 分佈式條帶卷(Distributed Striped):
  • 複製條帶卷(Replicated Striped):
  • 分佈式複製條帶卷(Distributed Replicated Striped)
#建立分佈式卷(在glusterfs01上操做)
[root@mystorage01 ~]# gluster volume create gs1 glusterfs01:/gluster/brick1 glusterfs02:/gluster/brick1 force 
volume create: gs1: failed: Volume gs1 already exists

#啓動建立的卷(在glusterfs01上操做)
[root@mystorage01 ~]# gluster volume start gs1
volume start: gs1: success

#而後咱們發現4臺虛擬機都能看到以下信息(在任意虛擬機上操做)
[root@mystorage02 ~]# gluster volume info
 
Volume Name: gs1     #卷名
Type: Distribute     #分佈式
Volume ID: f1a2933a-311c-4e66-9fb7-0bcb148b53ed     #ID號
Status: Started         #啓動狀態
Number of Bricks: 2     #一共兩個塊設備
Transport-type: tcp     #tcp的鏈接方式
Bricks:                 #塊信息
Brick1: glusterfs01:/gluster/brick1
Brick2: glusterfs02:/gluster/brick1
Options Reconfigured:
performance.readdir-ahead: on

2.3.7 volume的兩種掛載方式

(1)以glusterfs方式掛載

#掛載捲到目錄(在glusterfs01上操做)

[root@mystorage01 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt     #將本地的分佈式卷gs01掛載到/mnt目錄下
[root@mystorage01 ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/vg_yangwenbo-lv_root   18G  992M   16G   6% /
tmpfs                             491M     0  491M   0% /dev/shm
/dev/sda1                         485M   33M  427M   8% /boot
/dev/sr0                          4.2G  4.2G     0 100% /media/cdrom
/dev/sdb                          9.9G  151M  9.2G   2% /gluster/brick1
/dev/sdc                          9.9G  151M  9.2G   2% /gluster/brick2
127.0.0.1:/gs1                     20G  302M   19G   2% /mnt     #掛載成功,咱們看到磁盤空間已經整合
#在掛載好的/mnt目錄裏建立實驗文件(在glusterfs01上操做)
[root@mystorage01 ~]# touch /mnt/{1..5}
[root@mystorage01 ~]# ls /mnt/
1  2  3  4  5  lost+found
#在其餘虛擬機上掛載分佈式卷gs1,查看同步掛載結果
[root@mystorage02 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt
[root@mystorage02 ~]# ls /mnt/
1  2  3  4  5  lost+found

[root@mystorage03 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt
[root@mystorage03 ~]# ls /mnt/
1  2  3  4  5  lost+found

[root@mystorage04 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt
[root@mystorage04 ~]# ls /mnt/
1  2  3  4  5  lost+found

(2)以NFS方式進行掛載

在掛載以前咱們先來看一下如何打開glusterfs的NFS掛載方式

[root@mystorage01 ~]# gluster volume status    #查看分佈式卷的狀態
Status of volume: gs1
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick glusterfs01:/gluster/brick1           49152     0          Y       2202 
Brick glusterfs02:/gluster/brick1           49152     0          Y       1769 
NFS Server on localhost                     N/A       N/A        N       N/A     #本地分佈式卷NFS掛載未開啓
NFS Server on glusterfs03                   N/A       N/A        N       N/A  
NFS Server on glusterfs04                   N/A       N/A        N       N/A  
NFS Server on glusterfs02                   N/A       N/A        N       N/A  
 
Task Status of Volume gs1
------------------------------------------------------------------------------
There are no active volume tasks

以上結果是是什麼緣由呢?
若是NFS Server的掛載端口顯示N/A表示未開啓掛載功能,這是因爲要先進行nfs掛載是須要裝兩個nfs的軟件包的rpcbind和nfs-utils
固然就算系統裝了這兩個軟件包,那麼咱們也須要開啓rpcbind服務,而後在重啓glusterfs服務纔可以進行nfs掛載的操做。
如今咱們就來開啓glusterfs01的nfs掛載功能,以下:

#在glusterfs01上執行以下操做
[root@mystorage01 ~]# rpm -qa nfs-utils
nfs-utils-1.2.3-75.el6_9.x86_64    #查看是否安裝nfs-utils
[root@mystorage01 ~]# rpm -qa rpcbind
rpcbind-0.2.0-13.el6_9.1.x86_64    #查看是否安裝rpcbind

[root@mystorage01 ~]# /etc/init.d/rpcbind status    #查看rpcbind服務狀態
rpcbind is stopped
[root@mystorage01 ~]# /etc/init.d/rpcbind start     #開啓rpcbind服務
Starting rpcbind:                                          [  OK  ]
[root@mystorage01 ~]# /etc/init.d/glusterd restart  #重啓glusterd服務
Stopping glusterd:                                         [  OK  ]
Starting glusterd:                                         [  OK  ]
[root@mystorage01 ~]# gluster volume status
Status of volume: gs1
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick glusterfs01:/gluster/brick1           49152     0          Y       2202 
Brick glusterfs02:/gluster/brick1           49152     0          Y       1769 
NFS Server on localhost                     2049      0          Y       3280     #出現具體的端口就代表開啓了
NFS Server on glusterfs02                   N/A       N/A        N       N/A  
NFS Server on glusterfs04                   N/A       N/A        N       N/A  
NFS Server on glusterfs03                   N/A       N/A        N       N/A  
 
Task Status of Volume gs1
------------------------------------------------------------------------------
There are no active volume tasks
#依次在其它三臺服務器上操做便可
[root@mystorage01 ~]# gluster volume status
Status of volume: gs1
Gluster process                             TCP Port  RDMA Port  Online  Pid
------------------------------------------------------------------------------
Brick glusterfs01:/gluster/brick1           49152     0          Y       2202 
Brick glusterfs02:/gluster/brick1           49152     0          Y       1769 
NFS Server on localhost                     2049      0          Y       3280 
NFS Server on glusterfs02                   2049      0          Y       2125 
NFS Server on glusterfs04                   2049      0          Y       2063 
NFS Server on glusterfs03                   2049      0          Y       2057 
 
Task Status of Volume gs1
------------------------------------------------------------------------------
There are no active volume tasks

接下來,咱們嘗試在準備好的第五臺虛擬機WebServer上進行nfs方式的掛載

#在Webserver上進行以下操做
[root@WebServer ~]# yum -y install nfs-utils
[root@WebServer ~]# rpm -qa nfs-utils
nfs-utils-1.2.3-39.el6.x86_64
[root@WebServer ~]# mount -o nolock -t nfs 192.168.200.151:/gs1 /mnt
[root@WebServer ~]# ls /mnt
1  2  3  4  5  lost+found       #掛載成功

[root@WebServer ~]# touch /mnt/benet      #建立文件測試
[root@WebServer ~]# ls /mnt
1  2  3  4  5  benet  lost+found

#在glusterfs任意虛擬機上進行以下操做
[root@glusterfs04 ~]# mount -t glusterfs 127.0.0.1:/gs1 /mnt   #若是以前已掛載,請忽略此步
[root@mystorage04 ~]# ls /mnt
1  2  3  4  5  benet  lost+found          #數據已經同步

2.3.8 建立分佈式複製卷

#在任意一臺gluster虛擬機上進行以下操做
[root@mystorage01 ~]# gluster volume create gs2 replica 2 glusterfs03:/gluster/brick1 glusterfs04:/gluster/brick1 force
volume create: gs2: success: please start the volume to access data
[root@mystorage01 ~]# gluster volume info gs2
 
Volume Name: gs2
Type: Replicate                 #複製卷
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Created
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1
Brick2: glusterfs04:/gluster/brick1
Options Reconfigured:           
performance.readdir-ahead: on
[root@mystorage01 ~]# gluster volume start gs2       #啓動卷
volume start: gs2: failed: Volume gs2 already started

2.3.9 建立分佈式條帶卷

[root@mystorage01 ~]# gluster volume create gs3 stripe 2 glusterfs01:/gluster/brick2 glusterfs02:/gluster/brick2 force
volume create: gs3: success: please start the volume to access data
[root@mystorage01 ~]# gluster volume info gs3
 
Volume Name: gs3
Type: Stripe                     #條帶卷
Volume ID: 66edb2a5-dccb-42f5-b951-9360082080f2
Status: Created
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs01:/gluster/brick2
Brick2: glusterfs02:/gluster/brick2
Options Reconfigured:
performance.readdir-ahead: on    
[root@mystorage01 ~]# gluster volume start gs3       #啓動卷
volume start: gs3: failed: Volume gs3 already started

3.進行卷的數據寫入測試

在WebServer服務器掛載建立的三種類型卷gs1,gs2,gs3,進行數據寫入測試

3.1 分佈式卷gs1的數據寫入測試

#在WebServer上進行數據寫入操做
[root@WebServer ~]# mount -o nolock -t nfs 192.168.200.150:/gs1 /mnt
[root@WebServer ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/vg_yangwenbo-lv_root   18G  963M   16G   6% /
tmpfs                             491M     0  491M   0% /dev/shm
/dev/sda1                         485M   33M  427M   8% /boot
/dev/sr0                          4.2G  4.2G     0 100% /media/cdrom
192.168.200.151:/gs1               20G  301M   19G   2% /mnt

[root@WebServer ~]# ls /mnt/
[root@WebServer ~]# touch /mnt/{1..10}
[root@WebServer ~]# ls /mnt/
1  10  2  3  4  5  6  7  8  9
#在glusterfs01和glusterfs02上進行查看(看看數據到底寫入了哪一個盤)
[root@glusterfs01 ~]# ls /gluster/brick1
1  5  7  8  9
[root@glusterfs02 ~]# ls /gluster/brick1
10  2  3  4  6

結論:分佈式卷的數據存儲方式是將數據平均寫入到每一個整合的磁盤中,相似於raid0,寫入速度快,但這樣磁盤一旦損壞沒有糾錯能力。

3.2 分佈式複製卷gs2的數據寫入測試

#在WebServer上進行數據寫入操做
[root@WebServer ~]# mount -o nolock -t nfs 192.168.200.151:/gs2 /mnt
[root@WebServer ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/vg_yangwenbo-lv_root   18G  963M   16G   6% /
tmpfs                             491M     0  491M   0% /dev/shm
/dev/sda1                         485M   33M  427M   8% /boot
/dev/sr0                          4.2G  4.2G     0 100% /media/cdrom
192.168.200.151:/gs2              9.9G  151M  9.2G   2% /mnt
[root@WebServer ~]# touch /mnt/{1..10}
[root@WebServer ~]# ls /mnt/
1  10  2  3  4  5  6  7  8  9  lost+found
#在glusterfs03和glusterfs04上進行查看(看看數據到底寫入了哪一個盤)
[root@mystorage03 ~]# ls /gluster/brick1
1  10  2  3  4  5  6  7  8  9  lost+found
[root@mystorage04 ~]# ls /gluster/brick1
1  10  2  3  4  5  6  7  8  9  lost+found

結論:分佈式複製卷的數據存儲方式爲,每一個整合的磁盤中都寫入一樣的數據內容,相似於raid1,數據很是安全,讀取性能高,佔磁盤容量。

3.3 分佈式條帶卷gs3的數據寫入測試

#在WebServer上進行數據寫入操做
[root@WebServer ~]# mount -o nolock -t nfs 192.168.200.151:/gs3 /mnt
[root@WebServer ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/vg_yangwenbo-lv_root   18G  963M   16G   6% /
tmpfs                             491M     0  491M   0% /dev/shm
/dev/sda1                         485M   33M  427M   8% /boot
/dev/sr0                          4.2G  4.2G     0 100% /media/cdrom
192.168.200.151:/gs3               20G  301M   19G   2% /mnt
[root@WebServer ~]# dd if=/dev/zero of=/root/test bs=1024 count=262144
262144+0 records in
262144+0 records out
268435456 bytes (268 MB) copied, 12.1792 s, 22.0 MB/s
[root@WebServer ~]# du -sh test
256M    test
[root@WebServer ~]# cp test /mnt/       #複製到/mnt目錄下
[root@WebServer ~]# ls /mnt
lost+found  test
[root@WebServer ~]# du -sh /mnt/test    #查看大小爲256M
256M    /mnt/test
#在glusterfs01和glusterfs02上進行查看(看看數據究竟是怎麼存的)
[root@mystorage01 ~]# du -sh /gluster/brick2/test 
129M    /gluster/brick2/test
[root@mystorage02 ~]# du -sh /gluster/brick2/test 
129M    /gluster/brick2/test

結論:咱們發現分佈式條帶卷,是將數據的容量平均分配到了每一個整合的磁盤節點上。大幅提升大文件的併發讀訪問。

4. 存儲卷中brick塊設備的擴容

4.1 分佈式複製卷的擴容

[root@mystorage01 ~]# gluster volume add-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force    #添加兩個塊設備
volume add-brick: success

[root@mystorage01 ~]# gluster volume info gs2
 
Volume Name: gs2
Type: Distributed-Replicate
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Started
Number of Bricks: 2 x 2 = 4    #已經擴容
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1
Brick2: glusterfs04:/gluster/brick1
Brick3: glusterfs03:/gluster/brick2
Brick4: glusterfs04:/gluster/brick2
Options Reconfigured:
performance.readdir-ahead: on

特別提示:

  • 對分佈式複製卷和分佈式條帶捲進行擴容時,要特別注意,若是建立卷之初的時候選擇的是replica 2 或者stripe 2。那麼擴容時,就必須一次性擴容兩個或兩個的倍數的塊設備。
  • 例如你給一個分佈式複製卷的replica爲2,你在增長bricks的時候數量必須爲2,4,6,8等。

4.2 查看擴容後的容量並進行寫入測試

#在WebServer上掛載gs2並查看掛載目錄的容量
[root@WebServer ~]# mount -o nolock -t nfs 192.168.200.151:/gs2 /mnt
[root@WebServer ~]# df -h
Filesystem                        Size  Used Avail Use% Mounted on
/dev/mapper/vg_yangwenbo-lv_root   18G  1.2G   16G   8% /
tmpfs                             491M     0  491M   0% /dev/shm
/dev/sda1                         485M   33M  427M   8% /boot
/dev/sr0                          4.2G  4.2G     0 100% /media/cdrom
192.168.200.151:/gs2               20G  301M   19G   2% /mnt
#在WebServer上進行數據寫入操做
[root@WebServer ~]# ls /mnt/
lost+found
[root@WebServer ~]# touch /mnt/{11..20}
[root@WebServer ~]# ls /mnt/
11  12  13  14  15  16  17  18  19  20  lost+found

#在glusterfs03和glusterfs04上查看數據存到哪裏去了
[root@mystorage03 ~]# gluster volume info gs2
 
Volume Name: gs2
Type: Distributed-Replicate
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Started
Number of Bricks: 2 x 2 = 4
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1      #組成gs2的塊設備就在03和04上
Brick2: glusterfs04:/gluster/brick1      #組成gs2的塊設備就在03和04上
Brick3: glusterfs03:/gluster/brick2
Brick4: glusterfs04:/gluster/brick2
Options Reconfigured:
performance.readdir-ahead: on
[root@mystorage03 ~]# ls /gluster/brick1
11  12  13  14  15  16  17  18  19  20  lost+found
[root@mystorage03 ~]# ls /gluster/brick2
lost+found      #什麼都沒有

[root@mystorage04 ~]# ls /gluster/brick1
11  12  13  14  15  16  17  18  19  20  lost+found
[root@mystorage04 ~]# ls /gluster/brick2
lost+found      #什麼都沒有

過對擴容的gs2進行寫入測試,咱們發現數據並無被寫入到新加入的塊設備中,這是爲甚什麼?
這是由於,爲了數據的安全,新擴容塊設備的卷,默認必須先作一次磁盤平衡(塊設備同步),如此才能正常開始使用。

4.3 進行磁盤存儲的平衡

注意:平衡佈局是頗有必要的,由於佈局結構是靜態的,當新的bricks加入現有卷,新建立的文件會分佈到舊的bricks中,因此須要平衡佈局結構,使新加入的bricks生效。佈局平衡只是使新佈局生效,並不會在新的佈局移動老的數據,若是你想在新佈局生效後,從新平衡卷中的數據,還須要對卷中的數據進行平衡。

#對gs2進行磁盤存儲平衡
[root@mystorage01 ~]# gluster volume rebalance gs2 start
volume rebalance: gs2: success: Rebalance on gs2 has been started successfully. Use rebalance status command to check status of the rebalance process.
ID: 1ec8578b-fc67-4ada-abec-72830aa8201f

#檢查gs2塊設備磁盤平衡結果
[root@mystorage03 ~]# ls /gluster/brick1
12  14  15  16  17  lost+found
[root@mystorage03 ~]# ls /gluster/brick2
11  13  18  19  20  lost+found

[root@mystorage04 ~]# ls /gluster/brick1
12  14  15  16  17  lost+found
[root@mystorage04 ~]# ls /gluster/brick2
11  13  18  19  20  lost+found

執行磁盤存儲平衡之後,咱們發現數據被複製成了4份在4個塊設備中。

5. 存儲卷的縮減與刪除

5.1 對存儲卷中的brick進行縮減

注意:你可能想在線縮小卷的大小,例如:當硬件損壞或者網絡故障的時候,你可能想在卷中移除相關的bricks。注意,當你移除bricks的時候,你在gluster的掛載點將不能繼續訪問是數據,只有配置文件中的信息移除後你才能繼續訪問bricks的數據。當移除分佈式複製卷或者分佈式條帶卷的時候,移除的bricks數目必須是replica或者stripe的倍數。例如:一個分佈式條帶卷的stripe是2,當你移除bricks的時候必須是2,4,6,8等。

#先中止卷gs2
[root@mystorage01 ~]# gluster volume stop gs2
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: gs2: success

#而後移除卷,由於是複製卷且replica爲2,所以每次移除必須是2的倍數
[root@mystorage01 ~]# gluster volume remove-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force
Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y
volume remove-brick commit force: success

#咱們發現gs2的卷已經被移除
[root@mystorage01 ~]# gluster volume info gs2
 
Volume Name: gs2
Type: Replicate
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Stopped
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1
Brick2: glusterfs04:/gluster/brick1
Options Reconfigured:
performance.readdir-ahead: on

#從新啓動卷gs2
[root@mystorage01 ~]# gluster volume start gs2
volume start: gs2: success

5.2 對存儲捲進行刪除

#中止卷gs1
[root@mystorage01 ~]# gluster volume stop gs1
Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
volume stop: gs1: success

#刪除卷gs1
[root@mystorage01 ~]# gluster volume delete gs1
Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
volume delete: gs1: success

#查看卷信息,發現gs1已經沒了
[root@mystorage01 ~]# gluster volume info
 
Volume Name: gs2
Type: Replicate
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1
Brick2: glusterfs04:/gluster/brick1
Options Reconfigured:
performance.readdir-ahead: on
 
Volume Name: gs3
Type: Stripe
Volume ID: 66edb2a5-dccb-42f5-b951-9360082080f2
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs01:/gluster/brick2
Brick2: glusterfs02:/gluster/brick2
Options Reconfigured:
performance.readdir-ahead: on

特別提示:
不管是縮減卷仍是刪除卷,並不會是清除卷中的數據。數據仍舊會保存在對應磁盤上。

6. 構建企業級分佈式存儲

6.1 硬件要求

  • 通常選擇2U的機型,磁盤STAT盤4T,若是I/O要求比較高,能夠採購SSD固態硬盤。爲了充分保證系統的穩定性和性能,要求全部glusterfs服務器硬件配置儘可能一致,尤爲是硬盤數量和大小。機器的RAID卡須要帶電池,緩存越大,性能越好。通常狀況下,建議作RAID10,若是出於空間要求考慮,須要作RAID5,建議最好能有1-2塊硬盤的熱備盤。

6.2 系統要求和分區劃分

  • 系統要求使用CentOS6.x,安裝完成後升級到最新版本,安裝的時候,不要使用LVM,建議/boot分區200M,根分區100G,swap分區和內存同樣大小,剩餘空間給gluster使用,劃分單獨的硬盤空間。系統安裝軟件沒有特殊要求,建議除了開發工具和基本的管理軟件,其餘軟件一概不裝。

6.3 網絡環境

網絡要求所有千兆環境,gluster服務器至少有2塊網卡,1塊網卡綁定供gluster使用,剩餘一塊分配管理網絡ip,用於系統管理。若是有條件購買萬兆交換機,服務器配置萬兆網卡,存儲性能會更好。網絡方面若是安全性要求高,能夠多網卡綁定。

6.4 服務器擺放分佈

服務器主備機器要放在不一樣的機櫃,鏈接不一樣的交換機,即便一個機櫃出現問題,還有一份數據正常訪問。

image.png-287.9kB

image.png-225.9kB

6.5 構建高性能,高可用存儲

通常在企業中,採用的是分佈式複製卷,由於有數據備份,數據相對安全,分佈式條帶卷目前對glusterfs來講沒有徹底成熟,存在必定的是數據安全風險。

6.5.1 開啓防火牆端口

通常在企業應用中Linux防火牆是打開的,開通服務器之間訪問的端口

iptables -I INPUT -p tcp --dport 24007:24011 -j ACCEPT
iptables -I INPUT -p tcp --dport 49152:49162 -j ACCEPT
[root@mystorage01 ~]# cat /etc/glusterfs/glusterd.vol
volume management
    type mgmt/glusterd
    option working-directory /var/lib/glusterd
    option transport-type socket,rdma
    option transport.socket.keepalive-time 10
    option transport.socket.keepalive-interval 2
    option transport.socket.read-fail-log off
    option ping-timeout 0
    option event-threads 1
#   option base-port 49152    #默認端口能夠在這裏改,由於這個端口可能會和企業裏的kvm端口衝突
end-volume

6.5.2 Glusterfs文件系統優化

參數項目 說明 缺省值 合法值
Auth.allow IP訪問受權 *(allow all) IP地址
Cluster.min-free-disk 剩餘磁盤空間閾值 10% 百分比
Cluster.stripe-block-size 條帶大小 128KB 字節
Network.frame-timeout 請求等待時間 1800s 0-1800
Network.ping-timeout 客戶端等待時間 42s 0-42
Nfs.disabled 關閉NFS服務 Off Off\on
Performance.io-thread-count IO線程數 16 0-65
Performance.cache-refresh-timeout 緩存校驗週期 1s 0-61
Performance.cache-size 讀緩存大小 32MB 字節
  • Performance.quick-read:優化讀取小文件的性能
  • Performance.read-ahead:用預讀的方式提升讀取的性能,有利於應用頻繁持續性的訪問文件,當應用完成當前數據塊讀取的時候,下一個數據塊就已經準備好了。
  • Performance.write-behind:寫入數據時,先寫入緩存內,再寫入硬盤內,以提升寫入的性能。
  • Performance.io-cache:緩存已經被讀過的。

調整方法:
Glusster volume set <卷> <參數>

[root@mystorage01 ~]# gluster volume info gs2
 
Volume Name: gs2
Type: Replicate
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1
Brick2: glusterfs04:/gluster/brick1
Options Reconfigured:
performance.readdir-ahead: on
[root@mystorage01 ~]# gluster volume set gs2 performance.read-ahead on
#設置預緩存優化
volume set: success
[root@mystorage01 ~]# gluster volume info gs2
 
Volume Name: gs2
Type: Replicate
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1
Brick2: glusterfs04:/gluster/brick1
Options Reconfigured:
performance.read-ahead: on
performance.readdir-ahead: on     #已經添加上了
[root@mystorage01 ~]# gluster volume set gs2 performance.cache-size 256MB
#設置讀緩存大小
volume set: success
[root@mystorage01 ~]# gluster volume info gs2
 
Volume Name: gs2
Type: Replicate
Volume ID: 29e00864-685e-4bfd-8299-dce52cf2eb16
Status: Started
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: glusterfs03:/gluster/brick1
Brick2: glusterfs04:/gluster/brick1
Options Reconfigured:
performance.cache-size: 256MB    #已經添加上了
performance.read-ahead: on
performance.readdir-ahead: on

6.5.3 監控及平常維護

使用Zabbix自帶模板便可。Cpu,內存,主機存活,磁盤空間,主機運行時間,系統load。平常狀況要查看服務器的監控值,遇到報警要及時處理。

#如下命令在複製卷的場景下才會有

#gluster volume status gs2        查看節點NFS是否在線
(開沒開端口)
#gluster volume heal gs2 full     啓動徹底修復
#gluster volume heal gs2 info     查看須要修復的文件
#gluster volume heal gs2 info healed         查看修復成功的文件
#gluster volume heal gs2 info heal-failed    查看修復失敗文件
#gluster volume heal gs2 info split-brain    查看腦裂的文件
#gluster volume quota gs2 enable      --激活quota功能
#gluster volume quota gs2 disable     --關閉quota功能
#gluster volume quota gs2 limit-usage   /data   10GB --/gs2/data 
目錄限制
#gluster volume quota gs2 list --quota       信息列表
#gluster volume quota gs2 list /data         --限制目錄的quota信息
#gluster volume set gs2 features.quota-timeout 5    --設置信息的超時事實上時間
#gluster volume quota gs2 remove /data      -刪除某個目錄的quota設置

備註:
quota 功能,主要是對掛載點下的某個目錄進行空間限額。如:/mnt/glusterfs/data目錄,而不是對組成卷組的空間進行限制

7. 生產環境遇到常見故障處理

7.1 硬盤故障

由於底層作了raid配置,有硬件故障,直接更換硬盤,會自動同步數據。(raid5)

7.2 一臺主機故障

一臺節點故障的狀況包括如下類型:

  • 物理故障
  • 同時有多塊硬盤故障,形成是數據丟失
  • 系統損壞不可修復

7.3 解決方法:

7.3.1 找一臺徹底同樣的機器,至少要保證硬盤數量和大小一致,安裝系統,配置和故障機一樣的ip,安裝gluster軟件,保證配置同樣,在其餘健康的節點上執行命令gluster peer status,查看故障服務器的uuid

#例如:
[root@glusterfs03 ~]# gluster peer status
Number of Peers: 3
Hostname: glusterfs02
Uuid: 0b52290d-96b0-4b9c-988d-44062735a8a8
State: Peer in Cluster (Connected)
Hostname: glusterfs04
Uuid: a43ac51b-641c-4fc4-be56-f6873423b462
State: Peer in Cluster (Connected)
Hostname: glusterfs01
Uuid: 198f2c7c-1104-4671-8989-b430b77540e9
State: Peer in Cluster (Connected)

7.3.2 修改新加機器的/var/lib/glusterd/glusterd.info和故障機器的同樣

[root@glusterfs04 ~]# cat /var/lib/glusterd/glusterd.info 
UUID=a43ac51b-641c-4fc4-be56-f6873423b462
operating-version=30712

7.3.3 在新機器掛載目錄上執行磁盤故障的操做(任意節點)

[root@glusterfs04 ~]# gluster volume heal gs2 full
Launching heal operation to perform full self heal on volume gs2 has been successful 
Use heal info commands to check status

7.3.4 就會自動開始同步,可是同步的時候會影響整個系統的性能,能夠查看狀態

[root@glusterfs04 ~]# gluster volume heal gs2 info
Brick glusterfs03:/gluster/brick1
Status: Connected
Number of entries: 0
Brick glusterfs04:/gluster/brick1
Status: Connected
Number of entries: 0
相關文章
相關標籤/搜索