GlusterFS分布式存儲系統


一,分布式文件系統理論基礎

 

1.1 分布式文件系統出現

計算機通過文件系統管理,存儲數據,而現在數據信息爆炸的時代中人們可以獲取的數據成指數倍的增長,單純通過增加硬盤個數來擴展計算機文件系統的存儲容量的方式,已經不能滿足目前的需求。

分布式文件系統可以有效解決數據的存儲和管理難題,將固定於某個地點的某個文件系統,擴展到任意多個地點/多個文件系統,眾多的節點組成一個文件系統網絡。每個節點可以分布在不同的地點,通過網絡進行節點間的通信和數據傳輸。人們在使用分布式文件系統時,無需關心數據是存儲在哪個節點上,或者是從哪個節點從獲取的,只需要像使用本地文件系統一樣管理和存儲文件系統中的數據。

 

1.2 典型代表NFS

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

 

(1)節約使用的磁盤空間

客戶端經常使用的數據可以集中存放在一台機器上,並使用NFS發布,那么網絡內部所有計算機可以通過網絡訪問,不必單獨存儲。

 

(2)節約硬件資源

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

 

(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_1ctf2od6k1thm6r91q97n9v19.png-322.2kB

 

1.5 GlusterFS企業主要應用場景

image_1ctf2ontqcea5sg13ci3d58ep1m.png-328.5kB


image_1ctf2p17p1ogr1m5mpml1rsifrk23.png-307kB

理論和實踐上分析,GlusterFS目前主要適用大文件存儲場景,對於小文件尤其是海量小文件(小於1M),存儲效率和訪問性能都表現不佳。海量小文件LOSF問題是工業界和學術界公認的難題,GlusterFS作為通用的分布式文件系統,並沒有對小文件作額外的優化措施(小於1M),性能不好也是可以理解的。

  • Media 
    文檔,圖片,音頻,視頻

  • Shared storage 
    雲存儲,虛擬化存儲,HPC(高性能計算)

  • Big data 
    日志文件,RFID(射頻識別)數據

 

二,部署安裝

 

GlusterFS所有包

鏈接:https://pan.baidu.com/s/1EYmg29G8v-98kCbcHj8DYQ 
提取碼:t6cn

 

2.1 GlusterFS安裝前的准備(四台都需要)

  1. 電腦一台,內存>=4G,可用磁盤空間大於50G
  2. 安裝VMWARE Workstation虛擬機軟件
  3. 安裝好四台CentOS-6-x86_64(6.2-6.8都可以)的虛擬機
  4. 基本系統:1核CPU+1024M內存+10G硬盤
  5. 網絡選擇:網絡地址轉換(NAT)
  6. 關閉iptables和SELinux
  7. 預裝glusterfs軟件包
描述 IP 主機名 需求
GlusterFS01 192.168.200.69 GlusterFS01 多添加兩塊各10G的sdb和sdc
GlusterFS02 192.168.200.92 GlusterFS02 多添加兩塊各10G的sdb和sdc
GlusterFS03 192.168.200.93 GlusterFS03 多添加兩塊各10G的sdb和sdc
GlusterFS04 192.168.200.94 GlusterFS04 多添加兩塊各10G的sdb和sdc
WebClient 192.168.200.95 WebClient 多添加兩塊各10G的sdb和sdc
 

為了實驗的准確性,請盡量和我用一個版本的Linux操作系統(四台都需要)

並用上文下載鏈接里給的rpm包作為yum源

cat /etc/redhat-release

uname -r

pwd

ls

 
  1. dbench-4.0-12.el6.x86_64.rpm libaio-0.3.107-10.el6.x86_64.rpm
  2. glusterfs-3.7.20-1.el6.x86_64.rpm libevent-1.4.13-4.el6.x86_64.rpm
  3. glusterfs-api-3.7.20-1.el6.x86_64.rpm libgssglue-0.1-11.el6.x86_64.rpm
  4. glusterfs-api-devel-3.7.20-1.el6.x86_64.rpm libntirpc-1.3.1-1.el6.x86_64.rpm
  5. glusterfs-cli-3.7.20-1.el6.x86_64.rpm libntirpc-devel-1.3.1-1.el6.x86_64.rpm
  6. glusterfs-client-xlators-3.7.20-1.el6.x86_64.rpm libtirpc-0.2.1-13.el6_9.x86_64.rpm
  7. glusterfs-coreutils-0.0.1-0.1.git0c86f7f.el6.x86_64.rpm nfs-utils-1.2.3-75.el6_9.x86_64.rpm
  8. glusterfs-coreutils-0.2.0-1.el6_37.x86_64.rpm nfs-utils-lib-1.1.5-13.el6.x86_64.rpm
  9. glusterfs-devel-3.7.20-1.el6.x86_64.rpm python-argparse-1.2.1-2.1.el6.noarch.rpm
  10. glusterfs-extra-xlators-3.7.20-1.el6.x86_64.rpm python-gluster-3.7.20-1.el6.noarch.rpm
  11. glusterfs-fuse-3.7.20-1.el6.x86_64.rpm pyxattr-0.5.0-1.el6.x86_64.rpm
  12. glusterfs-ganesha-3.7.20-1.el6.x86_64.rpm repodata
  13. glusterfs-geo-replication-3.7.20-1.el6.x86_64.rpm rpcbind-0.2.0-13.el6_9.1.x86_64.rpm
  14. glusterfs-libs-3.7.20-1.el6.x86_64.rpm rsync-3.0.6-12.el6.x86_64.rpm
  15. glusterfs-rdma-3.7.20-1.el6.x86_64.rpm userspace-rcu-0.7.16-2.el6.x86_64.rpm
  16. glusterfs-resource-agents-3.7.20-1.el6.noarch.rpm userspace-rcu-0.7.7-1.el6.x86_64.rpm
  17. glusterfs-server-3.7.20-1.el6.x86_64.rpm userspace-rcu-devel-0.7.16-2.el6.x86_64.rpm
  18. keyutils-1.4-5.el6.x86_64.rpm userspace-rcu-devel-0.7.7-1.el6.x86_64.rpm
  19. keyutils-libs-1.4-5.el6.x86_64.rpm

image_1cv4iojp81dh4gn4bj1tj3eu49.png-114.1kB

 

2.2 GlusterFS 安裝

 

2.2.1 修改主機名

 

2.2.2 添加hosts文件實現集群主機之間相互能夠解析(四台都需要)

vim /etc/hosts

 
  1. 192.168.200.69 glusterfs01
  2. 192.168.200.92 glusterfs02
  3. 192.168.200.93 glusterfs03
  4. 192.168.200.94 glusterfs04

cat /etc/hosts

scp /etc/hosts 192.168.200.92:/etc/

scp /etc/hosts 192.168.200.93:/etc/

scp /etc/hosts 192.168.200.94:/etc/

image_1cv4ird8ombi1inre721er1nu2m.png-72.5kB

 

2.2.3 關閉selinux和防火牆(四台都需要)

service iptables stop

setenforce 0

image_1cv4irvo11q36ghe12h11e6g1dee13.png-13.3kB

 

2.2.4 利用教程附帶的rpm軟件包組,充當本地定制化yum源(四台都需要)

cd /etc/yum.repos.d

vim /etc/yum.repos.d/CentOS-Media.repo

tail -15 CentOS-Media.repo

 
  1. [c6-media]
  2. name=CentOS-$releasever - Media
  3. baseurl=file:///media/CentOS/
  4. file:///media/cdrom/
  5. file:///media/cdrecorder/
  6. gpgcheck=1
  7. enabled=0
  8. gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
  9. [rpm]
  10. name=rpm
  11. baseurl=file:///root/rpm
  12. gpgcheck=0
  13. enabled=1

yum -y install glusterfs-server glusterfs-cli glusterfs-geo-replication 
如果安裝時候有沖突,把沖突的軟件包卸載了就可以 
rpm -qa | grep 沖突的軟件包 
rpm -e 沖突的軟件包 --nodeps

which glusterfs

image_1cv4jg2m01sln1cos1o6d7eahl51g.png-103.5kB


image_1cv4jhv4b1d2a1oq712k9er5ic31t.png-129.4kB

 

2.3 配置glusterfs

 

2.3.1 查看glusterfs版本信息

which glusterfs

glusterfs -V

image_1cv4jmh8b9qo9hjplt1ndn1caj2a.png-42kB

 

2.3.2 啟動服務(四台都需要)

/etc/init.d/glusterd status --->查看服務狀態

/etc/init.d/glusterd start --->啟動

/etc/init.d/glusterd status

chkconfig glusterd on --->添加開機啟動

chkconfig glusterd --list

image_1cv4jvmdha565h51b8l8otd0k2n.png-33.8kB

 

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

虛擬機添加信任存儲池 
特別提示:只需要讓一個虛擬機進行添加操作即可。但自己並不需要添加信任自己

確保所有的虛擬機的glusterd服務都處於開啟狀態,然后執行如下操作

gluster peer probe glusterfs02

gluster peer probe glusterfs03

gluster peer probe glusterfs04

image_1cv4kf1am1da41j5l1r0h150cr4834.png-21kB

 

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

gluster peer status

可以查看每台虛擬機的信任狀態,他們此時彼此都應該已經互有信任記錄了

image_1cv4kgbj01b201dk1mlrpip133b3h.png-36.8kB


image_1cv4kii9m106k18cl15f4cmq17n83u.png-36.9kB


image_1cv4kiulm15b01rkh15uktlp2dh4r.png-37.5kB


image_1cv4kj79h1i313p3ihb19531amu58.png-37kB

 

2.3.5 配置前的准備工作

 

xfsprogs格式化(工作中也許會用到)

鏈接光盤源,安裝xfs支持包(Centos7已經不再需要安裝) 
所有都要裝

yum -y install xfsprogs

在企業里我們還需要分區然后才能進行格式化。但是我們這里就省略了,我們直接格式化每台虛擬機的那塊10G硬盤

 

ext4格式化sdb(四台都需要)

ll /dev/sd*

mkfs.ext4 /dev/sdb

image_1cv4l5lb31roo193r1loe1bthpd55l.png-97.3kB

 

建立掛在塊設備的目錄並把sdb磁盤掛載到此目錄上

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

mkdir -p /gluster/brick1

mount /dev/sdb /gluster/brick1

df -h

image_1cv4lg8c01qb5n5fcum1orj10gp62.png-37.1kB

 

ext4格式化sdc(四台都需要)

ll /dev/sd*

mkfs.ext4 /dev/sdc

image_1cv4litdibt91m4funs1uur10is6f.png-97.4kB

 

建立掛在塊設備的目錄並把sdc磁盤掛載到此目錄上

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

mkdir -p /gluster/brick2

mount /dev/sdc /gluster/brick2

df -h

image_1cv4lmnaf12qm1ltorei7g31lc06s.png-40.9kB

 

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

echo "mount /dev/sdb /gluster/brick1" >> /etc/rc.local

echo "mount /dev/sdc /gluster/brick2" >> /etc/rc.local

tail -2 /etc/rc.local

image_1cv4m14cls4q16tm1ipd34q1fgh79.png-28.7kB

 

2.3.6 創建volume分布式卷

  • 基本卷: 
    • 分布式卷(Distributed): --->相當於raid0讀寫速度
    • 復制卷(Replicated): --->相當於raid1
    • 條帶式卷(Striped): --->針對大文件才會用
  • 復合卷: --->通常工作中都是用復合卷 
    • 分布式復制卷(Distributed Replicated): --->相當於raid1+0
    • 分布式條帶卷(Distributed Striped): --->大文件
    • 復制條帶卷(Replicated Striped):
    • 分布式復制條帶卷(Distributed Replicated Striped): --->三種方式總和
 

創建分布式卷(在glusterfs01上操作)

gluster volume create gs1 glusterfs01:/gluster/brick1 glusterfs02:/gluster/brick1 force

image_1cv4n7hob1prvg411h2ltkklc7m.png-16.1kB

 

啟動創建的卷(在glusterfs01上操作)

gluster volume start gs1

image_1cv4n8u2dpsvnud16o5mne15qn93.png-12kB

 

然后我們發現4台虛擬機都能看到如下信息(在任意虛擬機上操作)

gluster volume info

 
  1. Volume Name: gs1 #卷名
  2. Type: Distribute #分布式
  3. Volume ID: 0f0adf7a-3b8f-4016-ac72-83f633e90fac #ID號
  4. Status: Started #啟動狀態
  5. Number of Bricks: 2 #一共兩個塊設備
  6. Transport-type: tcp #tcp的連接方式
  7. Bricks: #塊信息
  8. Brick1: glusterfs01:/gluster/brick1
  9. Brick2: glusterfs02:/gluster/brick1
  10. Options Reconfigured:
  11. performance.readdir-ahead: on

image_1cv4n9bu2cn91vl68u31teook9g.png-32.9kB

 

2.3.7 volume的兩種掛載方式

 

(1)以glusterfs方式掛載

 

掛載卷到/mnt目錄下並查看(在glusterfs01上操作)

mount -t glusterfs 127.0.0.1:/gs1 /mnt 
-t參數是指定掛載類型

掛載成功后,我們看到磁盤空間已經整合

image_1cv4nareesq818v5s4a12mh1qm39t.png-40.2kB

 

在掛載好的/mnt目錄里創建實驗文件(在glusterfs01上操作)

touch /mnt/{1..5}

ls /mnt

image_1cv4nc63u15cgbaa1mnhj3h1um9aa.png-15.6kB

 

在其他虛擬機上掛載分布式卷gs1,查看同步掛載結果

mount -t glusterfs 127.0.0.1:/gs1 /mnt

ls /mnt

image_1cv4nd1tbog1kf9br31a29166lan.png-17.5kB

 

在glusterfs01和02上查詢實驗文件結果

ls /gluster/brick1

image_1cv4nea6t9ugcdffh69fv7lbb4.png-41.9kB


image_1cv4nenls877pfnope151u22rbh.png-41.1kB

 

(2)以NFS方式進行掛載

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

 

在glusterfs01上執行如下操作

gluster volume status --->查看分布式卷的狀態

image_1cv4ni03q2rj13kk1flt46t1obfbu.png-42.1kB

以上結果是是什么原因呢?

如果NFS Server的掛載端口顯示N/A表示未開啟掛載功能,這是由於要先進行nfs掛載是需要裝兩個nfs的軟件包的rpcbind和nfs-utils

當然就算系統裝了這兩個軟件包,那么我們也需要開啟rpcbind服務,然后在重啟glusterfs服務才能夠進行nfs掛載的操作。

 

開啟glusterfs01的nfs掛載功能

rpm -qa nfs-utils rpcbind #查看是否安裝nfs-utils rpcbind

/etc/init.d/rpcbind status #查看rpcbind服務狀態

/etc/init.d/rpcbind start #開啟rpcbind服務

/etc/init.d/glusterd stop #停止glusterd服務

/etc/init.d/glusterd start #開啟glusterd服務

gluster volume status #這里需要等幾秒再查看,就會發現nfs掛載方式開啟了

image_1cv4oso5v1jgfadca4pkplifhcb.png-76.6kB

 

在WebServer服務器上進行nfs方式的掛載

rpm -qa nfs-utils #查看nfs-utils是否安裝

yum -y install nfs-utils

mount -t nfs 192.168.200.69:/gs1 /mnt #以nfs方式遠程掛載分布式卷

 
  1. mount.nfs: rpc.statd is not running but is required for remote locking.
  2. mount.nfs: Either use '-o nolock' to keep locks local, or start statd.
  3. mount.nfs: an incorrect mount option was specified #根據提示我們加上-o nolock參數

mount -o nolock -t nfs 192.168.200.69:/gs1 /mnt

ls /mnt #掛載成功

df -hT

image_1cv4p23c21q4n1bn11qla1hsm1o3co.png-145.1kB

 

2.3.8 創建分布式復制卷

 

在任意一台gluster虛擬機上進行如下操作

gluster volume create gs2 replica 2 glusterfs03:/gluster/brick1 glusterfs04:/gluster/brick1 force

gluster volume start gs2 #啟動卷

gluster volume info gs2

 
  1. Volume Name: gs2
  2. Type: Replicate #復制卷
  3. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8
  4. Status: Created
  5. Number of Bricks: 1 x 2 = 2
  6. Transport-type: tcp
  7. Bricks:
  8. Brick1: glusterfs03:/gluster/brick1
  9. Brick2: glusterfs04:/gluster/brick1
  10. Options Reconfigured:
  11. performance.readdir-ahead: on

image_1cv4pjpne1ukro0r1skb16kng0adl.png-55kB

 

2.3.9 創建分布式條帶卷

gluster volume create gs3 stripe 2 glusterfs01:/gluster/brick2 glusterfs02:/gluster/brick2 force

gluster volume start gs3 #啟動卷

gluster volume info gs3

 
  1. Volume Name: gs3
  2. Type: Stripe #條帶卷
  3. Volume ID: 6d2e27c7-f5a1-4473-9df8-a7261851a2ed
  4. Status: Created
  5. Number of Bricks: 1 x 2 = 2
  6. Transport-type: tcp
  7. Bricks:
  8. Brick1: glusterfs01:/gluster/brick2
  9. Brick2: glusterfs02:/gluster/brick2
  10. Options Reconfigured:
  11. performance.readdir-ahead: on

image_1cv4pl9ibc56kthqbf1961dqle2.png-54.1kB

 

三,進行卷的數據寫入測試

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


gs1

image_1cv4qouier5a15932qtu7tt24j0.png-37kB


gs2

image_1cv4qq7qal6e1kr0s81l82u30k6.png-37.3kB


gs3

image_1cv4qrdh612lr1lfd9je1kgu1jf3kj.png-37.3kB

 

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

 

在WebServer上進行數據寫入操作

mount -o nolock -t nfs 192.168.200.69:gs1 /mnt

df -h

touch /mnt/{1..10}

ls /mnt/

image_1cv4qfepn1j3f16b11r2pl6ur3aev.png-43.9kB

 

在glusterfs01和glusterfs02上進行查看(看看數據到底寫入了哪個盤)

ls /gluster/brick1

image_1cv4qhatrmc418ci1du9o9vdd2gf.png-13.8kB


image_1cv4qhkuc1dtgaoq1ktk10d11srbgs.png-14.2kB

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

 

3.2 分布式復制卷gs2的數據寫入測試

 

在WebServer上進行數據寫入操作

mount -o nolock -t nfs 192.168.200.69:gs2 /mnt

df -h

ls /mnt

touch /mnt/{1..10}

ls /mnt

image_1cv4qmks2u9qb9d1m5fi0d1fpihp.png-52kB

 

在glusterfs03和glusterfs04上進行查看(看看數據到底寫入了哪個盤)

ls /gluster/brick1

image_1cv4qnb481fqd1c4pcmd4lc6v2i6.png-15.1kB


image_1cv4qnjc4pc976e1k3i2qm172cij.png-15kB

結論:分布式復制卷的數據存儲方式為,每個整合的磁盤中都寫入同樣的數據內容,類似於raid1,數據非常安全,讀取性能高,占磁盤容量。

 

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

 

在WebServer上進行數據寫入操作

umount /mnt

mount -o nolock -t nfs 192.168.200.69:gs3 /mnt

df -h

dd if=/dev/zero of=/root/test bs=1024 count=262144 #創建大小為256M的文件

ls

cp test /mnt/ #復制到/mnt目錄下

ls /mnt

du -sh /mnt/test #查看大小為256M

image_1cv4r48kvdqv1u1c1eh31kagsll0.png-70.1kB

 

在glusterfs01和glusterfs02上進行查看(看看數據到底是怎么存的)

du -sh /gluster/brick2/test

image_1cv4r59tbhoe16gr1ssjivt5tpld.png-14.2kB


image_1cv4r5idl1s6u1alj1ksr1gvt1paqlq.png-15.3kB

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

 

四,存儲卷中brick塊設備的擴容

 

4.1 分布式復制卷的擴容

gluster volume add-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force #添加兩個塊設備

gluster volume info gs2

 
  1. Volume Name: gs2
  2. Type: Distributed-Replicate
  3. Volume ID: 0b425dac-fe4b-4e97-882e-39a8d35cc15a
  4. Status: Started
  5. Number of Bricks: 2 x 2 = 4 #已經擴容
  6. Transport-type: tcp
  7. Bricks:
  8. Brick1: glusterfs03:/gluster/brick1
  9. Brick2: glusterfs04:/gluster/brick1
  10. Brick3: glusterfs03:/gluster/brick2
  11. Brick4: glusterfs04:/gluster/brick2
  12. Options Reconfigured:
  13. performance.readdir-ahead: on

image_1cv4t5umgb2sl3k3gcq34dmln7.png-55.1kB

特別提示: 
對分布式復制卷和分布式條帶卷進行擴容時,要特別注意,如果創建卷之初的時候選擇的是replica 2 或者stripe 2。那么擴容時,就必須一次性擴容兩個或兩個的倍數的塊設備。 
例如你給一個分布式復制卷的replica為2,你在增加bricks的時候數量必須為2,4,6,8等。

 

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

 

在WebServer上掛載gs2並查看掛載目錄的容量

umount /mnt

mount -o nolock -t nfs 192.168.200.69:gs2 /mnt

df -hT

image_1cv4t9fvs1mv35ounr35761u8hnk.png-42.8kB

 

在WebServer上進行數據寫入操作

touch /mnt/{11..20}

ls /mnt

image_1cv4tbivggts2011i8h3c1iluo1.png-17.8kB

 

在glusterfs03和glusterfs04上查看數據存到哪里去了

gluster volume info gs2

 
  1. Volume Name: gs2
  2. Type: Distributed-Replicate
  3. Volume ID: 0b425dac-fe4b-4e97-882e-39a8d35cc15a
  4. Status: Started
  5. Number of Bricks: 2 x 2 = 4
  6. Transport-type: tcp
  7. Bricks:
  8. Brick1: glusterfs03:/gluster/brick1 #組成gs2的塊設備就在03和04上
  9. Brick2: glusterfs04:/gluster/brick1
  10. Brick3: glusterfs03:/gluster/brick2
  11. Brick4: glusterfs04:/gluster/brick2
  12. Options Reconfigured:
  13. performance.readdir-ahead: on

ls /gluster/brick1

ls /gluster/brick2

image_1cv4tf1hmt11oovca597bb47oe.png-57.3kB


image_1cv4tfcu24najdd1cs91tl91ajfor.png-20.9kB

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

 

4.3 進行磁盤存儲的平衡

注意:平衡布局是很有必要的,因為布局結構是靜態的,當新的bricks加入現有卷,新創建的文件會分布到舊的bricks中,所以需要平衡布局結構,使新加入的bricks生效。布局平衡只是使新布局生效,並不會在新的布局移動老的數據,如果你想在新布局生效后,重新平衡卷中的數據,還需要對卷中的數據進行平衡。

 

對gs2進行磁盤存儲平衡

gluster volume rebalance gs2 start

image_1cv4ti6kdouodta1i7h14qciffp8.png-24.5kB

 

檢查gs2塊設備磁盤平衡結果

ls /gluster/brick1

ls /gluster/brick2

執行磁盤存儲平衡以后(要想寫入文件需要重新掛載),我們發現數據被復制成了4份在4個塊設備中。

image_1cv4tili22k316fq1jlt1svv470pl.png-21.9kB


image_1cv4tj46c101s1pdm1of81qggk7q2.png-22.3kB

 

五,存儲卷的縮減與刪除

 

(1)對存儲卷中的brick進行縮減

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

 
  1. #先停止卷gs2
  2. [root@glusterfs01 ~]# gluster volume stop gs2
  3. Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
  4. volume stop: gs2: success
  5. #然后移除卷,因為是復制卷且replica為2,因此每次移除必須是2的倍數
  6. [root@glusterfs01 ~]# gluster volume remove-brick gs2 replica 2 glusterfs03:/gluster/brick2 glusterfs04:/gluster/brick2 force
  7. Removing brick(s) can result in data loss. Do you want to Continue? (y/n) y
  8. volume remove-brick commit force: success
  9. #我們發現gs2的卷已經被移除
  10. [root@glusterfs01 ~]# gluster volume info gs2
  11. Volume Name: gs2
  12. Type: Replicate
  13. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8
  14. Status: Stopped
  15. Number of Bricks: 1 x 2 = 2
  16. Transport-type: tcp
  17. Bricks:
  18. Brick1: glusterfs03:/gluster/brick1
  19. Brick2: glusterfs04:/gluster/brick1
  20. Options Reconfigured:
  21. performance.readdir-ahead: on
  22. #重新啟動卷gs2
  23. [root@glusterfs01 ~]# gluster volume start gs2
  24. volume start: gs2: success
 

(2)對存儲卷進行刪除

 
  1. #停止卷gs1
  2. [root@glusterfs01 ~]# gluster volume stop gs1
  3. Stopping volume will make its data inaccessible. Do you want to continue? (y/n) y
  4. volume stop: gs1: success
  5. #刪除卷gs1
  6. [root@glusterfs01 ~]# gluster volume delete gs1
  7. Deleting volume will erase all information about the volume. Do you want to continue? (y/n) y
  8. volume delete: gs1: success
  9. #查看卷信息,發現gs1已經沒了
  10. [root@glusterfs01 ~]# gluster volume info
  11. Volume Name: gs2
  12. Type: Replicate
  13. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8
  14. Status: Started
  15. Number of Bricks: 1 x 2 = 2
  16. Transport-type: tcp
  17. Bricks:
  18. Brick1: glusterfs03:/gluster/brick1
  19. Brick2: glusterfs04:/gluster/brick1
  20. Options Reconfigured:
  21. performance.readdir-ahead: on
  22. Volume Name: gs3
  23. Type: Stripe
  24. Volume ID: 6d2e27c7-f5a1-4473-9df8-a7261851a2ed
  25. Status: Started
  26. Number of Bricks: 1 x 2 = 2
  27. Transport-type: tcp
  28. Bricks:
  29. Brick1: glusterfs01:/gluster/brick2
  30. Brick2: glusterfs02:/gluster/brick2
  31. Options Reconfigured:
  32. performance.readdir-ahead: on
 

*特別提示

無論是縮減卷還是刪除卷,並不會是清除卷中的數據。數據仍舊會保存在對應磁盤上。

 

六,構建企業級分布式存儲

 

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_1ctf3q9n911or1sctaof1n7aemh9.png-287.9kB


image_1ctf3qg0q1ftddp6iog1c0ceem.png-225.9kB

 

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

一般在企業中,采用的是分布式復制卷,因為有數據備份,數據相對安全,分布式條帶卷目前對glusterfs來說沒有完全成熟,存在一定的是數據安全風險。

 

6.5.1 開啟防火牆端口

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

 
  1. iptables -I INPUT -p tcp --dport 24007:24011 -j ACCEPT
  2. iptables -I INPUT -p tcp --dport 49152:49162 -j ACCEPT
 
  1. [root@glusterfs01 ~]# cat /etc/glusterfs/glusterd.vol
  2. volume management
  3. type mgmt/glusterd
  4. option working-directory /var/lib/glusterd
  5. option transport-type socket,rdma
  6. option transport.socket.keepalive-time 10
  7. option transport.socket.keepalive-interval 2
  8. option transport.socket.read-fail-log off
  9. option ping-timeout 0
  10. option event-threads 1
  11. # option base-port 49152 #默認端口可以在這里改,因為這個端口可能會和企業里的kvm端口沖突
 

6.5.2 Glusterfs文件系統優化

image_1ctf3sau339d8331a15nl1mqh13.png-42.1kB

Performance.quick-read:優化讀取小文件的性能

Performance.read-ahead:用預讀的方式提高讀取的性能,有利於應用頻繁持續性的訪問文件,當應用完成當前數據塊讀取的時候,下一個數據塊就已經准備好了。

Performance.write-behind:寫入數據時,先寫入緩存內,再寫入硬盤內,以提高寫入的性能。

Performance.io-cache:緩存已經被讀過的。

 

文件系統優化調整方法

Glusster volume set <卷> <參數>

 
  1. [root@glusterfs01 ~]# gluster volume info gs2
  2. Volume Name: gs2
  3. Type: Replicate
  4. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8
  5. Status: Started
  6. Number of Bricks: 1 x 2 = 2
  7. Transport-type: tcp
  8. Bricks:
  9. Brick1: glusterfs03:/gluster/brick1
  10. Brick2: glusterfs04:/gluster/brick1
  11. Options Reconfigured:
  12. performance.readdir-ahead: on
  13. [root@glusterfs01 ~]# gluster volume set gs2 performance.read-ahead on #設置預緩存優化
  14. volume set: success
  15. [root@glusterfs01 ~]# gluster volume info gs2
  16. Volume Name: gs2
  17. Type: Replicate
  18. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8
  19. Status: Started
  20. Number of Bricks: 1 x 2 = 2
  21. Transport-type: tcp
  22. Bricks:
  23. Brick1: glusterfs03:/gluster/brick1
  24. Brick2: glusterfs04:/gluster/brick1
  25. Options Reconfigured:
  26. performance.read-ahead: on #已經添加上了
  27. performance.readdir-ahead: on
  28. [root@glusterfs01 ~]# gluster volume set gs2 performance.cache-size 256MB #設置讀緩存大小
  29. volume set: success
  30. [root@glusterfs01 ~]# gluster volume info gs2
  31. Volume Name: gs2
  32. Type: Replicate
  33. Volume ID: c76fe8fd-71a7-4395-9dd2-ef1dc85163b8
  34. Status: Started
  35. Number of Bricks: 1 x 2 = 2
  36. Transport-type: tcp
  37. Bricks:
  38. Brick1: glusterfs03:/gluster/brick1
  39. Brick2: glusterfs04:/gluster/brick1
  40. Options Reconfigured:
  41. performance.cache-size: 256MB #已經添加上了
  42. performance.read-ahead: on
  43. performance.readdir-ahead: on
 

6.5.3 監控及日常維護

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

 
  1. #以下命令在復制卷的場景下才會有
  2. #gluster volume status gs2 查看節點NFS是否在線
  3. (開沒開端口)
  4. #gluster volume heal gs2 full 啟動完全修復
  5. #gluster volume heal gs2 info 查看需要修復的文件
  6. #gluster volume heal gs2 info healed 查看修復成功的文件
  7. #gluster volume heal gs2 info heal-failed 查看修復失敗文件
  8. #gluster volume heal gs2 info split-brain 查看腦裂的文件
  9. #gluster volume quota gs2 enable --激活quota功能
  10. #gluster volume quota gs2 disable --關閉quota功能
  11. #gluster volume quota gs2 limit-usage /data 10GB --/gs2/data 目錄限制
  12. #gluster volume quota gs2 list --quota 信息列表
  13. #gluster volume quota gs2 list /data --限制目錄的quota信息
  14. #gluster volume set gs2 features.quota-timeout 5 --設置信息的超時事實上時間
  15. #gluster volume quota gs2 remove /data -刪除某個目錄的quota設置
  16. 備注:
  17. 1quota 功能,主要是對掛載點下的某個目錄進行空間限額。如:/mnt/glusterfs/data目錄,而不是對組成卷組的空間進行限制
 

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

 

7.1 硬盤故障

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

 

7.2 一台主機故障

一台節點故障的情況包括以下類型: 
1,物理故障 
2,同時有多塊硬盤故障,造成是數據丟失 
3,系統損壞不可修復

解決方法: 
找一台完全一樣的機器,至少要保證硬盤數量和大小一致,安裝系統,配置和故障機同樣的ip,安裝gluster軟件,保證配置一樣,在其他健康的節點上執行命令gluster peer status,查看故障服務器的uuid

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

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

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

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

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

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

 
    1. [root@glusterfs04 ~]# gluster volume heal gs2 info
    2. Brick glusterfs03:/gluster/brick1
    3. Status: Connected
    4. Number of entries: 0
    5. Brick glusterfs04:/gluster/brick1
    6. Status: Connected
    7. Number of entries: 0


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM