學習GlusterFS(六)

1、GlusterFS概述

分佈式文件系統由來
  在介紹以前咱們先來看下文件系統及典型的NFS文件系統。html

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

典型表明NFSnode

  NFS即網絡文件系統,它容許網絡計算機之間經過TCP/IP網絡共享資源,在NFS應用中,本地的NFS客戶端應用能夠透明的讀取遠端NFS服務器上的文件。

優勢以下:
  1.節約使用的磁盤空間
  客戶端常用的數據能夠集中放在一臺機器上,並使用NFS發佈,那麼網絡內部全部計算機能夠經過網絡訪問,沒必要單獨共享。
  2.節約硬件資源
  NFS還能夠共享軟驅,CDROM和ZIP等存儲設備,減小整個網絡上的可移動設備的數量。
  3.用戶主目錄設定linux

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

GlusterFS概述算法

  GlusterFS是Scale-Out存儲解決方案Gluster的核心,它是一個開源的分佈式文件系統,具備強大的橫向擴展能力,經過擴展可以支持數PB存儲容量和處理數千客戶端。GlusterFS藉助TCP/IP或GlusterFS基於可堆疊的用戶空間設計,可爲各類不一樣的數據負載提供優異的性能。
  GlusterFS支持運行在任何標準的IP網絡上標準應用程序客戶端,用戶能夠在全局統一的命名空間使用NFS、CIFS等標準協議來訪問應用數據。GlusterFS使用的用戶可擺脫原有的獨立,高成本的封閉存儲系統,可以利用普通廉價的存儲設備來部署可集中管理、橫向拓展、虛擬化的存儲池,存儲容量可拓展至TP/PB級.

前glusterfs已rehat收購,官方網站是:https://www.gluster.org/centos

GlusterFS安裝部署
1.安裝glusterfs依賴的包api

yum install -y centos-release-gluster37.noarch
yum --enablerepo=centos-gulster*-test install gluster-server gluster-cli gluster-geo-replication

2、GlusterFS安裝部署實踐

2.1GlusterFS安裝環境準備
#準備好4臺Centos6-x86_64虛擬機 內存1G 數據盤10G 網絡選擇nat;
每臺機器,關閉 selinux iptables並作每臺好主機名解析:緩存

  192.168.10.101 mystorage1
  192.168.10.102 mystorage2
  192.168.10.103 mystorage3
  192.168.10.104 mystorage4

補充說明:
#修改主機名2個位置安全

1. 修改 /etc/sysconfig/network 另一個是  /etc/hosts
vi /etc/sysconfig/network
裏面有一行 HOSTNAME=localhost.localmain修改爲localhost.localdomain做爲主機名
/etc/hosts裏面有一行 127.0.0.1 localhost.localdomain(主機名hostname)

2.2關閉selinux及iptables服務器

#關閉selinux
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux或
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
#關閉iptables
/etc/init.d/iptables stop
#永久關閉
chkconfig iptables off

2.3安裝epel源(4臺主機分別執行)網絡

GlusterFS yum 源有部分包依賴epel源
yum -y install epel-release

2.4安裝glusterfs源(4臺主機分別執行)

wget -P /etc/yum.repos.d/
https://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/RHEL/glusterfs-epel.repo

或者gluster的相關包下載到本地目錄
主要包括

glusterfs-3.7.4-2.e16.x86_64.rpm
glusterfs-cli-3.7.4-2.e16.x86_64.rpm
glusterfs-debuginfo-3.7.4-2.e16.x86_64.rpm
glusterfs-geo-replication-3.7.4-2.e16.x86_64.rpm
glusterfs-rdma-3.7.4-2.e16.x86_64.rpm
glusterfs-api-3.7.4-2.e16.x86_64.rpm
glusterfs-client-xlators-3.7.4-2.e16.x86_64.rpm
glusterfs-fuse-3.7.4-2.e16.x86_64.rpm
glusterfs-libs-3.7.4-2.e16.x86_64.rpm
glusterfs-server-3.7.4-2.e16.x86_64.rpm

下載地址:

https://download.gluster.org/pub/gluster/glusterfs/3.7/LATEST/CentOS/epel-6.8/x86_64/

例如:(4臺主機分別執行)

執行yum -y install glusterfs-*
mkdir -p /opt/glusterfs

一直執行完畢,沒有報錯的話,glusterfs安裝完畢;
2.5或者yum安裝(4臺主機分別執行)

yum install -y centos-release-gluster37.noarch
yum --enablerepo=centos-gluster*-test install glusterfs-server glusterfs-cli glusterfs-geo-replication

2.6配置Glusterfs
#查看gluster版本信息
glusterfs -V
#啓動中止服務(4臺主機分別執行)

/etc/init.d/glusterd start
/etc/init.d/glusterd stop

#添加開機啓動(4臺主機分別執行)
chkconfig glusterd on
#查看glusterfs的運行狀態(4臺主機分別執行)
/etc/init.d/glusterd status
2.7存儲主機加入信任存儲池配置(4臺主機分別執行)
說明:每臺主機上加入除本機之外對應的其餘3臺主機的存儲池配置

gluster peer probe mystorage2
gluster peer probe mystorage3
gluster peer probe mystorage4

#查看配置鏈接存儲池的狀態(4臺主機分別執行)
gluster peer status

3、GlusterFS配置實踐

3.1 配置以前的準備工做
安裝xfs支持包(4臺主機分別執行)
yum -y install xfsprogs
fdisk -l #查看磁盤塊設備,查看相似的信息
#磁盤分區(這步能夠不作)

fdisk /dev/vdb
n
p
1(數字)
回車
w

再次執行fdisk -l查看

說明:若是格式話分區的磁盤大於4T使用 parted命令
生產環境中:磁盤的分區的分區暫時不作。直接對應格式化便可。

#分區格式化,每臺機器上執行
mkfs.xfs -f /dev/sdb
#分別在4臺機器上 執行

mkdir -p /storage/brick1  #創建掛在塊設備的目錄
mount /dev/sdb /storage/brick1

執行df -h查看
#開機自動掛載(4臺機器中每臺執行)
編輯/etc/fstab添加以下
/dev/sdb /storage/brick1 xfs defaults 0 0
或者執行命令:(4臺機器中每臺執行)
echo "/dev/sdb /storage/brick1 xfs defaults 0 0" >> /etc/fstab
#4臺機器中機器分別執行掛載命令
mount -a
#每臺機器執行查看掛載狀況命令;(4臺機器也都自動掛載了)
df -h
3.2建立volume及其操做

  Distributed,分佈卷,算法隨機分佈到bricks組的捲上。
  Replicated 複製試卷,相似raid1 replica數必須等於volume中brick所包含存儲服務器數,可用性高。
  Striped,帶條帶的卷,相似raid0 stripe數必須等於volume中brick所包含的存儲服務器數,文件被分割數據模塊,以RoundRobin的方式存儲在bricks,併發顆粒度是數據塊,大文件性能好.
  Distributed Striped分佈式的條帶卷,volume中的brick所包含的存儲服務器數必須是stripe的倍數(>=2倍)兼顧分佈式和條帶的功能、(生產環境通常不使用,官方也不推薦)
  Distributed Relicated分佈式的複製卷,volume中brick1所包含的存儲服務器數必須是replica的倍數(>=2倍)兼顧分佈式和複製的功能。(生產環境使用較多)

情景1:
3.3建立分佈卷(任意一臺主機執行便可)[意義是跨主機整合磁盤]

gluster volume create gv1 mystorage1:/storage/brick1 mystorage2:/storage/brick1 force

3.4建立啓動卷(任意一臺主機執行便可)

[root@ mystorage1brick1]# gluster volume start gv1

#查看配置卷的信息

[root@ mystorage1brick1]# gluster volume info

3.5掛載到目錄(任意一臺主機執行便可)

mount -t glusterfs 127.0.0.1:/gv1 /mnt

3.6#查看掛載後的磁盤(任意一臺主機執行便可)

df -h

3.7建立文件查看測試結果
#mystorage1s上建立文件

[root@mystorage1 mnt]# touch a b c dd ddf

#mystorage3查看建立文件

[root@mystorage3 mnt]# ls
a b c dd ddf

情景2:
3.8測試NFS方式掛載及查看數據

[root@mystorage4 /]# umount /mnt/
[root@mystorage4 /]# mount -o mountproto=tcp -t nfs 192.168.56.11:/gv1 /mnt/
[root@mystorage4 /]# df -h
[root@mystorage4 /]# umount /mnt/

#測試掛載另一臺機器

[root@mystorage4 /]# mount -o mountproto=tcp -t nfs 192.168.56.12:/gv1 /mnt/
[root@mystorage4 /]# df -h
[root@mystorage4 /]# umount /mnt/

情景3:
3.9建立分佈式複製卷(storage3和storage4)[生產場景推薦使用此種方式]

[root@mystorage1 mnt]# gluster volume create gv2 replica 2 mystorage3:/storage/brick1 mystorage4:/storage/brick1 force
[root@mystorage2 ~]# gluster volume start gv2
[root@mystorage1 mnt]# df -h
[root@mystorage1 mnt]# mount -t glusterfs 127.0.0.1:/gv2 /opt
[root@mystorage1 mnt]# df -h
[root@mystorage1 mnt]# cd /opt/
[root@mystorage1 opt]# touch sdfsd sdf

3.10測試查看分佈式複製的數據(storage3和storage4)

[root@mystorage3 mnt]# cd /storage/brick1
[root@mystorage3 brick1]# ls
sdfsd sdf
[root@mystorage4 mnt]# cd /storage/brick1
[root@mystorage4 brick1]# ls
sdfsd sdf

說明:以上兩種狀況,一是建立分佈卷,另外建立分佈式複製卷,生產場景中通常使用1個卷(整合多個磁盤到一個卷)使用分佈式複製卷場景(情景3)居多。

情景4:
3.11建立分佈式條帶卷
#建立卷目錄(4臺主機分別執行)
mkdir -p /storage/brick2
#添加開機啓動自動掛載(4臺主機分別執行)
echo "/dev/sdc /storage/brick2 xfs defaults 0 0" >>/etc/fstab
#執行掛載(4臺主機分別執行)
mount -a
#查看掛載狀況(4臺主機分別執行)
df -h
#建立分佈式條帶卷(storage1上執行)
gluster volume create gv3 stripe 2 mystorage3:/storage/brick2 mystorage4:/storage/brick2 force
#啓動卷(storage1上執行)
gluster volume start gv3
#查看配置卷信息
gluster volume info
#建立要掛載的目錄(分別在4臺機器的根上新建gv1 gv2 gv3)
mkdir /gv1 /gv2 /gv3
#執行掛載命令(storage4上執行)(4臺機器也可都執行)

mount -t glusterfs 127.0.0.1:gv1 /gv1
mount -t glusterfs 127.0.0.1:gv2 /gv2
mount -t glusterfs 127.0.0.1:gv3 /gv3
df -h

#咱們建立一個10M的目錄測試(storage4上)

[root@mystorage4 gv3]# ls -a
. .. .trashcan
[root@mystorage4 gv3]# dd if=/dev/zero bs=1024 count=10000 of=/gv3/10M.file
[root@mystorage4 gv3]# dd if=/dev/zero bs=2048 count=10000 of=/gv3/20M.file
[root@mystorage4 gv3]# cd /storage/brick2
[root@mystorage4 brick2]# ls -lh

#進入到storage3上看下

[root@mystorage3 gv3]# cd /storage/brick2
[root@mystorage3 brick2]# ls -lh

對比兩邊的文件你會發現兩個文件被打散分別存儲在storage3和storage4上了、

[root@mystorage3 gv3]# ls -lh  #也會看到剛咱們建立的兩個文件。

#咱們在storage3上 gv2目錄測試

[root@mystorage3 gv2]# dd if=/dev/zero bs=1024 count=10000 of=/gv2/10M.file
[root@mystorage3 gv2]# dd if=/dev/zero bs=2048 count=10000 of=/gv2/20M.file

#進入到storage3 brick1和storage4 brick1對比查看

[root@mystorage3 brick1]# ls -lh
[root@mystorage4 brick1]# ls -lh

3.12 添加磁盤操做
#中止gv2 數據服務
gluster volume stop gv2
#添加新加的磁盤的到存儲池
gluster volume add-brick gv2 replica 2 mystorage1:/storage/brick2 mystorage2:/storage/brick2 force
#啓動啓動卷
gluster volume start gv2
#取消掛載gv2,從新掛載

umount /gv2
mount -t glusterfs 127.0.0.1:/gv2 /gv2

#查看掛載結果(gv2已經變成20G了)
df -h
#查看gv2卷信息
gluster volume info gv2

注意說明:
當你給分佈式複製卷和分佈式條帶卷中增長bricks時,你增長的bricks的數目必須是複製卷和條帶卷數目的倍數。例如:
你給一個分佈式複製卷的replica爲2 你在增長bricks的時候數量必須爲2.4.6.8等。

3.13磁盤存儲的平衡:

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

執行命令:(可在storage1上執行)
gluster volume rebalance gv2 start
#查看執行平衡後同步的狀態
gluster volume rebalance gv2 status
3.14移除brick

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

執行操做:
gluster volume stop gv2
#移除操做
gluster volume remove-brick gv2 replica 2 mystorage3:/storage/brick1 mystorage4:/storage/brick1 force
3.15刪除卷
#storege4上看下掛載狀況
df -h
#卸載gv1
umount /gv1
#中止卷
gluster volume stop gv1
#刪除卷
gluster volume
#查看卷信息
gluster volume info gv1

GlusterFS在企業中應用場景

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

Media
  -文檔、圖片、音頻、視頻
 *Shared storage  
  -雲存儲、虛擬化存儲、HPC(高性能計算)
 *Big data
  -日誌文件、RFID(射頻識別)數據

 

###########################################################################################

1、構建高性能分佈式存儲基本條件和要求

1.1硬件要求:

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

1.2系統要求和分區劃分

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

1.3網絡環境
  網絡要求所有千兆環境,gluster服務器至少有2塊網卡,1塊網卡綁定供gluster使用,另外1塊管理網絡ip用於系統管理。若是有條件購買萬兆交換機,服務器可配置萬兆網卡,存儲性能會更好,網絡方面若是安全性要求較高,能夠多網卡綁定。
1.4服務器擺放分佈
  服務器主備要求放在不一樣的機櫃,鏈接不一樣的交換機,即便一個機櫃出現問題,還有一份數據可以正常訪問。

1.5構建高性能高可用存儲
  通常在企業中,採用的是分佈式複製卷,由於有數據備份,數據相對安全,分佈式條帶卷目前對gulsterfs來講沒有徹底成熟,存儲必定的數據安全風險。
補充說明:
  開啓防火牆端口
  通常在企業中linux的防火牆是打開的,部署gluster服務服務器須要開通以下端口:
命令以下:

iptables -I INPUT -p tcp --dport 24007:24011 -j ACCEPT
iptables -I INPUT -p tcp --dport 38465:38485 -j ACCEPT

部署安裝GlusterFS見前面文章https://www.liuliya.com/archive/733.html

2、構建高性能分佈式存儲實踐優化

2.1GlusterFS文件系統優化

Auth_allow  #IP訪問受權;缺省值(*.allow all);合法值:Ip地址
Cluster.min-free-disk  #剩餘磁盤空間閥值;缺省值(10%);合法值:百分比
Cluster.stripe-block-size  #條帶大小;缺省值(128KB);合法值:字節
Network.frame-timeout  #請求等待時間;缺省值(1800s);合法值:1-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:緩存已經被讀過的、

2.2優化參數調整方式

命令格式:
gluster.volume set <卷><參數>

例如:
#打開預讀方式訪問存儲
[root@mystorage gv2]# gluster volume set gv2 performance.read-ahead on
#調整讀取緩存的大小
[root@mystorage gv2]# gluster volume set gv2 performance.cache-size 256M
2.3監控及平常維護
  使用zabbix自帶的模板便可,CPU、內存、磁盤空間、主機運行時間、系統load。平常狀況要查看服務器監控值,遇到報警要及時處理。
#看下節點有沒有在線
gluster volume status nfsp
#啓動徹底修復
gluster volume heal gv2 full
#查看須要修復的文件
gluster volume heal gv2 info
#查看修復成功的文件
gluster volume heal gv2 info healed
#查看修復失敗的文件
gluster volume heal gv2 heal-failed
#查看主機的狀態
gluster peer status
#查看腦裂的文件
gluster volume heal gv2 info split-brain
#激活quota功能
gluster volume quota gv2 enable
#關閉quota功能
gulster volume quota gv2 disable
#目錄限制(卷中文件夾的大小)
gluster volume quota limit-usage /data/30MB --/gv2/data
#quota信息列表
gluster volume quota gv2 list
#限制目錄的quota信息
gluster volume quota gv2 list /data
#設置信息的超時時間
gluster volume set gv2 features.quota-timeout 5
#刪除某個目錄的quota設置
gluster volume quota gv2 remove /data

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

3、Gluster平常維護及故障處理

3.1硬盤故障
  由於底層作了raid配置,有硬件故障,直接更換硬盤,會自動同步數據。
若是沒有作raid處理方法:

  1)正常node 執行gluster volume status 記錄故障節點uuid
  2)執行getfattr -d -m '.*' /brick
  3)記錄trusted.glusterfs.volume-id 及trusted.gfid

例如:
[root@mystorage1 gv2]# getfattr -d -m '.*' /storage/brick2
在機器上更換新磁盤,掛載目錄
執行以下命令:

setfattr -n trusted.glusterfs.volume-id -v 記錄值 brickpath
setfattr -n trusted.gfid -v 記錄值 brickpath
/etc/init.d/glusterd restart

3.2主機故障
一臺節點故障的狀況包括如下狀況:

  a)物理故障;
  b)同時有多快硬盤故障,形成數據丟失;
  c)系統損壞不可修復

解決方法:

  1)找一臺徹底同樣的機器,至少要保證數量和大小一致,安裝系統,配置和故障機器一樣的ip安裝gluster軟件,保證配置都同樣,在其餘健康的節點上執行命令gluster peer status,查看故障服務器的uuid。
  2)修改新加機器的/var/lib/glusterd/glusterd.info和故障機器的同樣。

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

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

cat /var/lib/glusterd/glusterd.info
UUID=2e3B51aa-45b2-4cc0-bc44-457d42210ff1[root@mystorage1 gv2]# gluster volume heal gv1 full[root@drbd01~]# gluster volume heal gv2 info

  工做Glusterfs還有不少優化的位置點。具體細節官方文檔最詳細哈。 http://gluster.readthedocs.io/en/latest/Contributors-Guide/Guidelines-For-Maintainers/

相關文章
相關標籤/搜索